python - 遍历数字并评估数字是否可以被某些数字整除
问题描述
我编写了一个程序来评估某个范围内的哪些数字只能被某些数字整除(在 到 的范围内1
)9
。到目前为止,代码似乎有效,但我在 pythontutor http://www.pythontutor.com/visualize.html#mode=edit测试了它所采取的步骤,并且发生了一些奇怪的事情。
在第二个循环中,代码并不总是检查所有值(k)
的可分性,但有时会忽略最后一个值(k)
。最好给你一个例子:
Liste = []
for i in range (1500, 1700):
if i%5 == 0 and i%7 == 0:
Liste.append(i)
print (Liste)
Teiler = [2, 3, 4, 6, 8, 9]
for k in Liste:
z = 0
for w in range (len(Teiler)):
if k%Teiler[z] == 0:
Liste.remove(k)
z += 1
break
else:
z += 1
print (Liste)
这里的输出如下:
[1505, 1540, 1575, 1610, 1645, 1680]
[1505, 1575, 1645]
并且它应该是它的输出,如第二个列表中只有可被5
and整除的数字7
。同样在 pythontutor 上,第二个 for 循环遍历所有值(k)
。
但是当我像下面这样更改数字范围时(第 2 行,将范围从 更改1700
为1800
):
Liste = []
for i in range (1500, 1800):
if i%5 == 0 and i%7 == 0:
Liste.append(i)
print (Liste)
Teiler = [2, 3, 4, 6, 8, 9]
for k in Liste:
z = 0
for w in range (len(Teiler)):
if k%Teiler[z] == 0:
Liste.remove(k)
z += 1
break
else:
z += 1
print (Liste)
输出如下:
[1505, 1540, 1575, 1610, 1645, 1680, 1715, 1750, 1785]
[1505, 1575, 1645, 1715, 1785]
如果我在 pythontutor 上运行此代码,则代码将停在k = 1750
并且不检查k = 1785
.
为什么会这样?是不是对pythontutor的检查有问题?还是我的代码有问题?
我想了解为什么 Python 正在做它所做的事情。
非常感谢您的帮助。如果这是一个菜鸟问题,或者我错过了一些明显的东西,我很抱歉。
解决方案
您的问题出在这一行:
Liste.remove(k)
因为您要从用于 for 循环的同一列表中删除元素,所以当您删除一个元素时,列表会更短,但下一次迭代您将跳转一个元素。
我建议使用两个列表或使用 while 循环,当您从列表中删除元素时,您不会进行下一次迭代,而是减少 1 列表的 len;例子:
Liste = []
for i in range (1500, 1800):
if i%5 == 0 and i%7 == 0:
Liste.append(i)
print (Liste)
Teiler = [2, 3, 4, 6, 8, 9]
l=len(Liste)
i=0
while i<l:
k=Liste[i]
z = 0
for w in range (len(Teiler)):
if k%Teiler[z] == 0:
Liste.remove(k)
l-=1
i-=1
z += 1
break
else:
z += 1
i+=1
此代码可以改进,但用于让您了解如何做到这一点
推荐阅读
- java - 如何在 spark/DataFrame 上过滤不可为空的行
- html - Excel VBA - HTML 值为零时出现错误 91 问题
- tags - Amazon PA API5 - 附属公司的新产品链接结构?
- flutter - Flutter 放 AnimatedIcon 而不是 AppBar 前导图标
- c# - 为我的应用程序运行 Wix 安装程序后,即使在删除文件夹后也无法创建/写入文件/文件夹
- outlook - 从 Outlook 365 日历中完全删除某些内容
- linux - 如何在 linux 中显示来自 mlocate 的最新更新?
- sql - 无法对嵌套查询的结果添加 WHERE 约束 - postgres 中的错误 42883
- android - 如何将活动范围对象注入应用程序范围对象?
- javascript - 使用 JSON 文件作为数据库