如何解决python中的input()问题?

时间:2019-02-04 16:27:43

标签: python-3.x input

我正在用python创建我的第一个程序。目的是获得旅行成本的输出。在下面的代码中,我希望python引发错误,并要求用户重试输入是否不是字典的一部分。

我尝试使用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: 

如果您注意到需要输入,然后要求我不加任何提示地重试。

3 个答案:

答案 0 :(得分:1)

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

 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()

运行该命令时,例如,如果键入“ Arizona”,则返回“无效输入,请重试”,如果在字典中输入名称,则返回字典值。

说明:

Python使用缩进来构造代码。在您的示例中,elsewhile对齐,因此它是while语句的一部分,并在正常退出while循环(不带break)时执行。 / p>

您希望elseif对齐,以便在没有if条件(city in c.keys())的情况下,每次通过循环执行该操作是的。

答案 1 :(得分:1)

本着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(如果密钥cityc中不存在,则会发生{{1}) }块。执行程序except中的行,而不是使程序崩溃。

您可以具有多个`except块,以捕获不同的异常。

答案 2 :(得分:0)

执行尾递归

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()