На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 21
ссылка на сообщение  Отправлено: 20.09.22 15:44. Заголовок: Демоверсия ФИПИ на 2023 год 9 задача


Добрый день! Помогите пожалуйста найти ошибку в программе.
Задача:
Откройте файл электронной таблицы, содержащей в каждой строке шесть
натуральных чисел. Определите количество строк таблицы, содержащих
числа, для которых выполнены оба условия:
– в строке только одно число повторяется ровно два раза, остальные
числа различны;
– среднее арифметическое неповторяющихся чисел строки не больше
суммы повторяющихся чисел.
В ответе запишите только число.

Решение:
count = 0 
f = open("9.csv")
for s in f:
si = [0] * 6
# в si хранится строка, переведенная в целые числа
s = s.split(";")
if (s.count(s[0]) + s.count(s[1]) +
s.count(s[2]) + s.count(s[3]) +
s.count(s[4]) +s.count(s[5])) == 8:
#проверяю наличие в строке одинаковых элементов
for i in range(6):
si = int(s)
#если такие есть, перевожу строку в числа
for i in range(6):
if s.count(s) == 2 and (si * 2) >= ((sum(si) - si * 2)// 4):
count += 1
break
#если нашел в строке два совпадающих элемента
#проверяю будет ли их сумма больше либо равна среднему остальных 4
#если да увеличиваю количество найденых строк и перехожу к следующей строке
print(count)
f.close()


С ответом не сходится.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 11 [только новые]





Сообщение: 24
ссылка на сообщение  Отправлено: 23.09.22 16:58. Заголовок: Разобрался! Ошибка г..


Разобрался! Ошибка глупейшая :(. При считывании из строки к последнему символу добавляется символ перехода на новую строку. Соответственно потерял все строки, где конечный символ был парным.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 195
ссылка на сообщение  Отправлено: 24.11.22 10:15. Заголовок: konyashkind пишет: ..


konyashkind пишет:

 цитата:
Ошибка глупейшая :



Друг, подскажи как ты от нее избавился!
Опубликуй код, только переменные i замени на j, пожалуйста!!!

Спасибо

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 192
ссылка на сообщение  Отправлено: 23.11.22 16:53. Заголовок: konyashkind пишет: ..


konyashkind пишет:

 цитата:
С ответом не сходится.



А эта программа вообще то работает?
У меня она печатает:
line 14, in <module> si = int(s)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 193
ссылка на сообщение  Отправлено: 23.11.22 17:15. Заголовок: Попробовал решить эу..


Попробовал решить эту задачку в таблице, получилось строк – 2236.
Подскажите, кто может, что я мог не учесть.
Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 199
ссылка на сообщение  Отправлено: 26.11.22 02:14. Заголовок: s11kai пишет: Попро..


s11kai пишет:

 цитата:
Попробовал решить эту задачку в таблице


В опубликованном решении задействовано 9 столбцов, я использовал несколько иной подход и поэтому решение заняло всего 7 столбцов.

Если кому будет интересно, то вот их значения:

G1 =ЕСЛИ(СЧЁТЕСЛИ(A1:F1;A1)>1;A1*2;0)
H1 =ЕСЛИ(СЧЁТЕСЛИ(B1:F1;B1)>1;B1*2;0)
I1 =ЕСЛИ(СЧЁТЕСЛИ(C1:F1;C1)>1;C1*2;0)
J1 =ЕСЛИ(СЧЁТЕСЛИ(D1:F1;D1)>1;D1*2;0)
K1 =ЕСЛИ(СЧЁТЕСЛИ(E1:F1;E1)>1;E1*2;0)
L1 =ЕСЛИ(СУММ(G1:K1)=МАКС(G1:K1);(СУММ(A1:F1)-МАКС(G1:K1))/4;0)
M1 =ЕСЛИ(И(L1>0;L1<=СУММ(G1:K1));1;0)


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 194
ссылка на сообщение  Отправлено: 24.11.22 10:11. Заголовок: s11kai пишет: Попро..


s11kai пишет:

 цитата:
Попробовал решить эту задачку в таблице, получилось строк – 2236.


Нашел, не учел что среднее значение может быть и равно сумме одинаковых чисел!

А программа не работает потому, что html страница форума, код si'['i']' - принимает его за тег шрифта италик и удаляет его изменяя саму программу. Для сохранения работоспособности кода программ после публикации нужно только переменную i заменить на j.

Здесь интересно другое, почему в строке к последней цифре приписывается код "\n".
Кто-нибудь может подсказать, как избавиться от этого кода?

Нашел совет в интернете: f = open("9_.csv").read().split()
Код действительно отбрасывается, но при этом появляется ошибка закрытия файла

Спасибо

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 196
ссылка на сообщение  Отправлено: 26.11.22 01:27. Заголовок: konyashkind пишет: ..


konyashkind пишет:

 цитата:
Разобрался! Ошибка глупейшая :(. При считывании из строки к последнему символу добавляется символ перехода на новую строку. Соответственно потерял все строки, где конечный символ был парным.



Добрый день, konyashkind!

У тебя там есть и другая ошибка, не устранив которую, не получишь верного ответа.
Вот маленький тест - код демонстрирующий эту ошибку:

x=12+18+89+10+36+18
x2=2*18
sr1=(x-x2)/4
sr2=(x-x2)//4
print(x,x2,sr1,sr2)

183 36 36.75 36

Кстати, на сайте уже опубликованы интересные решения данной задачи от авторов Е. Филина и А. Рогов.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 197
ссылка на сообщение  Отправлено: 26.11.22 01:31. Заголовок: Предлагаю взглянуть ..


Предлагаю взглянуть и на мое решение, вдруг будет интересно, оно построено только на базовых понятиях:
 
otvet = 0
with open("9.csv") as f:
for s in f:
su = c = 0
si = [0]*6
s = s.split(";")
for j in range(6):
si[j] = int(s[j])
su = su+si[j]
for j in range(5):
for jj in range(j+1,6):
if int(s[j])==int(s[jj]):
c+=1
pam = 2*int(s[j])
if (c==1) and (pam >= (su - pam)/4):
otvet+=1


print('otvet:',otvet)
f.close() #можно не использовать


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 198
ссылка на сообщение  Отправлено: 26.11.22 01:52. Заголовок: Константин Юрьевич, ..


Константин Юрьевич, здравствуйте!

Возник один вопрос, во всех "старых" языках программирования было правило: после открытия файла и обработки данных необходимо его обязательно закрыть. Но, в опубликованных решениях код закрытия отсутствует, неужели в питоне разрешено открытые файлы после использования не закрывать?

Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 3784
ссылка на сообщение  Отправлено: 26.11.22 09:34. Заголовок: s11kai пишет: Возник..


s11kai пишет:
 цитата:
Возник один вопрос, во всех "старых" языках программирования было правило: после открытия файла и обработки данных необходимо его обязательно закрыть. Но, в опубликованных решениях код закрытия отсутствует, неужели в питоне разрешено открытые файлы после использования не закрывать?

Александр Иванович, во всех известных мне языках файлы автоматически закрываются и деблокируются после завершения работы программы. Незакрытие файла может быть критично, если программа несколько раз открывает и не закрывает файл на запись/добавление. Хотя такой вариант (без закрытия), конечно, некрасивый и его следует избегать. Кроме того, при использовании некоторых конструкций в Python, например, with-as, файл закрывается автоматически после выхода из блока with.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 200
ссылка на сообщение  Отправлено: 27.11.22 02:44. Заголовок: Поляков пишет: Хотя..


Поляков пишет:

 цитата:
Хотя такой вариант (без закрытия), конечно, некрасивый и его следует избегать


Именно это я и имел ввиду, например, существовала, команда goto, но использовать ее было как бы не "прилично", а не закрыл несколько раз открытый файл, стек переполнил - со всеми вытекающими, твои проблемы...

Поляков пишет:

 цитата:
при использовании некоторых конструкций в Python, например, with-as, файл закрывается автоматически после выхода из блока with


А вот этого, к сожалению, я действительно не знал!
Крайний вопрос, если можно.
 
with open("9.csv") as f:
for s in f:
s = s.split(";")
print(s)

Почему, к последнему элементу прилипает "\n" и как от него избавиться?
['37', '83', '24', '19', '37', '41\n']
['59', '77', '43', '43', '118', '38\n']
['6', '65', '40', '22', '6', '130\n']

Спасибо за науку, Константин Юрьевич!!!

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 991
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет