Я новичок в Python, поэтому прошу прощения, если это простое исправление. Я довольно долго задерживался на проблеме Codeval (Happy Numbers), и я не уверен, что происходит не так.Python: попытка конвертировать строку в int, получить ошибку для int invalid literal для int() с базой 10: ''
Описание проблемы:
Начиная с любым положительным целым числом, заменить число на сумме квадратов его цифр, и повторите процесс, пока число не станет равными 1, или петлей бесконечно в цикле, который не включает 1.Чтобы числа, для которых этот процесс заканчивается на 1, счастливы, а те, которые не заканчиваются на 1, недовольны.
Например:
7 является счастливым числом (7-> 49-> 97-> 130-> 10-> 1)
22 не счастливый номер (22-> 8-> 64-> 52-> 29-> 85-> 89-> 145-> 42-> 20-> 4-> 16-> 37-> 58-> 89 ...)
My испытательный ввод и ожидаемые результаты:
1 -> 1
7 -> 1
22 -> 0
Если число является счастливым числом, распечатайте 1. Если нет, распечатать 0.
Вот полный Traceback:
Traceback (most recent call last):
File "/happy_number.py", line 58, in <module>
happy_number_check("happy_numbers.txt")
File "/happy_number.py", line 55, in happy_number_check
happy_or_not(line)
File "/happy_number.py", line 33, in happy_or_not
i = int(i)
ValueError: invalid literal for int() with base 10: ''
Вот мой код:
# test = 7
def happy_or_not(number):
number = str(number)
if number == 1:
print 1
else:
new_num = 0
for i in number:
i = int(i)
if i == " ":
continue
else:
new_num += i**2
if new_num == 10 or new_num == 10:
print 1
else:
try:
happy_or_not(new_num)
except RuntimeError:
print 0
# happy_or_not(test)
def happy_number_check(file):
f = open(file, 'r+')
for line in f:
if line == "":
continue
else:
happy_or_not(line)
happy_number_check("happy_numbers.txt")
То, что я уже пробовал:
Основываясь на том, что я собрал из других подобных вопросов, то проблема может быть, что я не в состоянии преобразовать str
в int
, когда я попал в линию i = int(i)
. Я понимаю, что мне нужно преобразовать тип str
в тип int
, прежде чем выполнять какую-либо математику на нем, но похоже, что он не работает.
Я проверил функцию happy_or_not
сам по себе, и он распечатает значение, которое я ожидаю от него. Мне кажется, что проблема возникает, когда я пытаюсь вызвать функцию happy_or_not
внутри функции happy_number_check
, которая читает мой txt-файл (содержащий список номеров для проверки). Я не должен здесь разбираться в более широком принципе, поэтому любые объяснения были бы полезными.
Это также моя первая реальная попытка рекурсивной функции, и, вероятно, лучший способ ее структурирования, поэтому любые предложения о том, как изменить ситуацию, чтобы быть более эффективными, являются наиболее желанными.
Спасибо заранее!
Вы пытаетесь преобразовать пустую строку в int, поэтому она не работает. Попробуйте отладить и узнайте, почему вы получаете пустую строку. – Celeo
Как говорится в ошибке, вы отправляете 'int()' пустую строку. Не отправляйте пустую строку. – TigerhawkT3
Вы говорите «i = int (i)», а затем проверьте, не существует ли 'i ==" "'; целое число не может быть строкой с одним пробелом. –