For循环返回结果直到结束(python)

For循环返回结果直到结束(python),python,list,range,slice,python-3.5,Python,List,Range,Slice,Python 3.5,我试图找到大数字731671765313306249192251196474426574742355349194934中13个连续数字的最大乘积 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 668966489504452445231617

我试图找到大数字731671765313306249192251196474426574742355349194934中13个连续数字的最大乘积 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

感谢您的帮助,因为我花了很长时间研究这个问题。

首先,正如前面指出的,您需要将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)

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

首先,正如前面指出的,您需要将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)

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

这里有几个问题

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

你这里有几个问题

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

您可以在循环的每次迭代中重置
n
m
的值。在循环的
之前定义它们。您可以说mylist=[num[n:m]],但您应该让mylist=num[n:m]。num也是一个字符串,因此必须使用int(x)而不仅仅是x。否则,您的产品*=“9”您的预期输出是多少?目前,您只需打印结果,所有内容都会被丢弃。是否需要数字序列和生成的产品?在循环的每次迭代中重置
n
m
的值。在
循环的
之前定义它们。您可以说mylist=[num[n:m]],但您应该让mylist=num[n:m]。num也是一个字符串,因此必须使用int(x)而不仅仅是x。否则,您的产品*=“9”您的预期输出是多少?目前,您只需打印结果,所有内容都会被丢弃。您想要数字序列和生成的产品吗?是否有更快的方法,包括不打印包含零的数字,例如
如果i==0:继续
如果其中一个数字(第二个for循环中的x)为0,是的,您想跳过它。但是使用
break
,而不是
continue
,来停止对该组数字的迭代不会将其从整个循环中打断,我尝试过,它只会给我0如果数字中有一个零,那么运行循环的其余部分是没有意义的,因为产品是0有没有更快的方法,涉及不打印中有零的数字,例如
如果i==0:continue
如果其中一个数字(第二个for循环中的x)为0,则您希望跳过它。但是使用
break
,而不是
continue
,来停止对该组数字的迭代。如果没有将其从整个循环中打断,我尝试了,它只会给我0如果数字中有一个零,那么运行循环的其余部分是没有意义的,因为乘积是0