2016-12-17 9 views
0

私は比較的新しい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) 

私が持っている問題は、「私は特定の文字を入力することができるように見える、それはdoesnのことです利用可能な座席の1つではないにもかかわらず、それらをエラーとしてカウントしません。たとえば、文字 "h"または "s"を入力すると、コードの一部をチェックするエラーは応答しませんが、文字 "b"または "try"のようなランダムな単語を入力するとエラーになります。それは完全にランダムではないようですが、それはpossible_types []リストの最初の3つの 'items'の文字または部分でのみ起こるようです。しかし、私はこれを完全にテストしていません。これがリストと関係があると思った理由です。誰かがこれを引き起こしていることを知っていれば、私がこれを解決し、今後このミスを繰り返すのを助けることができたら本当に感謝しています!

注意してください。リストについては、私は.joinを使用していますが、str()も試しました。

+1

'H' *あなたの 'possible_types'に*です。これは文字列の文字列であり、文字 'h'はその一部(High_Economyという単語)です。シーケンス 'try'はそうではありません。なぜこの "1"の文字列を作成し、それをリストに残さないために '' ".join()'を使いましたか? –

+0

ああ私の神は正しいよ!私はそれを削除し、それは働いた。私はstr()の前に.joinを使用しなければならないと思っていました。また、私は最高ではない;)。とにかく、1つの質問。 self.seat = str(input( "あなたが好きなチケットのタイプ:{}" .format(possible_types)))は私にキーボード割り込みを与えますか? – Eric

+0

1) 'str()'を呼び出す必要はありません。Python 3の 'input()'では**常に**が 'str'を返します。 'input()'は、ユーザーが応答を入力するための入力サポートを持つコンソールを必要とします。私はおそらくあなたがIDEコンソールまたは同様の入力がない同様のこのコードを実行していると思いますか?それはEOFを引き起こすか、キーボードの割り込みを引き起こす可能性があります。そうでなければ、考えはありません。 –

答えて

0

あなたはが持っていないリスト、あなたは1つの長い文字列に対して文字をテストしている:

possible_types = " ".join(possible_types) 

文字hs言葉High_EconomyBusinessに(その文字列であり、それぞれ)、シーケンスtryは文字列のどこにも表示されません。

単語全体が一致するようにしたい場合は、possbile_typesをリストのままにするか、またはに設定してに変換するのが理想的です(メンバーシップの高速化が可能)。

possible_types = ["Low_Economy", "Standard_Economy", "High_Economy", 
        "Business", "First", "Residence"] 

または{...}を使用して設定し、それが作る:あなたは、リスト、ここlist.extend()の必要はありませんを定義することができます

possible_types = {"Low_Economy", "Standard_Economy", "High_Economy", 
        "Business", "First", "Residence"} 

は、文字列にこれを参加だけに対して直接テストしませを実行します。オブジェクト:

if self.seat not in possible_types: 

エラーメッセージでユーザーに値を表示する必要がある場合は、値を次にに変更するか、str.join()の結果を別の変数に格納してください。

クラス__init__メソッドでユーザー入力の検証を処理しないでください。別のコードにユーザのやり取りを残しておき、の後にクラスのインスタンスを作成してください。これにより、すべてのデータオブジェクトを調整することなく、簡単にユーザーインターフェイスを交換できます。

+0

私の投稿を編集しました。可能であれば、私が言ったことを読んで助けてくれますか?ありがとう。まだ混乱している。しかし、あなたの答えは私を軌道に戻しました。私はクラスで入力をもう使用しません。ありがとう! – Eric

+0

@エリック:フォローアップの問題に新しい質問を使用してください。編集をロールバックしました。つまり、 'str.lower()'を使用していますが、リストには大文字と小文字の文字列が含まれています。 「abc」、「aBc」、「abC」]の「abc」はfalseです。そのリストには「abc」(すべて小文字)がありません。 –

+0

私はまだ理解しません。私は大文字と小文字を区別しないように、ユーザー入力の後に.lower()を使用しました。しかし、今私はこれで私の頭を克服していると思う。私はそれをコード化しようとする前に、より詳細に件名を学ぶ方がいいでしょう!私はこの小さなものが新しい質問に値するとは思わないが、あなたのすべての助けに感謝します。トップ回答:) – Eric

0
possible_types = " ".join(possible_types) 

上記の文章では、「Low_Economy Standard_Economy High_Economy Business First Residence」という文字列が1つ作成されます。

今、あなたは

if self.seat not in possible_types: 

を行っているが、本やない文字列内の特定の文字をチェックします。あなたの場合、あなたは存在していない「試して」いる「h」を見つけています。

あなたはこの文を削除する場合はあなたのプログラムが動作します

possible_types = " ".join(possible_types) 
関連する問題