Автор | Сообщение |
|
Отправлено: 29.03.22 18:40. Заголовок: Задание 17 №4423
И так дорогие друзья вам пишет ученик 3 - его класса школы коррекции. Вот решение и ответ которые нам предлагают. data = [int(x) for x in open('17.txt')] def cond(x): return x > 0 and x % 10 == 9 ma = 0 count = 0 for i in range(2,len(data)): if (not cond(data[i-2])) and cond(data[i-1]) and \ (not cond(data[ i])): count += 1 ma = max(ma, sum(data[i-2:i+1])) print( count, ma) Ответ:206 23427 Итак, как мы все знаем при отрицании операнда И он превращается в операнд ИЛИ. Из-за этого в приведенном выше коде случается ошибка, когда не подходящие по условию числа учитываются в ответе. МОЖНО ИСПРАВИТЬ ДАННЫЙ КОД, НАПИСАВ НОВЫЙ,(ЭТОТ УЖЕ НЕ СПАСТИ)(шутка). Вот правильное написание: data = [int(x) for x in open('17.txt')] def cond1(x): return x > 0 and x % 10 == 9 def cond(x): return x > 0 ma = 0 count = 0 for i in range(2,len(data)): if (not cond(data[i-2])) and cond1(data[i-1]) and \ (not cond(data[ i])): count += 1 ma = max(ma, sum(data[i-2:i+1])) print( count, ma) Ответ: 63 6241 НО если вы мне не верите могу представить вашему вниманию еще один код: with open('17.txt') as f: s = [int(i) for i in f.readlines()] d = [] for o in range(len(s)-2): if s[o+1] > 0 and s[o] < 0 and s[o+2] < 0 and s[o+1] % 10 == 9: d.append(s[o] + s[o+1] + s[o+2]) print(max(d),len(d)) Ответ: 6241 63
|
|
|
Ответов - 5
[только новые]
|
|
|
Отправлено: 29.03.22 22:20. Заголовок: В исходном коде нет ..
В исходном коде нет отрицания операнда И, оператор not относится только к функции cond(). Ответ на сайте правильный. Можете решить задачу в Excel и наглядно увидеть эти 206 троек.
|
|
|
|
Отправлено: 29.03.22 22:36. Заголовок: хмхмхм жалко нельзя ..
хмхмхм жалко нельзя кидать скриншоты но вот моя формула в exel =ЕСЛИ(И(A1<0;A2>0;A3<0;ОСТАТ(A2;10)=9);1;0) и она тоже показывает 63. КАК ХОРОШО ЧТО ЛЮДИ ПРОВЕРЯЮТ ИНФОРМАЦИЮ ПЕРЕД ТЕМ КАК ОТВЕТИТЬ.
|
|
|
|
| Администратор
|
Сообщение: 3421
|
|
Отправлено: 30.03.22 11:58. Заголовок: Условие x > 0 an..
Условие x > 0 and x % 10 == 9 должно выполняться только для второго числа тройки. Это значит, что для остальных двух чисел должно выполняться обратное условие: x <= 0 or x % 10 != 9. Как вы правильно заметили, при инверсии and меняется на or. Если вы хотели решить задачу с двумя условиями, это можно было сделать так: data = [int(x) for x in open('17-204.txt')] def cond1(x): return x > 0 and x % 10 == 9 def cond(x): return x <= 0 or x % 10 != 9 ma = 0 count = 0 for i in range(2,len(data)): if cond(data[i-2]) and cond1(data[i-1]) and \ cond(data[ i]): count += 1 ma = max(ma, sum(data[i-2:i+1])) print( count, ma) Ответ на сайте верный.
|
|
|
|
Отправлено: 30.03.22 17:04. Заголовок: Задание 17 №4423
Но разве если там стоит or то это уже не будет ошибкой? приведу пример у нас есть тройка 1346 4539 -1244 так вот логической операции or достаточно выполнения одного условия из двух чтобы вернуть True поэтому мы зачтем эту тройку хотя в условии написано: Тройка идущих подряд чисел последовательности называется уникальной, если только второе из них является положительным числом. Поэтому я и написал сюда с просьбой исправить ответ или поменять формулировку задания
|
|
|
|
| Администратор
|
Сообщение: 3424
|
|
Отправлено: 30.03.22 17:13. Заголовок: koBANov пишет: у нас..
koBANov пишет: цитата: | у нас есть тройка 1346 4539 -1244 так вот логической операции or достаточно выполнения одного условия из двух чтобы вернуть True поэтому мы зачтем эту тройку |
|
Да, это подходяшщая тройка. Она соответствует условию задачи.
|
|
|
|