列表问题?错误检查不起作用

时间:2016-12-17 14:21:45

标签: python list python-3.x

我是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()。

2 个答案:

答案 0 :(得分:0)

你没有拥有一个列表,你正在测试一个长字符串的字符

possible_types = " ".join(possible_types)

字母hs位于该字符串中(分别在High_EconomyBusiness字样中),但序列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)