|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目标:选择出list中可以整除各位数的元素,比如24可整除2和4,15可整除1和5.
n = [76,89,46,15,24]
num = []
for i in n:
temp = i
while temp>0:
(temp,r) = divmod(temp,10)
num.append(r)
for j in num:
if i%j !=0:
n.remove(i)
print (n)
运行程序后报错
请问该如何修改,才能实现目标?
楼主这种写法:
1. num应该在每个循环的开始位置置空,否则越变越多
2. 3楼说的break
3. 1楼的警示,此例中列表会在循环里发生变化,那就不能让它作为循环对象
上面第3条中,程序只会检查76,46和24。76被删除后,它占据的0位置被89代替,而循环下一个该执行的是1位置,因此89跳过,测试46,同理15跳过。因此楼主的程序最终会剩下89,15,24。
解决方法:做一个和n一样的n2,让n2去循环,最终代码如下
- n = [76,89,46,15,24]
- **n2 = []**
- **for i in n:**
- **n2.append(i)**
- for i in n2:
- **num = []**
- temp = i
- while temp>0:
- (temp,r) = divmod(temp,10)
- num.append(r)
- for j in num:
- if i % j !=0:
- n.remove(i)
- **break**
- print (n)
复制代码
还是推荐4楼的代码 
|
|