我正在研究Euler问题8,所以请避免回答得太远。
代码中的问题是什么,当我添加int转换时,输出更改,某些组不再是13位数字。这种情况在整个过程中会发生多次,但很容易发现,排在倒数第五。
def large_product(n):
string_n = str(n)
n = [int(str_n[i:i+13]) for i in range(0, len(str_n), 13)]
print(n)
当我添加导致输出更改的int转换并且某些组不再是13位数字时,会发生什么情况?整个过程会多次发生,但是下面第一个很容易发现:
5593572972, 5716362695618, 8267042825248, 3600823257530, 420752963450
如果我删除了int并返回了一个字符串列表,它们的长度都是正确的13位数字,但是我无法转换回int,并且将不断被“无效的int()的立即数作为基数10命中” “消息。
n = [(str_n[i:i+13]) for i in range(0, len(str_n), 13)]
str_n = str(n)
int_n = int(str_n)
print(int_n)
返回:
ValueError: invalid literal for int() with base 10: "['7316717653133', '0624919225119', '6744265747423', '5534919493496', '9835203127745', '0632623957831', '8016984801869', '4788518438586', '1560789112949', '4954595017379', '5833195285320', '8805511125
如何将这些数字组放在相乘的位置然后进行比较?预先感谢。
答案 0 :(得分:4)
问题似乎出在前缀为0的数字上。当您将字符串转换为前缀为0的整数时,int转换将忽略零,并输出整数。
为清楚起见,尝试
print(int('0084646'))
下面的块中的错误是您试图将列表转换为int。
n = [(str_n[i:i+13]) for i in range(0, len(str_n), 13)] # a list is getting generated
str_n = str(n) # "['7316717653133', '0624919225119', '6744265747423', '5534919493496', '9835203127745', '0632623957831', '8016984801869'..] -- '[' and ',' are special characters here
int_n = int(str_n) #converting list to int which will fail actually as special characters are there in string
print(int_n)
由于我不确定您打算做什么,因此我不确定int()转换是否会帮助您。
我建议您使用pandas
或numpy
而不是核心python。