我是python的新手,我刚开始学习如何使用类。这是我尝试整合它们的第一个程序,但是我提出了一个我似乎无法修复的小问题,我认为它必须做列表。代码如下: (主题是让用户选择要购买的座位类型)。
class SeatBooking:
def __init__(self, seat):
self.seat = seat
possible_types = []
possible_types.extend(["Low_Economy", "Standard_Economy", "High_Economy",
"Business", "First", "Residence"])
possible_types = " ".join(possible_types)
while True:
if self.seat not in possible_types:
print("Sorry, but this is not a valid answer. Please try again!")
self.seat = str(input("What type of ticket would you like? The possible types are: {} "
.format(possible_types)))
else:
print("You have chosen to book a {} ticket.".format(self.seat))
confirmation = str(input("Please confirm with 'Yes' or 'No': ")).lower()
if confirmation == "yes":
print("Excellent decision! Ready to continue")
print("=" * 170)
break
elif confirmation == "no":
self.seat = str(input("What type of ticket would you like? The possible types are: {} "
.format(possible_types)))
else:
print("That doesn't seem to be a valid answer.")
这是主文件(执行我将要制作的不同类):
import type_seat
# Choose the seat to book
print("=" * 170)
print("Welcome to Etihad! This program can help you organize your flight, payments and usage of miles!")
possible_types = []
possible_types.extend(["Low_Economy", "Standard_Economy", "High_Economy",
"Business", "First", "Residence"])
possible_types = " ".join(possible_types)
seat_type = str(input("What type of ticket would you like? The possible types are: {}. "
.format(possible_types)))
type_seat.SeatBooking(seat_type)
我遇到的问题是,我似乎能够输入某些字母,即使它们不是可用座位之一,也不会将它们视为错误。例如,当我输入字母" h"或者" s",我的错误检查部分代码没有响应,但当我输入字母" b"或者随机的话,比如"试试"它确实。它似乎并不是完全随机的,而且似乎只发生在前3个项目的字母或部分中。在possible_types []列表中。但是,我还没有完全测试过。这就是为什么我认为它与列表有关,所以如果有人知道是什么造成了这个,我真的很感激它,如果他们可以帮我解决这个问题,也许可以帮助我重复这个错误。未来!
注意,对于我使用.join的列表,但我也尝试过str()。
答案 0 :(得分:0)
你没有拥有一个列表,你正在测试一个长字符串的字符:
possible_types = " ".join(possible_types)
字母h
和s
位于该字符串中(分别在High_Economy
和Business
字样中),但序列try
没有&#39 ; t出现在字符串中的任何位置。
如果您只想让整个单词匹配,则需要保留possbile_types
列表,或理想情况下将其转换为集(因为设置允许快速会员资格测试)。您可以在此处定义列表,不需要list.extend()
:
possible_types = ["Low_Economy", "Standard_Economy", "High_Economy",
"Business", "First", "Residence"]
或使用{...}
possible_types = {"Low_Economy", "Standard_Economy", "High_Economy",
"Business", "First", "Residence"}
不将此项加入字符串中,只需直接针对该对象进行测试:
if self.seat not in possible_types:
如果您仍需要在错误消息中向用户显示值,请加入值然后,或将str.join()
结果存储在另一个变量中。
请注意,您不应该在类__init__
方法中处理用户输入验证。将用户交互留给单独的代码段,并在验证完之后创建类的实例。这样您就可以轻松地换出用户界面,而无需调整所有数据对象。
答案 1 :(得分:0)
possible_types = " ".join(possible_types)
上述声明将创建一个字符串作为" Low_Economy Standard_Economy High_Economy Business First Residence"。
现在你正在做
if self.seat not in possible_types:
这将检查字符串中是否存在特定字符。在你的情况下,你发现' h'哪个存在并且尝试'这不是。
如果删除此声明,您的程序将起作用
possible_types = " ".join(possible_types)