Python:for循环只运行一次,Project Euler
问题描述
我一直在学习Python和玩Project Euler,以重新调整我的一些数学技能。我遇到了Problem 35的问题。我已经生成了100万以下的所有素数,剔除了包含任何偶数的素数,现在只是尝试用剩余的~3k素数运行最后一次检查。
此函数应为:
- 列出~3k个素数。
- 返回由原始列表中每个项目的所有旋转列表组成的新列表。
以下是我对每一行的理解:
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]]
有什么可能出错的线索吗?
解决方案
每当有人有一个代码,而其他人(包括我自己)无法重现其奇怪行为时,我立刻就会想到:空格错误。查看您的代码:
' 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'
' '
在我看来,您可能将制表符和空格混为一谈。这可能会导致非常神秘的行为,因为某些行没有您想象的那么多缩进。使用
运行您的程序python -tt your_program_name.py
若要确认,请切换到使用四个空格的缩进(我指的是由四个空格组成的"制表符",而不是
。)
相关文章