Python:尝试将字符串转换为int,将错误转换为int。int()的无效文本以10为底:'';
我是Python新手,如果这是一个简单的修复,我很抱歉。我已经被一个代码问题(快乐数字)困扰了很长一段时间,我不确定到底出了什么问题 问题描述: 从任何正整数开始,将数字替换为其数字的平方和,然后重复此过程,直到数字等于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…) 我的测试输入和预期结果: 1-->1 7-->1 22-->0 如果数字是快乐数字,请打印1。如果没有,请打印0 以下是完整的回溯: 我已经尝试过的: 根据我从其他类似问题中收集的信息,问题可能是当我点击Python:尝试将字符串转换为int,将错误转换为int。int()的无效文本以10为底:'';,python,string,recursion,error-handling,int,Python,String,Recursion,Error Handling,Int,我是Python新手,如果这是一个简单的修复,我很抱歉。我已经被一个代码问题(快乐数字)困扰了很长一段时间,我不确定到底出了什么问题 问题描述: 从任何正整数开始,将数字替换为其数字的平方和,然后重复此过程,直到数字等于1,或者在不包含1的循环中无限循环。此过程以1结尾的数字是快乐的,而不以1结尾的数字是不快乐的 例如: 7是一个快乐的数字(7->49->97->130->10->1) 22不是一个快乐的数字(22->8->64->52->29->85->89->145->42->20->4->
I=int(I)
行时,我无法将str
转换为int
。我的理解是,在对str
类型进行任何计算之前,我必须将其转换为int
类型,但这似乎是它失败的地方
我单独测试了happy\u或\u not
函数,它确实输出了我期望的值。在我看来,当我尝试调用happy\u或\u not
函数中的happy\u number\u check
函数时,问题就出现了,该函数正在读取我的txt文件(包含要测试的数字列表)。我不能在这里掌握更大的原则,所以任何解释都会有帮助
这也是我第一次真正尝试递归函数,可能有更好的方法来构造它,所以任何关于如何改进以提高效率的建议都是非常受欢迎的
提前谢谢你 尝试更改如下内容(验证每行是否为整数):
strip()
也将使其生效,以便您可以删除此代码:
if i == " ":
continue
else:
顺便说一下,您的逻辑中也有一个bug。您依赖运行时错误(非常有趣的是,堆栈溢出:-)来终止测试。您应该真正跟踪已尝试的数字,如果再次尝试相同的数字,则返回0
如果您不想要问题的直接解决方案,请不要单击此链接,但如果您想要,这里有一个迭代解决方案:您试图将空字符串转换为int,因此它失败了。尝试调试并找出获取空字符串的原因。如错误所示,您正在发送
int()
空字符串。不要发送一个空字符串。你说i=int(i)
,然后检查i==”
,这是不可能发生的;整数不能是带单个空格的字符串。您也可以说number=str(number)
,然后检查number==1
,这同样是不可能发生的。Protip:当您需要新变量时,请使用新名称。示例:使用str\u number=str(number)
代替number=str(number)
。Python解释器接受两者,但是你可怜的碳基大脑在第二种情况下比第一种情况下工作得更好。谢谢!我让它正常工作了。现在,重构出您提到的其他逻辑错误的有趣部分:
# 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")
def happy_number_check(file):
with open(file, 'r+') as f: # Safer way to open a file. Will automatically close for you even if something goes wrong
for line in f:
if line.strip().isdigit():
happy_or_not(line.strip())
if i == " ":
continue
else: