课后作业不懂的地方
a = []b = 0
while b != "STOP":
b = input('输入一个正整数:')
if b != 'STOP':
c =int(b)
a.append(c)
target = int(input('请输入目标整数:'))
san = len(a)
for x in range(san):
for c in range(x+1,san):
if a + a == target:
print()
对比:
a = []
b = 0
while b != "STOP":
b = input('输入一个正整数:')
if b != 'STOP':
c =int(b)
a.append(c)
target = int(input('请输入目标整数:'))
san = len(a)
for x in range(san):
for c in range(x):
if a + a == target:
print()
for c in range(x+1,san):这里为啥是x+1到san
直接range(x)打印的结果是上面倒过来 本帖最后由 Twilight6 于 2022-9-7 21:33 编辑
因为要判断每个数都是否和后续的数和是否等于目标值,所以需要从 x+1到san,而不是 0 到 x
直接 range(x) 就是 0 ~ x,第一次循环 第一个数不会进行判断
举个简单例子,假设列表
第一个代码 for 循环的第一次过程是判断 1 是否和 2、3 的和 为目标值
第二次 for 循环,x = 2 此时判断 2 是否和 3 为目标值
第三次 for 循环,x = 3,而内部 for 循环为 range(3,3) ,不进入循环,循环结束
但第二个代码 for 循环第一次过程为 0,跳过此次循环
第二次 for 循环时,x = 1,此时是判断 2 元素是否与1 元素的和为目标值
第三次 for 循环时, x = 2,此时判断 3 元素是否与 1、2 元素和为目标值
Twilight6 发表于 2022-9-7 21:22
因为要判断每个数都是否和后续的数和是否等于目标值,所以需要从 x+1到san,而不是 0 到 x
直接 ran ...
下次问问题尽量附带上题目吧,能让他人更快的解决你的问题 Twilight6 发表于 2022-9-7 21:22
下次问问题尽量附带上题目吧,能让他人更快的解决你的问题
好的,谢谢大佬 Twilight6 发表于 2022-9-7 21:22
因为要判断每个数都是否和后续的数和是否等于目标值,所以需要从 x+1到san,而不是 0 到 x
直接 ran ...
我上面这个回答有问题,我说第二个代码有过多的冗余判断,其实不然,每次判断都是新的数进行判断,实际上两者代码都可行,只是循环过程不同
Twilight6 发表于 2022-9-7 21:22
因为要判断每个数都是否和后续的数和是否等于目标值,所以需要从 x+1到san,而不是 0 到 x
直接 ran ...
那大佬第二种算错的吗? 老婆多喝烫水 发表于 2022-9-7 22:14
那大佬第二种算错的吗?
没错,两代码都可行
Twilight6 发表于 2022-9-7 22:18
没错,两代码都可行
好的,谢谢大佬 老婆多喝烫水 发表于 2022-9-7 22:23
好的,谢谢大佬
客气了,不要误导到你就行{:5_91:}
页:
[1]