我正在用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:
如果您注意到需要输入,然后要求我不加任何提示地重试。
答案 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使用缩进来构造代码。在您的示例中,else
与while
对齐,因此它是while
语句的一部分,并在正常退出while
循环(不带break)时执行。 / p>
您希望else
与if
对齐,以便在没有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
(如果密钥city
在c
中不存在,则会发生{{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()