Найти - Пользователи
Полная версия: Не могу понять
Начало » Python для новичков » Не могу понять
1 2
YVeselovskyi
Паша очень любит кататься на общественном транспорте, а получая билет, сразу проверяет, счастливый ли ему попался. Билет считается счастливым, если сумма первых трех цифр совпадает с суммой последних трех цифр номера билета.

Однако Паша очень плохо считает в уме, поэтому попросил вас написать программу, которая проверит равенство сумм и выведет “Счастливый”, если суммы совпадают, и “Обычный”, если суммы различны.

На вход программе подаётся строка из шести цифр.

Выводить нужно только слово “Счастливый” или “Обычный”, с большой буквы.

вот, что я написал:

biletik=input()
biletik=int(biletik)
if sum(biletik[:3])== sum(biletik[-3:]):
    print("Счастливый")
else:
    print("Обычный")

Выдает ошибку: TypeError: ‘int’ object is not subscriptable

я понимаю, что что-то не так со строками, но не могу разобраться
Originator
Насколько я понимаю, оператор sum сам по себе не может со среза изымать члены и суммировать их. Но самое главное, числа это не изменяемый тип, срезать их невозможно, нельзя получить срез числа.
old_monty
biletik = input("Введите номер билета из 6 цифр: ")
numbers = list(biletik)
numbers = [int(i) for i in numbers]
if (sum(numbers[:3]) == sum(numbers[3:])):
    print("Счастливый")
else:
    print("Обычный")
YVeselovskyi
old_monty
а как же можно сделать эту задачу без ‘for’ ?)
botinag
YVeselovskyi
без ‘for’
biletik = input("Введите номер билета из 6 цифр: ")
numbers = map(int, biletik)
if (sum(numbers[:3]) == sum(numbers[3:])):
    print("Счастливый")
else:
    print("Обычный")
old_monty

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
>>>

(Python v 3.4.3)
old_monty
YVeselovskyi
а как же можно сделать эту задачу без ‘for’ ?
Чем ‘for’ плох, почему не устраивает? Без итерации здесь все равно не обойтись. ‘for’ обязательно будет использоваться, явно или неявно.
py.user.next
>>> 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
>>>
JOHN_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'
Срез возможно осуществить с любого объекта, предоставляющего метод __getitem__():
>>> 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 в общем учиться вам еще надо, рано советы давать.
py.user.next
Ещё добавлю
Originator
числа это не изменяемый тип, срезать их невозможно, нельзя получить срез числа
>>> n = 123456
>>> divmod(n, 1000)
(123, 456)
>>> divmod(n, 100)
(1234, 56)
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB