| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
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[x] + a[c] == target: 
            print([x,c]) 
 
 
对比: 
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[x] + a[c] == target: 
            print([x,c]) 
         
 
 
 
 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,第一次循环 第一个数不会进行判断 
 
举个简单例子,假设列表 [1, 2, 3] 
 
第一个代码 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 元素和为目标值 
 
 
 
 |   
 
 
 
 |