鱼C论坛

 找回密码
 立即注册
查看: 80|回复: 5

[已解决]19讲的列表(I)课后作业最后一题不明白

[复制链接]
发表于 前天 14:43 | 显示全部楼层 |阅读模式

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

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

x
最后,回忆前面我们学习过的 random 模块,生成一个由 10000 个整数(范围是 1 ~ 65535)构成的随机列表,目标值 target 由用户输入,程序结果如下:

184048fi004vu0ijvrbx4x.png
  1. import random

  2. nums = []

  3. for i in range(10000):
  4.     x = random.randint(1, 65535)
  5.     nums.append(x)

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

  7. isFind = False
  8. n = len(nums)
  9. for i in range(n):
  10.     for j in range(i+1, n):
  11.         if nums[i] + nums[j] == target:
  12.             print([i, j])
  13.             isFind = True

  14. if isFind == False:
  15.     print("找不到!")
复制代码


这代码不是做出图片的效果

那图片的意思 不是生成录入的目标整数个数的列表吗?
最佳答案
前天 15:36
gpa5031 发表于 2025-07-29 15:35
明白了,没有理解题目,原来用户输入的target等于列表 ...


您理解得对!用户输入的 `target` 是要在列表中查找的"两数之和",需要打印出符合条件的两个元素的**索引位置**。以下是修正后的完整代码和说明:

  1. import random

  2. # 初始化空列表
  3. nums = []

  4. # 生成10000个随机整数 (1~65535)
  5. for i in range(10000):
  6.     nums.append(random.randint(1, 65535))

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

  8. isFind = False
  9. n = len(nums)

  10. # 双重循环查找两数之和
  11. for i in range(n):
  12.     for j in range(i + 1, n):  # j从i+1开始避免重复
  13.         if nums[i] + nums[j] == target:  # 关键:使用索引访问元素
  14.             print(f"nums[{i}] + nums[{j}] = {nums[i]} + {nums[j]} = {target}")
  15.             isFind = True

  16. if not isFind:
  17.     print("找不到!")
复制代码


### 关键修正说明:
1. **列表初始化**:`nums = []` 创建空列表
2. **元素访问**:`nums[i] + nums[j]` 正确访问元素(原代码遗漏索引)
3. **输出格式**:使用 `f-string` 输出索引位置和具体数值
4. **避免重复**:`j` 从 `i+1` 开始,避免同一个元素用两次

### 执行示例:
  1. 请录入目标整数:80000
  2. nums[123] + nums[4567] = 23456 + 56544 = 80000
  3. nums[890] + nums[1234] = 45678 + 34322 = 80000
复制代码


### 注意事项:
1. 可能找到多组解(全部输出)
2. 列表长度固定为10000,与target无关
3. 最坏情况需要约5000万次比较(10000选2),在Python中可能需要几秒时间完成

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 14:45 | 显示全部楼层
根据题目要求,我们需要生成包含10000个随机整数的列表(范围1~65535),然后在列表中查找两个数之和等于用户输入的target。你的代码有三处需要修正:

1. 列表未初始化:应使用 nums = []
2. 元素访问错误:应使用 nums[i] + nums[j]
3. 输出格式错误:应输出具体索引和数值

修正后的完整代码:

  1. import random

  2. nums = []  # 初始化空列表

  3. for i in range(10000):
  4.     x = random.randint(1, 65535)
  5.     nums.append(x)

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

  7. isFind = False
  8. n = len(nums)
  9. for i in range(n):
  10.     for j in range(i+1, n):
  11.         if nums[i] + nums[j] == target:  # 修正元素访问
  12.             print(f"nums[{i}] + nums[{j}] = {nums[i]} + {nums[j]} = {target}")  # 添加输出
  13.             isFind = True

  14. if not isFind:
  15.     print("找不到!")
复制代码


说明:
1. 生成的列表长度固定为10000,与用户输入的target无关
2. 图片中的"请录入目标整数"是指输入要查找的和(target),不是列表长度
3. 当找到符合条件的数对时,会输出具体位置和数值
4. 如果遍历完所有组合都找不到,输出"找不到!"

运行效果示例:
请录入目标整数:80000
nums[12] + nums[543] = 12345 + 67655 = 80000
(实际输出取决于随机生成的数值)

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 15:35 | 显示全部楼层
明白了,没有理解题目,原来用户输入的target等于列表中两个数之和,打印出对应的两个数的标号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 15:36 | 显示全部楼层    本楼为最佳答案   
gpa5031 发表于 2025-07-29 15:35
明白了,没有理解题目,原来用户输入的target等于列表 ...


您理解得对!用户输入的 `target` 是要在列表中查找的"两数之和",需要打印出符合条件的两个元素的**索引位置**。以下是修正后的完整代码和说明:

  1. import random

  2. # 初始化空列表
  3. nums = []

  4. # 生成10000个随机整数 (1~65535)
  5. for i in range(10000):
  6.     nums.append(random.randint(1, 65535))

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

  8. isFind = False
  9. n = len(nums)

  10. # 双重循环查找两数之和
  11. for i in range(n):
  12.     for j in range(i + 1, n):  # j从i+1开始避免重复
  13.         if nums[i] + nums[j] == target:  # 关键:使用索引访问元素
  14.             print(f"nums[{i}] + nums[{j}] = {nums[i]} + {nums[j]} = {target}")
  15.             isFind = True

  16. if not isFind:
  17.     print("找不到!")
复制代码


### 关键修正说明:
1. **列表初始化**:`nums = []` 创建空列表
2. **元素访问**:`nums[i] + nums[j]` 正确访问元素(原代码遗漏索引)
3. **输出格式**:使用 `f-string` 输出索引位置和具体数值
4. **避免重复**:`j` 从 `i+1` 开始,避免同一个元素用两次

### 执行示例:
  1. 请录入目标整数:80000
  2. nums[123] + nums[4567] = 23456 + 56544 = 80000
  3. nums[890] + nums[1234] = 45678 + 34322 = 80000
复制代码


### 注意事项:
1. 可能找到多组解(全部输出)
2. 列表长度固定为10000,与target无关
3. 最坏情况需要约5000万次比较(10000选2),在Python中可能需要几秒时间完成

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 15:55 | 显示全部楼层
记得设置最佳答案或改为已解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 17:11 | 显示全部楼层
某一个“天” 发表于 2025-7-29 15:55
记得设置最佳答案或改为已解决

OK
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-31 10:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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