我一直在学习Python,并与Project Euler一起玩,以修复我的一些数学技能。我和Problem 35遇到了问题。我已经生成了100万以下的所有素数,去掉了那些包含偶数的素数,现在只想对剩下的~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]]
有什么可能出错的线索吗?
前面的答案中提到的空白错误解释了眼前的问题——在第一次传递
for i in lst:
结束时返回结果,而不是在循环完成后返回结果——但是简化代码也有意义,这样代码就更少了,错误也更容易被发现。下面是一个例子(为了区别,函数从rotations
重命名为rotor
)。鉴于上述情况,
rotor([456, 1789, 25887])
返回每当有人拥有别人(包括我自己)无法再现的奇怪行为的代码时,我立刻想到:空白错误。看看你的代码:
在我看来,你可能是混合标签和空间。这会导致非常神秘的行为,因为某些线条没有你想象的那么缩进。使用运行程序
要确认,如果是,请切换到使用四个空格缩进(我指的是由四个空格组成的“tabs”,而不是
\t
)相关问题 更多 >
编程相关推荐