Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 28, 2015 19:47:44

YVeselovskyi
Зарегистрирован: 2015-09-24
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять

Паша очень любит кататься на общественном транспорте, а получая билет, сразу проверяет, счастливый ли ему попался. Билет считается счастливым, если сумма первых трех цифр совпадает с суммой последних трех цифр номера билета.

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

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

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

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

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

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

я понимаю, что что-то не так со строками, но не могу разобраться

Офлайн

#2 Сен. 28, 2015 20:24:28

Originator
От: Харьков, Украина
Зарегистрирован: 2015-08-01
Сообщения: 29
Репутация: +  1  -
Профиль   Отправить e-mail  

Не могу понять

Насколько я понимаю, оператор sum сам по себе не может со среза изымать члены и суммировать их. Но самое главное, числа это не изменяемый тип, срезать их невозможно, нельзя получить срез числа.

Отредактировано Originator (Сен. 28, 2015 23:26:39)

Офлайн

#3 Сен. 28, 2015 20:26:57

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Не могу понять

biletik = input("Введите номер билета из 6 цифр: ")
numbers = list(biletik)
numbers = [int(i) for i in numbers]
if (sum(numbers[:3]) == sum(numbers[3:])):
    print("Счастливый")
else:
    print("Обычный")

Офлайн

#4 Сен. 28, 2015 22:04:32

YVeselovskyi
Зарегистрирован: 2015-09-24
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять

old_monty
а как же можно сделать эту задачу без ‘for’ ?)

Офлайн

#5 Сен. 28, 2015 22:09:51

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Не могу понять

YVeselovskyi
без ‘for’
biletik = input("Введите номер билета из 6 цифр: ")
numbers = map(int, biletik)
if (sum(numbers[:3]) == sum(numbers[3:])):
    print("Счастливый")
else:
    print("Обычный")

Офлайн

#6 Сен. 28, 2015 22:32:00

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Не могу понять


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)

Офлайн

#7 Сен. 28, 2015 22:44:41

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Не могу понять

YVeselovskyi
а как же можно сделать эту задачу без ‘for’ ?
Чем ‘for’ плох, почему не устраивает? Без итерации здесь все равно не обойтись. ‘for’ обязательно будет использоваться, явно или неявно.

Отредактировано old_monty (Сен. 28, 2015 23:09:36)

Офлайн

#8 Сен. 29, 2015 02:49:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9962
Репутация: +  856  -
Профиль   Отправить e-mail  

Не могу понять

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

Офлайн

#9 Сен. 29, 2015 05:01:14

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Не могу понять

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 в общем учиться вам еще надо, рано советы давать.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#10 Сен. 29, 2015 05:18:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9962
Репутация: +  856  -
Профиль   Отправить e-mail  

Не могу понять

Ещё добавлю

Originator
числа это не изменяемый тип, срезать их невозможно, нельзя получить срез числа
>>> n = 123456
>>> divmod(n, 1000)
(123, 456)
>>> divmod(n, 100)
(1234, 56)
>>>



Отредактировано py.user.next (Сен. 29, 2015 05:19:49)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version