鱼C论坛

 找回密码
 立即注册
查看: 492|回复: 3

[已解决]Python 作业切片问题

[复制链接]
发表于 2023-12-24 14:16:55 | 显示全部楼层 |阅读模式

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

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

x
目标效果:
请输入一个整数(输入STOP结束):22
请输入一个整数(输入STOP结束):33
请输入一个整数(输入STOP结束):45
请输入一个整数(输入STOP结束):18
请输入一个整数(输入STOP结束):62
请输入一个整数(输入STOP结束):88
请输入一个整数(输入STOP结束):93
请输入一个整数(输入STOP结束):72
请输入一个整数(输入STOP结束):67
请输入一个整数(输入STOP结束):19
请输入一个整数(输入STOP结束):STOP
请录入目标整数:100
[1, 8]


我的代码
#找出目标和
nums = []
while True :
    n = input("请输入一个整数(输入STOP结束):")
    if n == "STOP":
        break
    nums.append(int(n))
   
target = int(input("请录入目标整数:"))

L = len(nums)
for x in range(0,L):
    for y in range(0,L):
        if nums[x] + nums[y] == target:
             break
    break
nums = []
nums.append(x)
nums.append(y)
print(nums)
           


输出[1,9],  我就很迷惑?
最佳答案
2023-12-24 15:39:40
本帖最后由 jackz007 于 2023-12-24 15:48 编辑

        因为寻找目标数是在循环没有完成,同时,也没有找到目标数的情况下,被强制结束的,而被打印的也只是循环被中断时的num[x] 和 num[y] 而已。
        问题通过下面的代码进行指出。
  1. nums = []
  2. while True :
  3.     n = input("请输入一个整数(输入STOP结束):")
  4.     if n == "STOP":
  5.         break
  6.     nums.append(int(n))
  7.    
  8. target = int(input("请录入目标整数:"))

  9. L = len(nums)
  10. for x in range(0,L):
  11.     for y in range(0,L):
  12.         if nums[x] + nums[y] == target:
  13.              break
  14.     break                                    # 问题出在这里,在没有找到 target 的情况下,外层循环(x)执行 1 次,内层循环(y)跑完一圈的时候,就会无条件强制结束循环,而这个时候,根本就没有找到目标数 Target。
  15. nums = []
  16. nums.append(x)
  17. nums.append(y)
  18. print(nums)
复制代码

        下面是我修改的代码,谨供楼主参考。
  1. nums = []
  2. while True :
  3.     n = input("请输入一个整数(输入STOP结束):")
  4.     if n . upper() == "STOP" :                       # 不光接受 'STOP' ,还应该接受 'Stop' 或者 'stop' 等
  5.         break
  6.     nums.append(int(n))
  7.    
  8. target = int(input("请录入目标整数:"))

  9. r = False                                            # 增加一个布尔变量,用来指示是否已经成功匹配到目标数,同时,也用于控制循环。
  10. for x in range(len(nums)) :
  11.     for y in range(x + 1 , len(nums)) :
  12.         if nums[x] + nums[y] == target:
  13.             r = True                                 # 匹配到目标数,翻转布尔变量的值
  14.             break                                    # 结束循环
  15.     if r :                                           # 根据布尔变量的值确定是否需要结束循环
  16.         break
  17. if r :
  18.     print('[', x , ',' , y ,']' , sep = '')   
  19. else :
  20.     print('非常抱歉,没有匹配到目标数。')
复制代码

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2023-12-24 14:17:07 | 显示全部楼层
你的代码存在一些错误,我来帮你改正一下:
  1. # 找出目标和
  2. nums = []
  3. while True:
  4.     n = input("请输入一个整数(输入STOP结束):")
  5.     if n == "STOP":
  6.         break
  7.     nums.append(int(n))
  8. target = int(input("请录入目标整数:"))
  9. L = len(nums)
  10. for x in range(0, L):
  11.     for y in range(x + 1, L):  # y 从 x+1 开始,避免重复计算
  12.         if nums[x] + nums[y] == target:
  13.             result = [nums[x], nums[y]]
  14.             break
  15.     else:
  16.         continue
  17.     break
  18. if result:
  19.     print("找到符合条件的两个数:", result)
  20. else:
  21.     print("未找到符合条件的两个数")
复制代码

这里主要改动有三点:
1. 在找出符合条件的两个数时,要使用 `nums[x]` 和 `nums[y]` 分别代表第 x 个数和第 y 个数。
2. 在内层循环中的 `y`,应该从 `x+1` 开始,避免重复计算。
3. 在找到符合条件的两个数后即可退出循环,并将结果存储在列表 `result` 中。

希望上述解释对你有所帮助!如果还有其他问题,请继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-24 15:39:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2023-12-24 15:48 编辑

        因为寻找目标数是在循环没有完成,同时,也没有找到目标数的情况下,被强制结束的,而被打印的也只是循环被中断时的num[x] 和 num[y] 而已。
        问题通过下面的代码进行指出。
  1. nums = []
  2. while True :
  3.     n = input("请输入一个整数(输入STOP结束):")
  4.     if n == "STOP":
  5.         break
  6.     nums.append(int(n))
  7.    
  8. target = int(input("请录入目标整数:"))

  9. L = len(nums)
  10. for x in range(0,L):
  11.     for y in range(0,L):
  12.         if nums[x] + nums[y] == target:
  13.              break
  14.     break                                    # 问题出在这里,在没有找到 target 的情况下,外层循环(x)执行 1 次,内层循环(y)跑完一圈的时候,就会无条件强制结束循环,而这个时候,根本就没有找到目标数 Target。
  15. nums = []
  16. nums.append(x)
  17. nums.append(y)
  18. print(nums)
复制代码

        下面是我修改的代码,谨供楼主参考。
  1. nums = []
  2. while True :
  3.     n = input("请输入一个整数(输入STOP结束):")
  4.     if n . upper() == "STOP" :                       # 不光接受 'STOP' ,还应该接受 'Stop' 或者 'stop' 等
  5.         break
  6.     nums.append(int(n))
  7.    
  8. target = int(input("请录入目标整数:"))

  9. r = False                                            # 增加一个布尔变量,用来指示是否已经成功匹配到目标数,同时,也用于控制循环。
  10. for x in range(len(nums)) :
  11.     for y in range(x + 1 , len(nums)) :
  12.         if nums[x] + nums[y] == target:
  13.             r = True                                 # 匹配到目标数,翻转布尔变量的值
  14.             break                                    # 结束循环
  15.     if r :                                           # 根据布尔变量的值确定是否需要结束循环
  16.         break
  17. if r :
  18.     print('[', x , ',' , y ,']' , sep = '')   
  19. else :
  20.     print('非常抱歉,没有匹配到目标数。')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-25 12:23:45 | 显示全部楼层
感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 18:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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