Форум сайта python.su
Паша очень любит кататься на общественном транспорте, а получая билет, сразу проверяет, счастливый ли ему попался. Билет считается счастливым, если сумма первых трех цифр совпадает с суммой последних трех цифр номера билета.
Однако Паша очень плохо считает в уме, поэтому попросил вас написать программу, которая проверит равенство сумм и выведет “Счастливый”, если суммы совпадают, и “Обычный”, если суммы различны.
На вход программе подаётся строка из шести цифр.
Выводить нужно только слово “Счастливый” или “Обычный”, с большой буквы.
вот, что я написал:
biletik=input() biletik=int(biletik) if sum(biletik[:3])== sum(biletik[-3:]): print("Счастливый") else: print("Обычный")
Офлайн
Насколько я понимаю, оператор sum сам по себе не может со среза изымать члены и суммировать их. Но самое главное, числа это не изменяемый тип, срезать их невозможно, нельзя получить срез числа.
Отредактировано Originator (Сен. 28, 2015 23:26:39)
Офлайн
biletik = input("Введите номер билета из 6 цифр: ") numbers = list(biletik) numbers = [int(i) for i in numbers] if (sum(numbers[:3]) == sum(numbers[3:])): print("Счастливый") else: print("Обычный")
Офлайн
old_montyа как же можно сделать эту задачу без ‘for’ ?)
Офлайн
YVeselovskyi
без ‘for’
biletik = input("Введите номер билета из 6 цифр: ") numbers = map(int, biletik) if (sum(numbers[:3]) == sum(numbers[3:])): print("Счастливый") else: print("Обычный")
Офлайн
botinag
>>> Введите номер билета из 6 цифр: 123321 Traceback (most recent call last): File "/Users/old_monty/Documents/biletik.py", line 11, in <module> if (sum(numbers[:3]) == sum(numbers[3:])): TypeError: 'map' object is not subscriptable >>>
Офлайн
YVeselovskyiЧем ‘for’ плох, почему не устраивает? Без итерации здесь все равно не обойтись. ‘for’ обязательно будет использоваться, явно или неявно.
а как же можно сделать эту задачу без ‘for’ ?
Отредактировано old_monty (Сен. 28, 2015 23:09:36)
Офлайн
>>> def is_lucky(s): ... t = tuple(map(int, s)) ... n = len(s) // 2 ... return sum(t[:n]) == sum(t[n:]) ... >>> is_lucky('123231') True >>> is_lucky('123232') False >>>
Отредактировано py.user.next (Сен. 29, 2015 02:52:16)
Офлайн
Originator
ох….учите матчасть..давжды..столкьо ляпо в 2 небольших предложениях…
Originatorэто не оператор, а встроенная функция. Если не видите в чем разница, читать вам книги надо.
оператор sum
Originatorвообще не понимаете сути происходящего, учите что такое срезы, и почему пример ниже благополучно работает
сам по себе не может со среза изымать члены
>>> a=range(5) >>> a [0, 1, 2, 3, 4] >>> a[:3] [0, 1, 2] >>> sum(a[:3]) 3
OriginatorОдно не является следствием другого, опять же отсутствует понимание основ Python. Строки тоже не изменяемый тип, но срез строк свободно осуществим:
числа это не изменяемый тип, срезать их невозможно, нельзя получить срез числа
>>> s='qwerty' >>> s[:3] 'qwe'
>>> class A(object): ... def __init__(self,value): ... self.value = value ... def __getitem__(self, index): ... return self.value[index] ... >>> >>> a=A(range(5)) >>> a.value [0, 1, 2, 3, 4] >>> a[0] 0 >>> a[0:2] [0, 1] >>>
Офлайн
Ещё добавлю
Originator
числа это не изменяемый тип, срезать их невозможно, нельзя получить срез числа
>>> n = 123456 >>> divmod(n, 1000) (123, 456) >>> divmod(n, 100) (1234, 56) >>>
Отредактировано py.user.next (Сен. 29, 2015 05:19:49)
Офлайн