Python 无法连接';str';和';int';对象,但我可以通过自己的空闲运行它吗?

Python 无法连接';str';和';int';对象,但我可以通过自己的空闲运行它吗?,python,Python,我使用以下代码在Python 2.7.10上运行: import sys with open(sys.argv[1], 'r') as input: test_cases = input.read().strip().splitlines() for test in test_cases: orig_number = test iteration = 0 while True: if str(orig_number) == str(orig_n

我使用以下代码在Python 2.7.10上运行:

import sys

with open(sys.argv[1], 'r') as input:
    test_cases = input.read().strip().splitlines()

for test in test_cases:
    orig_number = test
    iteration = 0
    while True:
        if str(orig_number) == str(orig_number)[::-1]:
            print iteration, orig_number
            break
        iteration += 1
        orig_number = orig_number + int(str(orig_number)[::-1])
它将顺利运行,但在Python2.7.3的CodeEval上运行时,它会不断返回

cannot concatenate 'str' and 'int' objects

在最后一行,但我不明白为什么它会返回,因为这两个部分似乎都是int。

您正在循环包含字符串的
测试用例
,因此首先您不需要使用
str
将其转换为字符串,您需要将其转换为
int
,作为代码的结尾

此外,您也可以简单地作为一种更具python风格的方式,在文件对象上循环,而不是读取和剥离,然后使用
splitline

import sys

with open(sys.argv[1], 'r') as input:
     for test in input:
            orig_number = test.strip()
            iteration = 0
            while True:
                if orig_number == orig_number[::-1]:
                    print iteration, orig_number
                    break
                iteration += 1
                orig_number = int(orig_number) + int(orig_number[::-1])
还请注意,由于将
字符串
转换为
int
可能会引发异常,因此可以使用
try except
语句处理此类问题

try:
    orig_number = int(orig_number) + int(orig_number[::-1])
except ValueError:
    # raise exception or do stuff 

我不确定这在哪里起作用,但很明显,
orig_number
不是
int
。当您从文件中读取内容,然后对其执行
strip()
/
splitlines()
操作时,您会得到一个字符串列表

因此,在
for
循环中,
test
是一个字符串,因此
orig\u number
也是一个字符串

您不需要显式地将它们转换为
str
,您应该在尝试添加之前将
orig\u编号
转换为
int
,然后将它们转换回
str
以保存在
orig\u编号
中。例如:

import sys

with open(sys.argv[1], 'r') as input:
    test_cases = input.read().strip().splitlines()

for orig_number in test_cases:
    iteration = 0
    while True:
        if orig_number == orig_number[::-1]:
            print iteration, orig_number
            break
        iteration += 1
        orig_number = str(int(orig_number) + int(orig_number[::-1]))

因为没有提供任何示例输入,所以很难知道您要做什么,但是
orig_number
是一个字符串。请注意,因为它是一个字符串
str(orig\u number)
只返回
orig\u number
。很抱歉,这是一个多行,每行放一个数字,这必须颠倒,然后加上它自己,直到数字是一个回文。这在第8行返回了一个新的错误,检查数字,它颠倒说int没有属性getitem,但否则我从来没有想过单独做剥离。我肯定会开始实现简单的答案,它完美地满足了我的需要。我一直在假设,如果输入是一个数字,它已经是一个整数了,不管我如何改变它,我需要远离它。