五岁能抬头 发表于 2021-4-9 15:16:08

最新版零基础Python第19讲课后题求解

本帖最后由 五岁能抬头 于 2021-4-9 15:18 编辑

我已经把第二层循环的第一位数字剔除出去了,为什么还会重复出现呢?

Daniel_Zhang 发表于 2021-4-9 15:34:41



确定你剔除了 1 ,也就是列表里的第二个数?

Daniel_Zhang 发表于 2021-4-9 15:37:28

本帖最后由 Daniel_Zhang 于 2021-4-9 15:40 编辑

下次请发文字代码,没人愿意给你解答,还得自己敲一遍代码

内层循环改成 for n in nums:

五岁能抬头 发表于 2021-4-9 15:44:47

本帖最后由 五岁能抬头 于 2021-4-9 15:49 编辑

Daniel_Zhang 发表于 2021-4-9 15:34
确定你剔除了 1 ,也就是列表里的第二个数?

我的第二层循环是for n in nums,我理解的是不包含第一位数,这样就不会重复出现67 + 33了
但实际结果是计算了一次33+67,又计算了一次67 + 33

Daniel_Zhang 发表于 2021-4-9 15:46:48

五岁能抬头 发表于 2021-4-9 15:44
我的第二层循环是for n in nums,我理解的是不包含第一位数,这样就不会重复出现88 + 22了
但实际结 ...

但是你这么做并不能解决根本的问题

假设说你第三位是63,第九位是37

那么即使你剔除了第一位,依然会打印 ,

Daniel_Zhang 发表于 2021-4-9 15:48:41

五岁能抬头 发表于 2021-4-9 15:44
我的第二层循环是for n in nums,我理解的是不包含第一位数,这样就不会重复出现88 + 22了
但实际结 ...

你可以尝试一下我上面的解决方法

也就是内层 for 循环 只检查 i 后面的元素,而不是从第一个元素开始检查

五岁能抬头 发表于 2021-4-9 15:50:59

Daniel_Zhang 发表于 2021-4-9 15:37
下次请发文字代码,没人愿意给你解答,还得自己敲一遍代码

内层循环改成 for n in nums:

哦好的,新手没经验,以后就知道了

qq1151985918 发表于 2021-4-9 15:51:52

nums = []
while True:
    temp = input("请录入一个整数(输入 STOP 结束):")
    if temp == "STOP":
      break
    nums.append(int(temp))

target = int(input("请录入目标整数:"))

result = []
for i in nums:
    j = target - i
    if j in nums:
      res =
      if res not in result and res[::-1] not in result:
            result.append(res)
            print(res)
if len(result) == 0:
    print("未找到目标")

Daniel_Zhang 发表于 2021-4-9 15:52:26

五岁能抬头 发表于 2021-4-9 15:50
哦好的,新手没经验,以后就知道了

问题解决了就请设置我的回答为最佳答案,谢谢!

五岁能抬头 发表于 2021-4-9 15:53:30

Daniel_Zhang 发表于 2021-4-9 15:48
你可以尝试一下我上面的解决方法

也就是内层 for 循环 只检查 i 后面的元素,而不是从第一个元素开始 ...

有道理,感谢大佬,豁然开朗{:10_279:}

五岁能抬头 发表于 2021-4-9 16:02:01

qq1151985918 发表于 2021-4-9 15:51


辛苦大佬手打代码,学习了,感谢感谢{:10_298:}

qq1151985918 发表于 2021-4-9 16:06:21

Daniel_Zhang 发表于 2021-4-9 15:52
问题解决了就请设置我的回答为最佳答案,谢谢!

元素少时间上肯定是没什么太大差距,元素多差距就比较大了。比如300个元素,毕竟少一层循环就少上万次循环次数,而且是“贪婪模式”的循环,300 次和 44850 次差距就大了

Daniel_Zhang 发表于 2021-4-9 16:21:01

qq1151985918 发表于 2021-4-9 16:06
元素少时间上肯定是没什么太大差距,元素多差距就比较大了。比如300个元素,毕竟少一层循环就少上万次循 ...

我帖子被吞了{:10_266:}

我的意思是,内层改成 for n in nums

if element in list1 有种感觉,有点类似于 for 循环,也需要依次访问列表中的每一个数

个人理解

qq1151985918 发表于 2021-4-9 16:34:41

Daniel_Zhang 发表于 2021-4-9 16:21
我帖子被吞了

我的意思是,内层改成 for n in nums


通过三次测试,差距相当不小from time import time

s = 333

t1 = time()

for i in range(333):
    j = s - i
    if j in range(333):
      pass
   
t2 = time()

for i in range(333):
    for j in range(i + 1,333):
      if i + j == s:
            pass

t3 = time()

print(t2 - t1,t3 - t2)

"""
======== RESTART: C:\Users\Administrator\Desktop\test.py ========
0.0 0.00500035285949707
>>>
======== RESTART: C:\Users\Administrator\Desktop\test.py ========
0.0 0.005000114440917969
>>>
======== RESTART: C:\Users\Administrator\Desktop\test.py ========
0.0 0.005000114440917969
>>> """

Daniel_Zhang 发表于 2021-4-9 16:46:41

qq1151985918 发表于 2021-4-9 16:34
通过三次测试,差距相当不小

好像是这么回事{:10_266:}

qq1151985918 发表于 2021-4-9 16:49:22

Daniel_Zhang 发表于 2021-4-9 16:46
好像是这么回事

我刚刚测试了下 range(33333)差距恐怖

Daniel_Zhang 发表于 2021-4-9 17:03:15

qq1151985918 发表于 2021-4-9 16:49
我刚刚测试了下 range(33333)差距恐怖

hhhhhhhhhhhh

我电脑卡了好久{:10_250:}

问题是还是有时候需要双层 for,尽量规避吧{:10_266:}
页: [1]
查看完整版本: 最新版零基础Python第19讲课后题求解