无法在循环内调用函数

时间:2020-04-04 03:22:17

标签: python-3.x

我是一名正在学习python的学生,我想仅从input()函数获取数字输入,并检查输入是否全部为数字。这是我的代码:

print('Input any random numbers here')
input1 = input('Input 1\n')
input2 = input('Input 2\n')
input3 = input('Input 3\n')
input4 = input('Input 4\n')
new_list = [input1, input2, input3, input4]
for data in new_list:
    if not data.isnumeric() == True:
        if not new_list[0].isnumeric() == True:
            del new_list[0]
            print('Rekey 1')
            input1 = input()
            new_list.insert(0, input1)
        elif not new_list[1].isnumeric() == True:
            del new_list[1]
            print('Rekey 2')
            input2 = input()
            new_list.insert(1, input2)
        elif not new_list[2].isnumeric() == True:
            del new_list[2]
            print('Rekey 3')
            input3 = input()
            new_list.insert(2, input3)
        elif not new_list[3].isnumeric() == True:
            del new_list[3]
            print('Rekey 4')
            input4 = input()
            new_list.insert(3, input4)
            print(new_list)
    else:
        print('Done Checking')
        print(new_list)
        break

要进行检查,我将创建一个包含变量的列表:输入1,2,3,4:new_list = [input1, input2, input3, input4]并实现一个for循环以解析列表中的变量

但是我意识到,如果我要通过为第一个输入:input1输入字母(错误的值类型)来运行此代码。它将调用for循环以执行其中的代码以检查输入:

for data in new_list:
if not data.isnumeric() == True:
    if not new_list[0].isnumeric() == True:
        del new_list[0]
        print('Rekey 1')
        input1 = input()
        new_list.insert(0, input1)
    elif not new_list[1].isnumeric() == True:
        del new_list[1]
        print('Rekey 2')
        input2 = input()
        new_list.insert(1, input2)
    elif not new_list[2].isnumeric() == True:
        del new_list[2]
        print('Rekey 3')
        input3 = input()
        new_list.insert(2, input3)
    elif not new_list[3].isnumeric() == True:
        del new_list[3]
        print('Rekey 4')
        input4 = input()
        new_list.insert(3, input4)
        print(new_list)
else:
    print('Done Checking')
    print(new_list)
    break

但是,如果我为输入1的数字值(正确值类型)准确键入,为其余输入变量:input2,input3和input4键入字母值(错误值类型),则它某种程度上不会调用for循环来执行其中的代码,并如上所述检查输入内容。'

我已经审查了我的代码几次,但我在代码中找不到问题,我所能理解的是可迭代对象已用尽,但我不知道如何解决。

我希望有人可以通过简单且不需要复杂的导入功能来回答我的疑问

1 个答案:

答案 0 :(得分:0)

欢迎使用Python!此代码的一些注意事项:

  1. “硬编码”通常是个坏主意,应避免使用它

  2. 在python中,由于python具有集成的内存管理器,因此在大多数情况下无需使用del

  3. 'if not data.isnumeric()== True'可以重写为'if not data.isnumeric()'

  4. 您的代码不起作用,因为如果遇到任何数字值,循环就会中断并且代码结束。

总而言之,我将像这样重写您的代码:

print('Input any random numbers here')
input1 = input('Input 1\n')
input2 = input('Input 2\n')
input3 = input('Input 3\n')
input4 = input('Input 4\n')
new_list = [input1, input2, input3, input4]

i = 0
while i < len(new_list):
    if not new_list[i].isnumeric():
        new_list[i] = input(f'Rekey {i+1}\n')
        i -= 1
    i += 1

尽管这可能不是最佳解决方案,但是您可以尝试一些东西。让我知道你是否有疑问