鱼C论坛

 找回密码
 立即注册
查看: 2305|回复: 1

[已解决]课后题求助,python新版第019讲最后一题

[复制链接]
发表于 2023-8-30 23:06:27 | 显示全部楼层 |阅读模式

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

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

x
回忆前面我们学习过的 random 模块,生成一个由 10000 个整数(范围是 1 ~ 65535)构成的随机列表,目标值 target 由用户输入。
请在该数组中找出和为目标值的两个元素,并将它们的数组下标值打印出来。

import random
nums = []
k=0
while k in range(0,10):
    temp = random.randint(1,20)
    nums.append(temp)
    k = k +1
   
zbd = False
target = int(input('请输入目标整数:'))
n = len(nums)# 获取 nums 的长度,并将结果存放到 n 变量中 #
for i in range(n):
    for j in range(i,n):
        if nums[i] + nums[j] == target:
            print('[',i,',',j,']') # 将找到的两个元素下标值以列表的形式打印出来 #
        else:
            zbd = True
if zbd == True:
    print('zbd')
            
            
代码问题出在哪里呢,谢谢
最佳答案
2023-8-30 23:06:55
代码问题出在循环嵌套的部分。在找到和为目标值的两个元素时,应该立即打印它们的下标值,并且在找到后应该立即跳出循环。目前的代码在找到和为目标值的两个元素后仍然会继续执行,导致重复打印相同的下标值。此外,代码中的 zbd 变量没有正确的逻辑判断,导致无法正确判断是否找到了和为目标值的两个元素。

下面是修复后的代码:

  1. import random

  2. nums = []
  3. k = 0
  4. while k < 10000:
  5.     temp = random.randint(1, 65535)
  6.     nums.append(temp)
  7.     k += 1

  8. target = int(input('请输入目标整数:'))
  9. found = False

  10. for i in range(len(nums)):
  11.     for j in range(i + 1, len(nums)):
  12.         if nums[ i] + nums[j] == target:
  13.             print('[', i, ',', j, ']')
  14.             found = True
  15.             break

  16. if not found:
  17.     print('zbd')
复制代码


修复后的代码通过两层循环遍历列表中的元素,找到和为目标值的两个元素后,立即打印它们的下标值,并使用  found  变量进行标记。如果找不到和为目标值的两个元素,则打印 'zbd'。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-30 23:06:55 | 显示全部楼层    本楼为最佳答案   
代码问题出在循环嵌套的部分。在找到和为目标值的两个元素时,应该立即打印它们的下标值,并且在找到后应该立即跳出循环。目前的代码在找到和为目标值的两个元素后仍然会继续执行,导致重复打印相同的下标值。此外,代码中的 zbd 变量没有正确的逻辑判断,导致无法正确判断是否找到了和为目标值的两个元素。

下面是修复后的代码:

  1. import random

  2. nums = []
  3. k = 0
  4. while k < 10000:
  5.     temp = random.randint(1, 65535)
  6.     nums.append(temp)
  7.     k += 1

  8. target = int(input('请输入目标整数:'))
  9. found = False

  10. for i in range(len(nums)):
  11.     for j in range(i + 1, len(nums)):
  12.         if nums[ i] + nums[j] == target:
  13.             print('[', i, ',', j, ']')
  14.             found = True
  15.             break

  16. if not found:
  17.     print('zbd')
复制代码


修复后的代码通过两层循环遍历列表中的元素,找到和为目标值的两个元素后,立即打印它们的下标值,并使用  found  变量进行标记。如果找不到和为目标值的两个元素,则打印 'zbd'。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 22:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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