Python:尝试将字符串转换为int,将错误转换为int。int()的无效文本以10为底:'';

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

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

以下是完整的回溯:

我已经尝试过的:

根据我从其他类似问题中收集的信息,问题可能是当我点击
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: