鱼C论坛

 找回密码
 立即注册
查看: 2174|回复: 17

[已解决]最新版零基础Python第19讲课后题求解

[复制链接]
发表于 2021-4-9 15:16:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

我已经把第二层循环的第一位数字剔除出去了,为什么还会重复出现呢?
最佳答案
2021-4-9 15:37:28
本帖最后由 Daniel_Zhang 于 2021-4-9 15:40 编辑

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

内层循环改成 for n in nums[i+1:]:
题目.png
代码.png
结果.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-9 15:34:41 | 显示全部楼层
截屏2021-04-09 15.34.03.png

确定你剔除了 1 ,也就是列表里的第二个数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-9 15:37:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Daniel_Zhang 于 2021-4-9 15:40 编辑

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

内层循环改成 for n in nums[i+1:]:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-9 15:44:47 | 显示全部楼层
本帖最后由 五岁能抬头 于 2021-4-9 15:49 编辑
Daniel_Zhang 发表于 2021-4-9 15:34
确定你剔除了 1 ,也就是列表里的第二个数?


我的第二层循环是for n in nums[1:],我理解的是不包含第一位数,这样就不会重复出现67 + 33了
但实际结果是计算了一次33+67,又计算了一次67 + 33
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

那么即使你剔除了第一位,依然会打印 [2,8],[8,2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

也就是内层 for 循环 只检查 i 后面的元素,而不是从第一个元素开始检查
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-9 15:50:59 | 显示全部楼层
Daniel_Zhang 发表于 2021-4-9 15:37
下次请发文字代码,没人愿意给你解答,还得自己敲一遍代码

内层循环改成 for n in nums:

哦好的,新手没经验,以后就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 = [nums.index(i),nums.index(j)]
        if res not in result and res[::-1] not in result:
            result.append(res)
            print(res)
if len(result) == 0:
    print("未找到目标")

评分

参与人数 1荣誉 +3 鱼币 +2 贡献 +2 收起 理由
Daniel_Zhang + 3 + 2 + 2 时间复杂度和双for没多大差距吧?

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-9 15:52:26 | 显示全部楼层
五岁能抬头 发表于 2021-4-9 15:50
哦好的,新手没经验,以后就知道了

问题解决了就请设置我的回答为最佳答案,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-9 15:53:30 | 显示全部楼层
Daniel_Zhang 发表于 2021-4-9 15:48
你可以尝试一下我上面的解决方法

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

有道理,感谢大佬,豁然开朗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-9 16:02:01 | 显示全部楼层

辛苦大佬手打代码,学习了,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-9 16:06:21 | 显示全部楼层
Daniel_Zhang 发表于 2021-4-9 15:52
问题解决了就请设置我的回答为最佳答案,谢谢!

元素少时间上肯定是没什么太大差距,元素多差距就比较大了。比如300个元素,毕竟少一层循环就少上万次循环次数,而且是“贪婪模式”的循环,300 次和 44850 次差距就大了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我帖子被吞了

我的意思是,内层改成 for n in nums[i+1:]

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

个人理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
>>> """
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-9 16:46:41 | 显示全部楼层
qq1151985918 发表于 2021-4-9 16:34
通过三次测试,差距相当不小

好像是这么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-9 16:49:22 | 显示全部楼层

我刚刚测试了下 range(33333)  差距恐怖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-9 17:03:15 | 显示全部楼层
qq1151985918 发表于 2021-4-9 16:49
我刚刚测试了下 range(33333)  差距恐怖

hhhhhhhhhhhh

我电脑卡了好久

问题是还是有时候需要双层 for,尽量规避吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表