TypeError: объект 'int' не подлежит расшифровке
Я пытаюсь создать простую программу, которая сообщает вам ваше счастливое число в соответствии с нумерологией. Я продолжаю получать эту ошибку:
File "number.py", line 12, in <module>
sumln = (int(sumall[0])+int(sumall[1]))
TypeError: 'int' object is not subscriptable
Мой script:
birthday = raw_input("When is your birthday(mm/dd/yyyy)? ")
summ = (int(birthday[0])+int(birthday[1]))
sumd = (int(birthday[3])+int(birthday[4]))
sumy= (int(birthday[6])+int(birthday[7])+int(birthday[8])+int(birthday[9]))
sumall = summ + sumd + sumy
print "The sum of your numbers is", sumall
sumln = (int(sumall[0])+int(sumall[1]))
print "Your lucky number is", sumln`
Ответы
Ответ 1
Если вы хотите суммировать цифру числа, один из способов сделать это: sum()
+ выражение генератора:
sum(int(i) for i in str(155))
Я немного изменил ваш код с помощью sum()
, возможно, вы хотите взглянуть на него:
birthday = raw_input("When is your birthday(mm/dd/yyyy)? ")
summ = sum(int(i) for i in birthday[0:2])
sumd = sum(int(i) for i in birthday[3:5])
sumy = sum(int(i) for i in birthday[6:10])
sumall = summ + sumd + sumy
print "The sum of your numbers is", sumall
sumln = sum(int(c) for c in str(sumall)))
print "Your lucky number is", sumln
Ответ 2
Ошибка - именно то, о чем она говорит; вы пытаетесь взять sumall[0]
когда sumall
является int, и это не имеет никакого смысла. Как вы думаете, что должен быть sumall
?
Ответ 3
sumall = summ + sumd + sumy
Ваш sumall
- целое число. Если вам нужны отдельные символы, сначала преобразуйте его в строку.
Ответ 4
Чтобы быть ясными, все ответы до сих пор верны, но аргументация позади них не очень хорошо объясняется.
Переменная sumall
еще не является строкой. Parentheticals не будет преобразовываться в строку (например, summ = (int(birthday[0])+int(birthday[1]))
все равно возвращает целое число. Похоже, вы, скорее всего, намеревались набрать str((int(sumall[0])+int(sumall[1])))
, но забыли. Причина, по которой функция str()
исправляет все, состоит в том, что она преобразует что-либо в нее совместим со строкой.
Ответ 5
Вы не можете сделать что-то подобное: (int(sumall[0])+int(sumall[1]))
Это потому, что sumall
является int
, а не списком или dict.
Итак, summ + sumd
будет вам повезло номер
Ответ 6
Попробуйте это вместо:
sumall = summ + sumd + sumy
print "The sum of your numbers is", sumall
sumall = str(sumall) # add this line
sumln = (int(sumall[0])+int(sumall[1]))
print "Your lucky number is", sumln
sumall
- это число, и вы не можете получить доступ к его цифрам, используя нотацию подстроки (sumall[0]
, sumall[1]
). Для этого вам нужно будет преобразовать его в строку.