我一直在学习Python并与Project Euler一起玩,以修复我的一些数学技能。我遇到了Problem 35的问题。我已经生成了100万以下的所有Primes,消除了包含任何偶数的那些,现在我只是尝试用剩余的~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]]
任何可能出错的线索?
答案 0 :(得分:8)
每当有人拥有其他人(我自己包含)无法重现奇怪行为的代码时,我立即想到:空白错误。并查看您的代码:
' 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
确认,如果是,请切换到使用四空缩进(我指的是由四个空格组成的“制表符”,而不是\t
。)
答案 1 :(得分:1)
上一个答案中提到的空白错误解决了直接问题 - 在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]]