【问题标题】:For loop returning result until end (python)For循环返回结果直到结束(python)
【发布时间】:2017-09-30 09:27:38
【问题描述】:

我试图找到大数的 13 个连续数字的最大乘积 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450。

但是,我的代码似乎在某处出错,987 次的输出如下: 0 731671765313 这是有问题的代码:

num = str('**insert the big number here**')
highest = 0
mylist=[]
for i in range(987):
    n = 0
    m = 12
    product = 1
    mylist=[num[n:m]]
    for x in mylist:
        product *= x
        print(n, product)
    n += 1
    m += 1

感谢任何帮助,因为我花了很长时间研究这个。

【问题讨论】:

  • 您在循环的每次迭代中重置 nm 的值。在for 循环之前定义它们。
  • 你说 mylist = [num[n:m]],但你应该只有 mylist = num[n:m]。而且 num 也是一个字符串,所以你必须使用 int(x) 而不仅仅是 x。否则你在做 product *= "9"
  • 您的预期输出是什么?目前你只是print 结果,一切都被扔掉了。你想要数字序列和生成的产品吗?

标签: python list range slice python-3.5


【解决方案1】:

首先,正如所指出的,您需要将 m 和 n 移到 for 循环之外,并增加它们,而不是每次运行循环时将它们重置为相同的值 - 重新检查相同的数字 987 次不会让你走得太远 ;)

但还要记住,对于切片,范围是从(包括)第一个索引到 但不包括最后一个索引。试试看:

string = '12345'
print(string[1:4])

--> 234

'5' 位于第四个索引处,但未打印。
如果你想要 n 后面的 13 位数字,m 实际上必须是 13,而不是 12。这样,将打印 0 到 12 的索引,即 13 位数字。

最后,除了打印值之外,您还可以添加一些代码来为您检查它,并且仅在结果高于其他值时才打印,就像这样

if product > highest:
    highest = product
    print('new largest product:', product)

祝欧拉计划的其余部分好运! :)

【讨论】:

  • 是否有更快的方法,包括不打印包含零的数字,例如if i == 0: continue
  • 如果其中一个数字(第二个 for 循环中的 x)为 0,是的,您想跳过它。但是使用break,而不是continue,停止遍历这组数字
  • 不会把它从整个循环中打破,我试过了,它只是给了我 0
  • 好吧,如果数字中有一个零,那么运行循环的其余部分是没有意义的,因为乘积是 0
【解决方案2】:

这里有几个问题。

num = str('**insert the big number here**')
highest = 0
# No need to declare mylist ahead of time
# Define n and m outside of loop:
n = 0
m = 13 # m should be 13
for i in range(987):
    product = 1
    mylist = num[n:m] # No extra [] here
    for x in mylist:
        product *= int(x) # x is string because num is string, so we must convert to int
    # Checking the product should be outside of the x loop:
    print(n, product)
    # Check if product is highest:
    if product > highest:
        highest = product
    n += 1
    m += 1

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多