Python嵌套for循环如何实现C式逻辑?代码输出异常求助
解决Python嵌套for循环的问题
哦,我一眼就看到问题所在啦!你的嵌套循环范围写错了——Python里的range()函数是左闭右开的,也就是说range(x)只会生成从0到x-1的整数,而你需要的是包含输入值本身的所有不超过对应输入的整数,这才是问题的核心!
举个例子,当你输入x=1时,range(1)只会返回0这一个值,所以a永远只能取0;同理b和c也只能取0,自然程序只能输出[(0,0,0)]这一个组合,完全达不到你的需求。
修正后的代码
我们只需要把每个range()的参数改成输入值+1,让循环范围包含输入值本身,同时如果需要输出列表而非元组的话,把append里的括号改成方括号即可:
x = int(input()) y = int(input()) z = int(input()) n = int(input()) num_list = [] for a in range(x + 1): for b in range(y + 1): for c in range(z + 1): if a + b + c != n: num_list.append([a, b, c]) print(num_list)
测试你给出的输入1, 1, 1, 2,这个代码会输出你期望的结果:
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
更简洁的Pythonic写法
如果你想让代码更简洁,可以用列表推导式来实现,逻辑是完全一样的:
# 一次性读取四个输入 x, y, z, n = [int(input()) for _ in range(4)] # 用列表推导式生成符合条件的组合 num_list = [[a, b, c] for a in range(x+1) for b in range(y+1) for c in range(z+1) if a+b+c != n] print(num_list)
内容的提问来源于stack exchange,提问作者Shahbaaz Sheikh




