我是一个初学者程序员,我决定写一个简单的程序,从一个数中提取素数因子,然后打印出来,但打印出来的结果却有困难。代码如下:
n = int(raw_input("Number?: "))
m = n
k = 2
czynniki = []
while(m != 1):
if m%k == 0:
czynniki.append(k)
print m, "\t", '|', k
m = m/k
else:
k+=1
print m
print n, ' = ',
for czynnik in czynniki:
if czynniki.count(czynnik)>1:
print czynnik, '^', czynniki.count(czynnik), ' *',
czynniki = filter(lambda x: x!=czynnik, czynniki)
else:
print czynnik, ' *',
一切都很好,直到最后。例如,当输入1025时,我希望它打印“1025=5^2*41”,但是它会打印“1025=5^2*5*41”,就好像过滤器函数没有任何影响一样。虫子在哪里?你知道吗
问题是您在迭代列表时正在修改它。请尝试以下操作:
在这里,您将遍历一个单独的列表,其中只包含列表中唯一的项
czynniki
。这是通过将列表强制转换为一个集合(唯一项的未排序列表)然后返回到排序列表来实现的。你知道吗如果您想在最后消除剩余的
*
,您可以尝试以下方法:在存储在
czynniki
中的列表上启动for
循环,之后更改czynniki
引用的内容(一个全新的列表)不会更改for
循环所覆盖的列表。更改循环正在运行的实际列表也不安全,因此无论如何都不能这样做。你知道吗您可能想重写循环,就像这样,只需跳过重复的值,而不是试图在运行时更改循环
如果要跳过循环中的某个项,而不是筛选要遍历的集合,则应该使用continue关键字。你知道吗
相关问题 更多 >
编程相关推荐