gpa5031 发表于 前天 14:43

19讲的列表(I)课后作业最后一题不明白

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


import random

nums = []

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

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

isFind = False
n = len(nums)
for i in range(n):
    for j in range(i+1, n):
      if nums + nums == target:
            print()
            isFind = True

if isFind == False:
    print("找不到!")

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

那图片的意思 不是生成录入的目标整数个数的列表吗?

FishC 发表于 前天 14:45

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

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

修正后的完整代码:

import random

nums = []# 初始化空列表

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

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

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

if not isFind:
    print("找不到!")


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

gpa5031 发表于 前天 15:35

明白了,没有理解题目,原来用户输入的target等于列表中两个数之和,打印出对应的两个数的标号

FishC 发表于 前天 15:36

gpa5031 发表于 2025-07-29 15:35
明白了,没有理解题目,原来用户输入的target等于列表 ...

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

import random

# 初始化空列表
nums = []

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

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

isFind = False
n = len(nums)

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

if not isFind:
    print("找不到!")

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

### 执行示例:
请录入目标整数:80000
nums + nums = 23456 + 56544 = 80000
nums + nums = 45678 + 34322 = 80000

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 前天 15:55

记得设置最佳答案或改为已解决

gpa5031 发表于 前天 17:11

某一个“天” 发表于 2025-7-29 15:55
记得设置最佳答案或改为已解决

OK
页: [1]
查看完整版本: 19讲的列表(I)课后作业最后一题不明白