首页 > 解决方案 > 在while循环内的if语句中无法访问代码

问题描述

我试图制作一个带有 while 循环的菜单,以不断重复,直到输入有效的输入。这是我拥有的代码:


print("1) Play game")
print("")
print("2) Instructions")
print("")
print("3) Quit")
print("")

while True:
    try:
        menu = int(input("Make a selection: "))
    except ValueError:
        print("Sorry, your input was not valid")
    continue
    
    if menu > 3 or menu < 1:
        print("Please use a number in the range 1-3")
        continue
    else:
        break
if menu == 1:
    print("Lets go!")
elif menu == 2:
    print("Lets go!")
else:
    print("Quitting...")

“如果”,它说“如果菜单> 3或菜单< 1:”给出了一个错误,说明:

“无法访问的代码pylint(无法访问)”

请帮助,将不胜感激。

标签: python-3.x

解决方案


问题1:continue语句

为了帮助您理解您的代码,我使用流程图为您绘制线条。

在此处输入图像描述

但是,如果将 continue 移到 except 语句中,则代码将在成功的 try 语句上传递到 if 语句。

挑战在于,代码永远不会进入if menu > 3....语句,它总是进入tryorexcept然后执行continue. 所以它的循环本身跳过了if menu > 3 ....语句。这意味着,您永远不会退出循环,因为它永远不会执行break

问题 2:您说您删除了 continue 语句。

当您从语句中删除 continue 时,您会创建一个新问题。如果代码进入 except 子句,则变量菜单没有正确创建。因此,当它转到 时if menu > 3 ...,尚未定义变量(由于 except 子句),这会给您一个新错误。

解决方案:

我建议将语句移到continue子句except中。这将解决问题。如果菜单的输入有错误,它将返回到 while 语句。如果成功,那么您if menu > 3 ...将正确执行。

修改后的正确代码将是:

while True:
    try:
        menu = int(input("Make a selection: "))
    except ValueError:
        print("Sorry, your input was not valid")
        continue #move this inside except
    
    if menu > 3 or menu < 1:
        print("Please use a number in the range 1-3")
        continue
    else:
        break
if menu == 1:
    print("Lets go!")
elif menu == 2:
    print("Lets go!")
else:
    print("Quitting...")

推荐阅读