鱼C论坛

 找回密码
 立即注册
查看: 2055|回复: 8

[已解决]代码异常

[复制链接]
发表于 2023-5-23 19:35:24 | 显示全部楼层 |阅读模式
1鱼币
num=[]
n=0
i=0
j=1

while True:
    if n!="STOP":
        n=input("请录入一个整数(输入STOP结束):")
        if n!="STOP":
            num.append(int(n))
        else:
            target=int(input("请录入目标整数:"))
            break 
if i<len(n)-1:
    if j<len(n):
        result=num[i]+num[j]
        if result==target:
            print([i,j])
        j+=1
    else:
        i+=1
        j=i+1
如图1所示,为了实现题目中的效果,我写的代码见上方,但是代码异常中断,结果见图2。请问哪儿出错了啊
最佳答案
2023-5-23 19:35:25
从你的代码和运行结果来看,存在一个变量类型的错误。在代码第4行,你将变量 n 初始化为整数 0。但后面在循环中,当输入“STOP”时,你使用了字符串比较操作符 != (不等于),而字符串 "STOP" 和整数 0 的比较是无意义的,会导致程序异常终止。

要解决这个问题,你可以将变量 n 初始化为 None 或者空字符串 "",这样可以避免类型错误。同时,为了让程序能够正确退出循环,你需要在 while 循环的开头判断输入的值是不是 "STOP",如果是则跳出循环。

此外,在第11行和第13行,你应该使用 len(num) 来获取列表 num 的长度,而不是 len(n),因为变量 n 是一个数字,与列表无关。

接下来是修改后的代码:
num=[]
n=None
i=0
j=1

while n!="STOP":
    n=input("请录入一个整数(输入STOP结束):")
    if n!="STOP":
        num.append(int(n))
    else:
        target=int(input("请录入目标整数:"))
        break

while i<len(num)-1:
    if j<len(num):
        result=num[i]+num[j]
        if result==target:
            print([i,j])
        j+=1
    else:
        i+=1
        j=i+1
希望能够帮助你解决问题。

有用请设置最佳答案

楼上《看不到图片》
题目.png
代码结果.png

最佳答案

查看完整内容

从你的代码和运行结果来看,存在一个变量类型的错误。在代码第4行,你将变量 n 初始化为整数 0。但后面在循环中,当输入“STOP”时,你使用了字符串比较操作符 != (不等于),而字符串 "STOP" 和整数 0 的比较是无意义的,会导致程序异常终止。 要解决这个问题,你可以将变量 n 初始化为 None 或者空字符串 "",这样可以避免类型错误。同时,为了让程序能够正确退出循环,你需要在 while 循环的开头判断输入的值是不是 "STOP" ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 19:35:25 | 显示全部楼层    本楼为最佳答案   
从你的代码和运行结果来看,存在一个变量类型的错误。在代码第4行,你将变量 n 初始化为整数 0。但后面在循环中,当输入“STOP”时,你使用了字符串比较操作符 != (不等于),而字符串 "STOP" 和整数 0 的比较是无意义的,会导致程序异常终止。

要解决这个问题,你可以将变量 n 初始化为 None 或者空字符串 "",这样可以避免类型错误。同时,为了让程序能够正确退出循环,你需要在 while 循环的开头判断输入的值是不是 "STOP",如果是则跳出循环。

此外,在第11行和第13行,你应该使用 len(num) 来获取列表 num 的长度,而不是 len(n),因为变量 n 是一个数字,与列表无关。

接下来是修改后的代码:
num=[]
n=None
i=0
j=1

while n!="STOP":
    n=input("请录入一个整数(输入STOP结束):")
    if n!="STOP":
        num.append(int(n))
    else:
        target=int(input("请录入目标整数:"))
        break

while i<len(num)-1:
    if j<len(num):
        result=num[i]+num[j]
        if result==target:
            print([i,j])
        j+=1
    else:
        i+=1
        j=i+1
希望能够帮助你解决问题。

有用请设置最佳答案

楼上《看不到图片》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 19:37:29 | 显示全部楼层
从您提供的代码中,我看不到图片,但是根据您的代码,我发现了几个可能的问题:

1. 在  while  循环中,您的代码会等待用户输入一个值或“STOP”来停止循环。但是如果用户输入了其他非数字的字符串, int(n)  将会抛出一个  ValueError ,因为这个字符串无法转换为整数。

2. 在结束  while  循环后,您再次尝试将输入转换为整数  target=int(input("请录入目标整数:")) 。如果用户输入的不是整数,这也会导致  ValueError 。

3. 在您的代码中,您试图获取字符串  n  的长度  len(n) ,这可能不是您想要的。您可能想要获取列表  num  的长度  len(num) 。

4. 您的循环  if i<len(n)-1:  不在任何循环体内,这将只会执行一次。为了遍历整个列表,您需要将此部分代码放入一个循环中。同样, if result==target:  后面的代码也只会执行一次,应该放入循环内。

下面是一个修改后的版本,应该可以解决您的问题:
num=[]
n=0
i=0
j=1

while True:
    try:
        n=input("请录入一个整数(输入STOP结束):")
        if n!="STOP":
            num.append(int(n))
        else:
            target=int(input("请录入目标整数:"))
            break
    except ValueError:
        print("输入的不是一个整数,请重新输入。")

while i < len(num) - 1:
    while j < len(num):
        result=num[i]+num[j]
        if result==target:
            print([i,j])
            break
        j+=1
    else:
        i+=1
        j=i+1

这段代码应该可以根据用户输入的整数和目标整数,找到相加等于目标的两个整数的索引。请注意,如果列表中没有任何两个数的和等于目标整数,该程序将不会输出任何结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-23 20:34:36 | 显示全部楼层
sfqxx 发表于 2023-5-23 19:38
从你的代码和运行结果来看,存在一个变量类型的错误。在代码第4行,你将变量 n 初始化为整数 0。但后面在循 ...

0!="wo"
True
python可以判断数值和字符串,以上是我输入的0和“wo"的比较,结果是True。不过你说的对,从代码优雅度来看,空字符串更美观
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-23 20:40:21 | 显示全部楼层
sfqxx 发表于 2023-5-23 19:38
从你的代码和运行结果来看,存在一个变量类型的错误。在代码第4行,你将变量 n 初始化为整数 0。但后面在循 ...

还有一点就是,我的那个循环错在哪儿啊,百思不得其解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-26 16:40:31 | 显示全部楼层
本帖最后由 Zhouzx 于 2023-5-26 16:49 编辑

        前面的while循环没有问题,在我的电脑上没有报错,后半部分不建议用if判断来做,或者说用if就几乎没法做,楼主现在做的后半部分只能判断0,1位置能不能组成,建议用loop来做。

        下面是我用for loop小改了一下:
num=[]
n=None

while True:
    if n!="STOP":
        n=input("请录入一个整数(输入STOP结束):")
        if type(n)==str:
            n=n.upper()
        if n!="STOP":
            num.append(int(n))
        else:
            target=int(input("请录入目标整数:"))
            break 
for i in range(0,len(num)):
    for j in range(i,len(num)):
        if target == num[i]+num[j]:
            print('[',i,',',j,']')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-26 16:53:47 | 显示全部楼层
ansire 发表于 2023-5-23 20:40
还有一点就是,我的那个循环错在哪儿啊,百思不得其解

在你的while循环中的代码没有原则错误,问题主要是关于你下面的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-27 08:21:22 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-27 19:57:52 | 显示全部楼层
num=[]
n=0
i=0
j=1

while True:
    if n!="STOP":
        n=input("请录入一个整数(输入STOP结束):")
        if n!="STOP":
            num.append(int(n))
        else:
            target=int(input("请录入目标整数:"))
            break 
for i in range(len(num)):
    for j in range(i):
        if num[i]+num[j]==target:
            print("[{},{}]".format(i,j))
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 11:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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