繁体   English   中英

列表理解中的双重 for 循环

[英]Double for loop in list comprehension

我对这段代码有疑问:

num = 111
num_list = list(map(int, str(num)))
i=len(num_list)
t=2**(i-1)
answer = sum([x*(l**2) for x in reversed(num_list) for l in range(len(num_list))])
if answer % 5 == 0:
  print(answer, "is divisible by 5")
else:
  print(answer, "is not divisible by five")

是的,如果你测试它确实有效,但它给了我:

15 is divisible by 5

代替:

7 is not divisible by 5

所以基本上我的代码所做的是它需要一个二进制数并变成十进制并测试小数是否可以被 5 整除。不要问我怎么做,但我知道我的列表理解和我的双循环有一些问题. 请帮忙,谢谢!

您将二进制转换为十进制的逻辑有点不对劲。 尝试这个:

answer = sum([x*(2**l) for l, x in enumerate(reversed(num_list))])
>>> answer
7

你也可以这样做:

num = 111
num_list = list(map(int, str(num)))
i=len(num_list)
t=2**(i-1)
answer = 0
for l in num_list:
  answer += l*t
  t=int(t/2)
if answer % 5 == 0:
  print(answer, "is divisible by 5")
else:
  print(answer, "is not divisible by five")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM