Python - "而#34;循环被卡住了

时间:2017-12-02 21:31:45

标签: python loops while-loop infinite

我创建的While循环不会退出。我已多次测试它,无法弄清楚原因。如果我输入" 0764526413"的ISBN代码它返回"所有数字"并退出循环。但如果我在代码中用字母测试它(确保它循环回来),它会回到顶部并要求我再次输入代码。我这样做,然后输入所有数字代码。在这一点上,我处于无限循环中。即使第二次输入所有数字代码,它也不会退出。如果我在第一轮中输入所有数字代码,我不明白为什么它似乎正在循环,但是如果我输入的代码不正确而且输入正确的代码则不行。

代码如下:

# Variable to start loop
Digits = 'N'
ISBN_temp = ''

# The loop asks for the ISBN, removes the dashes, removes check digit,
# And checks to see if the info entered is numeric or not.
while Digits == 'N':
    print('Please enter the ISBN code with or without the check digit.') 
    temp_ISBN = input('You may enter it with dashes if you like: ')

    ISBN_no_dash = temp_ISBN.replace('-','')

    no_dash_list = list(ISBN_no_dash)

    # If the user entered a check digit, remove it.
    if len(no_dash_list) == 10:
        del no_dash_list[9]
        ISBN_no_check = no_dash_list
    elif len(no_dash_list) == 13:
        del no_dash_list[12]
        ISBN_no_check = no_dash_list
    else:
        ISBN_no_check = no_dash_list

    # Turn list back into a string and then make sure all characters are
    # Numeric.
    for num in ISBN_no_check:
        ISBN_temp = ISBN_temp + str(num)

    if ISBN_temp.isnumeric():
        print('All numbers')
        Digits = 'Y'
    else:
        print()
        print('Please verify and reenter the ISBN number.')
        print()
        Digits = 'N'

我知道有些编码可能看起来很奇怪,但这实际上只是我写作业的一个更大的程序的一小部分。这是给我带来问题的唯一部分。任何帮助是极大的赞赏。我真的希望它是一件小事,我只是没有看到,因为我已经在整个项目上工作了好几天。非常感谢大家!请知道我需要返回"所有号码"正确输入ISBN时退出循环,或者输入除数字以外的任何内容时循环返回。

2 个答案:

答案 0 :(得分:3)

您应该在{}之前将ISBN_temp重新设置为空字符串。

for num in ISBN_no_check:
    ISBN_temp = ISBN_temp + str(num)

否则,每次迭代都会继续添加相同的字符串。

答案 1 :(得分:2)

在while循环的迭代之间保留ISBN_temp。没有明确的理由将其保持在while循环之外

此循环的替代方案

for num in ISBN_no_check:
    ISBN_temp = ISBN_temp + str(num)

是从数字

生成一个新字符串
ISBN_temp = ''.join(str(num) for num in ISBN_no_check)

当数字检查通过时,您还可以使用while Truebreak。那你就不需要digits变量