Python:“For”循环只运行一次,Project Eu

2024-04-28 11:30:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在学习Python,并与Project Euler一起玩,以修复我的一些数学技能。我和Problem 35遇到了问题。我已经生成了100万以下的所有素数,去掉了那些包含偶数的素数,现在只想对剩下的~3k个素数进行最后一次检查。

此函数应:

  1. 列出~3k个素数。
  2. 返回一个新列表,该列表由原始列表中每个项目的所有轮换列表组成。

以下是我对每一行的理解:

def rotations(lst):
    newlist = []
    for i in lst:                                              # Take each int item in list. 
        s = [int(j) for j in str(i)]                           # Turn each item into a list of digit strings
        num = ([s[k:]+s[:-len(s)+k] for k in range(len(s))])   # Generate list of rotations of strings 
        tmplst = [] 
        for l in num:                                          # For each string rotation
            tmplst.append(int(''.join(map(str,l))))            # Turn it into an integer, add that int to tmplst
        newlist.append(tmplst)                                 # Add each tmplist to 'newlist'
    return newlist

仅输入rotations([123,456])会产生:

[[123, 231, 312]]

当我期待的时候

[[123, 231, 312],[456,564,645]]

有什么可能出错的线索吗?


Tags: ofin列表foritem素数turnlist
2条回答

前面的答案中提到的空白错误解释了眼前的问题——在第一次传递for i in lst:结束时返回结果,而不是在循环完成后返回结果——但是简化代码也有意义,这样代码就更少了,错误也更容易被发现。下面是一个例子(为了区别,函数从rotations重命名为rotor)。

def rotor(lst):
    out = []
    for i in lst:
        s = str(i)
        out.append([int(s[k:]+s[:k]) for k in range(len(s))])
    return out

鉴于上述情况,rotor([456, 1789, 25887])返回

[[456, 564, 645],
 [1789, 7891, 8917, 9178],
 [25887, 58872, 88725, 87258, 72588]]

每当有人拥有别人(包括我自己)无法再现的奇怪行为的代码时,我立刻想到:空白错误。看看你的代码:

'    def rotations(lst):'
'            newlist = []'
'            for i in lst:                                              # Take each int item in list. '
'            \t    s = [int(j) for j in str(i)]                           # Turn each item into a list of digit strings'
'            \t    num = ([s[k:]+s[:-len(s)+k] for k in range(len(s))])   # Generate list of rotations of strings '
'            \t    tmplst = [] '
'            \t    for l in num:                                          # For each string rotation'
"                \t        tmplst.append(int(''.join(map(str,l))))            # Turn it into an integer, add that int to tmplst"
"                \t    newlist.append(tmplst)                                 # Add each tmplist to 'newlist'"
'                    return newlist'
'        '

在我看来,你可能是混合标签和空间。这会导致非常神秘的行为,因为某些线条没有你想象的那么缩进。使用运行程序

python -tt your_program_name.py

要确认,如果是,请切换到使用四个空格缩进(我指的是由四个空格组成的“tabs”,而不是\t

相关问题 更多 >