列表理解中的双循环

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")