我正在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:
如果你注意到它接受了这个条目,然后要求我在没有提示的情况下重试。
3条答案
按热度按时间3hvapo4f1#
另一种解决方案也符合easier to ask for forgiveness than permission的精神:
try
块尝试只执行行,而不检查输入是否正确。如果有效,则跳过
except
块。如果存在
KeyError
,而c
中不存在city
键,则except
块将捕获它,而不是程序崩溃,而是执行except
块中的行。你可以有多个“except”块,来捕捉不同的异常。
7hiiyaii2#
所以,我复制了你的代码并运行了它。它唯一的问题是缩进,所以我基本上纠正了它:
当运行它时,例如,如果你输入"亚利桑那州",它会返回"无效输入请重试",如果你在字典中输入名字,它会返回字典值。
说明:
Python使用缩进来组织代码,在你的例子中,
else
与while
对齐,所以它是while
语句的一部分,并且在正常退出while
循环时执行(不带break)。您希望
else
与if
对齐,以便在if
条件(city in c.keys()
)不为True时,每次循环都执行else
。e7arh2l63#
你也可以用尾递归来实现。