老婆多喝烫水 发表于 2022-9-7 19:04:49

课后作业不懂的地方

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:22:11

本帖最后由 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:39

Twilight6 发表于 2022-9-7 21:22
因为要判断每个数都是否和后续的数和是否等于目标值,所以需要从 x+1到san,而不是 0 到 x

直接 ran ...



下次问问题尽量附带上题目吧,能让他人更快的解决你的问题

老婆多喝烫水 发表于 2022-9-7 21:30:36

Twilight6 发表于 2022-9-7 21:22
下次问问题尽量附带上题目吧,能让他人更快的解决你的问题

好的,谢谢大佬

Twilight6 发表于 2022-9-7 21:31:44

Twilight6 发表于 2022-9-7 21:22
因为要判断每个数都是否和后续的数和是否等于目标值,所以需要从 x+1到san,而不是 0 到 x

直接 ran ...



我上面这个回答有问题,我说第二个代码有过多的冗余判断,其实不然,每次判断都是新的数进行判断,实际上两者代码都可行,只是循环过程不同

老婆多喝烫水 发表于 2022-9-7 22:14:59

Twilight6 发表于 2022-9-7 21:22
因为要判断每个数都是否和后续的数和是否等于目标值,所以需要从 x+1到san,而不是 0 到 x

直接 ran ...

那大佬第二种算错的吗?

Twilight6 发表于 2022-9-7 22:18:32

老婆多喝烫水 发表于 2022-9-7 22:14
那大佬第二种算错的吗?



没错,两代码都可行

老婆多喝烫水 发表于 2022-9-7 22:23:35

Twilight6 发表于 2022-9-7 22:18
没错,两代码都可行

好的,谢谢大佬

Twilight6 发表于 2022-9-7 22:25:30

老婆多喝烫水 发表于 2022-9-7 22:23
好的,谢谢大佬



客气了,不要误导到你就行{:5_91:}

页: [1]
查看完整版本: 课后作业不懂的地方