如何修复python中input()的问题?

ehxuflar  于 2023-01-27  发布在  Python
关注(0)|答案(3)|浏览(151)

我正在python上创建我的第一个程序,目标是得到一个行程成本的输出,在下面的代码中,我希望python抛出一个错误,并要求用户重试,如果输入不是字典的一部分。
我尝试使用while True,但是当我使用代码时,它确实会让我在错误的输入上重试,但是不会抛出提示用户的错误。

c = {"Charlotte": 183, "Tampa": 220, "Pittsburgh": 222, "Los Angeles": 47}

def plane_ride_cost():
    city = ''
    while True:
        city = input("Name of the city: ")
        if  city in c.keys():
            return c[city]
            break
    else:
        print ("Invalid input please try again")

plane_ride_cost()

Output:
Name of the city: Hyderabad
Name of the city:

如果你注意到它接受了这个条目,然后要求我在没有提示的情况下重试。

3hvapo4f

3hvapo4f1#

另一种解决方案也符合easier to ask for forgiveness than permission的精神:

def plane_ride_cost():
    while True:
        city = input("Name of the city: ")
        try:
            return c[city]
            break
        except KeyError:
            print ("Invalid input please try again")

plane_ride_cost()

try块尝试只执行行,而不检查输入是否正确。
如果有效,则跳过except块。
如果存在KeyError,而c中不存在city键,则except块将捕获它,而不是程序崩溃,而是执行except块中的行。
你可以有多个“except”块,来捕捉不同的异常。

7hiiyaii

7hiiyaii2#

所以,我复制了你的代码并运行了它。它唯一的问题是缩进,所以我基本上纠正了它:

c = {"Charlotte": 183, "Tampa": 220, "Pittsburgh": 222, "Los Angeles": 47}
 def plane_ride_cost():
     city = ''
     while True:
         city = input("Name of the city: ")
         if  city in c.keys():
             return c[city]
             break
         else:
             print ("Invalid input please try again")

plane_ride_cost()

当运行它时,例如,如果你输入"亚利桑那州",它会返回"无效输入请重试",如果你在字典中输入名字,它会返回字典值。
说明:
Python使用缩进来组织代码,在你的例子中,elsewhile对齐,所以它是while语句的一部分,并且在正常退出while循环时执行(不带break)。
您希望elseif对齐,以便在if条件(city in c.keys())不为True时,每次循环都执行else

e7arh2l6

e7arh2l63#

你也可以用尾递归来实现。

c = {"Charlotte": 183, "Tampa": 220, "Pittsburgh": 222, "Los Angeles": 47}

def plane_ride_cost():
    city = input("Name of the city: ")
    if city in c:     #try:
        return c[city]
                      #except:
    print ("Invalid input please try again")
    plane_ride_cost()

plane_ride_cost()

相关问题