在尝试解决数学问题的同时,继续消除我对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
答案 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', '')