Python嵌套数组元素删除及索引有效性校验代码问题排查
嵌套数组元素删除的输入校验问题
需求是删除嵌套数组里的元素,要求输入的索引必须是0到4之间的整数,不能是字符串或浮点数。我写了valuecheck函数做输入校验,期望只有符合要求时才结束循环,否则提示重新输入,但现在逻辑有问题,卡壳一小时了,代码如下:
#Write a Python program to delete an existing item from the array #function used to check for valid input def valuecheck(checker): loopx = True while loopx: try: if checker == int(checker) and (checker>0 and checker<4): #first it checks if the input is actually an integer #checker = int(checker) #checks if the input index number is within range of the array loopx = False else: checker = input("Value isn't a valid input, try again: ") return(checker) #if input isn't an integer the below prompt is printed except: checker = input("Value isn't a valid input, try again: ") #the example array is defined and printed myarray = ['i', [1, 3, 5, 7, 9]] print(myarray[1]) #input defined and checked by the loop deletion = input("Please input the index of the element you want to remove (0 through 4). Indexes for the elements start at 0, increasing left to right: ") deletion = valuecheck(deletion) #pop is then used to remove the value with index "deletion" from the array myarray[1].pop(deletion) #finally the new array is printed print ("This is the new array:",myarray[1])
问题分析与修正
原代码的几个核心错误:
- 输入一开始是字符串,直接用
checker == int(checker)会触发类型错误,而且没先把输入转成整数就判断 return放在循环内部,第一次循环就直接返回,导致校验循环根本没生效- 范围判断写错了:要求是0-4,原代码写成了
checker>0 and checker<4(只能输入1-3) - 异常处理太宽泛,应该只捕获转整数失败的
ValueError - 最终返回的是字符串,
pop方法需要整数索引,会报错
修正后的代码:
# 删除数组中指定元素的Python程序 # 输入校验函数 def valuecheck(): while True: try: # 获取输入并尝试转为整数 checker = int(input("请输入要删除元素的索引(0到4):")) # 校验索引范围 if 0 <= checker <= 4: return checker else: print("索引不在0-4范围内,请重新输入") except ValueError: print("输入不是整数,请重新输入") # 定义并打印示例数组 myarray = ['i', [1, 3, 5, 7, 9]] print("原嵌套数组:", myarray[1]) # 获取校验后的索引 deletion = valuecheck() # 删除指定索引的元素 myarray[1].pop(deletion) # 打印结果 print("删除后的数组:", myarray[1])
修正说明
- 重构了
valuecheck函数,直接在函数内部获取输入,避免外部传入字符串的问题 - 先尝试把输入转成整数,失败则捕获
ValueError提示用户 - 范围判断改为正确的
0 <= checker <=4 - 只有当输入是整数且在范围内时,才返回整数类型的索引,保证
pop能正常工作 - 中文提示更友好,逻辑流程更清晰
内容的提问来源于stack exchange,提问作者freen
相关产品推荐
相关产品推荐

