int()错误/当为大数字循环时无效的文字

时间:2014-03-09 04:13:10

标签: python string while-loop

在尝试解决数学问题的同时,继续消除我对Python基础知识的误解。已经有工作解决方案,这些漂浮在那里,我只是想看看我在哪里出错了。我们需要在给定的1000+位数中找到五个连续整数的最大乘积。它会在product =行停留,并显示invalid literal for int() with base 10: ''错误。我尝试在循环之外打印product并将所有内容都加倍。所以,我的while循环必定有问题。

number = """73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450"""

highest = None 

n = 0  
while n < 1000:
    product = (int(number[n]) * int(number[n + 1]) * int(number[n + 2]) 
             * int(number[n + 3]) * int(number[n + 4]))
    if highest is None or product > highest:
        highest = product
    n = n + 1

print highest

2 个答案:

答案 0 :(得分:2)

您的number字符串中包含换行符\n

>>> number
'73167176531330624919225119674426574742355349194934\n96983520312774506326239578318016984801869478851843\n85861560789112949495459501737958331952853208805511\n12540698747158523863050715693290963295227443043557\n66896648950445244523161731856403098711121722383113\n62229893423380308135336276614282806444486645238749\n30358907296290491560440772390713810515859307960866\n70172427121883998797908792274921901699720888093776\n65727333001053367881220235421809751254540594752243\n52584907711670556013604839586446706324415722155397\n53697817977846174064955149290862569321978468622482\n83972241375657056057490261407972968652414535100474\n82166370484403199890008895243450658541227588666881\n16427171479924442928230863465674813919123162824586\n17866458359124566529476545682848912883142607690042\n24219022671055626321111109370544217506941658960408\n07198403850962455444362981230987879927244284909188\n84580156166097919133875499200524063689912560717606\n05886116467109405077541002256983155200055935729725\n71636269561882670428252483600823257530420752963450'

您可以修复:

number = ''.join(number.splitlines())

number = number.replace("\n", "")

这很好用:

int(number)

如果要在不按摩数据的情况下设置数据,可以使用隐式连接:

number = ('73167176531330624919225119674426574742355349194934'
          '96983520312774506326239578318016984801869478851843'
          '85861560789112949495459501737958331952853208805511'
          #...
          )

请注意括号,并且没有逗号,因此Python将这些行读取为连续的。请不要逃避终结点。

答案 1 :(得分:0)

number中你有新行字符会发生什么。要解决此问题,您可以使用:

number = ''.join(number.split("\n"))

此外,由于您正在访问number[n + 4],因此number的长度为1000。你必须循环:

while n < 1000-4:
    ...

修改

正如@Blckknght和@isedev评论的那样,更明确的方式是:

number = number.replace('\n', '')