解决while循环问题

时间:2017-01-22 12:00:04

标签: python input while-loop

下面是我在修改Python时编写的基本脚本的一部分。我打算让这个剧本做的是提示我注意我的笔记,然后要求我确认我的选择。如果由于某种原因我选择了错误的主题,我已经加入了一个while循环,它会重复,直到我的选择正确为止。该脚本的结果是它将返回确认的主题。

当我执行脚本时出现的问题是,当我回复'no'(或任何其他指示我不确认这是正确的选择)时,终端输出反复向我发送主题列表。终止这个的唯一方法是使用KeyboardInterrupt。

我该如何解决这个问题? 我觉得它可能与while循环中的iteration语句有关,或者break语句的位置不合适。

感谢您的帮助。

def subject():

    subject_dict = {1: 'Mathematics', 2: 'Computer Science', 3: 'English Literature & Language', 4: 'Philosophy', 5: 'Linguistics', 6: 'Art & Design'}

    subject_prompt = ("\nSelect the subject of your note.\n")
    print(subject_prompt)

    for i in subject_dict:
        subject_choices = str(i) + ". " + subject_dict[i]
        print(subject_choices)

    subject_prompt_input = input("\n> ")
    x = int(subject_prompt_input)

    confirmation = input("\nSo the subject of your note is" + " '" + subject_dict[x] + "'" + "?\n> ")

    while confirmation in ['no', 'No', 'n', 'NO']:
        print(subject_prompt)
        for i in subject_dict:
            subject_choices = str(i) + ". " + subject_dict[i]
            print(subject_choices)
        subject_prompt_input
        confirmation

        if confirmation in ['quit', 'stop', 'exit']:
            quit()

        if confirmation in ['Yes', 'YES', 'yes', 'y', 'Y']:
            break

    if confirmation in ['yes', 'y', 'YES', 'Y']:
        selection = subject_dict[x]
        return selection

1 个答案:

答案 0 :(得分:3)

您是否打算继续循环,直到用户按“是”或“退出”?

如果是,则需要将输入放在循环中。

将while语句更改为while True,因为您仍然没有确认变量。

while True:
    confirmation = input("\nSo the subject of your note is" + " '" + subject_dict[x] + "'" + "?\n> ")
    print(subject_prompt)
    for i in subject_dict:
        subject_choices = str(i) + ". " + subject_dict[i]
        print(subject_choices)
    subject_prompt_input
    confirmation

    if confirmation in ['quit', 'stop', 'exit']:
        quit()

    if confirmation in ['Yes', 'YES', 'yes', 'y', 'Y']:
        break

if confirmation in ['yes', 'y', 'YES', 'Y']:
    selection = subject_dict[x]
    return selection

修改

根据你在评论中提出的问题。

这与不足无关。

你可以这样做:

confirmation = 'no'
while confirmation in ['no', 'No', 'n', 'NO']:
...

虽然,这很丑:)