循环遍历非常大的连续字符串时的ValueError(Project Euler prob 8)

时间:2016-08-01 10:58:10

标签: python-3.x for-loop

我是编程/ Python的新手,所以我的代码可能不是最有效的。这特别涉及项目欧拉的问题8。它写着:

查找具有最大产品的1000位数字中的13个相邻数字。这个产品的价值是什么?

我已经找到了以下代码的答案,但代码根据我如何定义1000位数字(称为a)给出了问题。 当a写在一行上时,它可以正常工作,但是当我在多行上用三引号实现它(由一个输入分隔)时,它会在第二个ValueError循环中给出for s当到达一条线的末端时a

有人可以向我解释为什么会发生这种情况以及如何解决这个问题?提前谢谢!

更确切地说,我得到的错误是:

ValueError: invalid literal for int() with base 10: '\n'

见下面的代码:

 a = """7316717653... etc"""

    product = 1
    save = 0
    list1 = []
    list2 = []

    for ab in range(0, len(a)-13):
        start = ab
        stop = ab+13
        check = a[start:stop]
        list1.append(check)

    for a in list1:
        for b in a:
            product = product*int(b)
        list2.append(product)
        if product > save:
            save = product
            print('This is currently the largest product: ', product)
            product = 1
        else:
            product = 1

    print(max(list2))

1 个答案:

答案 0 :(得分:0)

您最终会在list1中以换行符(行分隔符,写为&#39; \ n&#39;)结束,如果您将变量编写为多行文本字符串,这是正常的。< / p>

您可以尝试使用标准Python连接将a定义为没有任何换行符的文本:

a = ( "123456789" "123456789" "123456789" )

这不会创建元组(它们需要一个尾随的逗号),a实际上是字符串123456789123456789123456789,没有任何分隔的换行符,int(b)将停止抱怨。