2016-06-29 11 views
0

私の目標は、さまざまなタイプのコーヒーを利用できるカフェの注文システムを作ることです。今、私は、コード何も起こらない実行時はいつでも私は、トラブル私のコードが実行されない理由を理解することを持っていると私はよく分からない理由私のコードが実行されない理由を理解する助けが必要です[python]

class Coffee(object): 

    def __init__(self,name): 
     self.name = name 

    def coffee (self, coffee_type, price): 
     self.coffee_type = coffee_type 
     self.price = price 

class Order(object): 

    def __init__(self, name): 
     self.name = name 

    def newOrder (self, coffee_type, coffee_amount): 
     this.coffee_type = coffee_type 
     this.coffee_amount = coffee_amount 




class Main(object): 

    def __init__ (self, name): 
     self.name = name 


    from Coffee import coffee 

    flat_white = coffee("1 : Flat White", 3.50) 
    long_black = coffee("2 : Long Black", 3.50) 
    cappuccino = coffee("3 : Cappuccino", 4.00) 
    espresso = coffee("4 : Espresso", 3.25) 
    latte = coffee("5 : Latte", 3.50) 

    Ordering = 'Y' 

    while Ordering == 'Y': 
     try: 
      order_coffee = int(input("What coffee would you like to order?", pprint (vars(coffee)))) 
      break 

     except: 
      ValueError 
      print ("wrong input") 

     order_amount = input("How many would you like to order?") 

     if order_coffee == 1: 
      new_Order(flat_white, order_amount) 

     elif order_coffee == 2: 
      new_Order(long_black, order_amount) 

     elif order_coffee == 3: 
      new_Order(cappuccino, order_amount) 

     elif order_coffee == 4: 
      new_Order(espresso, order_amount) 

     elif order_coffee == 5: 
      new_Order(latte, order_amount) 

     else: 
      print ("Please enter a valid number") 
      break 
+0

。どのように注文システムを運用しようとしていますか?あなたは主なオブジェクトは必要ありません、あなたは 'if __name __ ==" __ main __ ":'ブロックにそのコードを置くことができます。あるいは、そのブロック内で呼び出される 'main()'関数にコードを入れてください。 – arewm

+0

あなたのコードを実行すると、 'Coffee import coffee'という行が' ImportError:Coffee 'という名前のモジュールがありません。プログラムをどのように実行しようとしているのか、誰かが助けることができない方法を説明してください。 –

+1

@ TadhgMcDonald-Jensenが指摘したように、私のコメントは間違っています。実行されます。あなたは私が見たカップルの問題と解決策について私の答えを見ることができます。 – arewm

答えて

0

それはあなたのコードにはいくつかの問題があるように見えます。私はカップルであなたを助けようとします。

まず、__init__メソッドが名前を受け入れる必要はありません。ただ、この方法は、オブジェクトのために必要な情報を受け入れます

class Coffee(object): 
    def __init__ (self, coffee_type, price): 
     self.coffee_type = coffee_type 
     self.price = price 

class Order(object): 
    def __init__(self, coffee_type, coffee_amount): 
     self.coffee_type = coffee_type 
     self.coffee_amount = coffee_amount 

第二に、それは本当に何もしていないため、通常Pythonプログラム/スクリプトに見られるように、あなたは条件付きで実行するMainクラスを置き換えることができます:

if __name__ =="__main__": 
    ... # put main code here 

次に、デバッグがより困難にすべての例外をキャッチします書かれているようexcept。あなただけValueErrorをキャッチしたい場合は、操作を行います。

except ValueError: 
     print ("wrong input") 

あなたはtryexceptブロックとの電流の流れ(すなわちを使用する場合は、いずれかを行わないよう、あなたはtryブロック内でオーダーロジックのすべてを置く必要があります外感。あなたはValueErrorを持っている場合にも、必要に応じて必要な変数(order_coffee)が定義されることはありません。

オーダー入力注文が入力された後、あなたが発注ループから抜け出すことになります受け入れた後breakを追加します。これは意図した動作ではない可能性があります。いいえbreakはここに必要です。出力後は"Please enter a valid number"です。

Orderを作成する場合は、Order(coffee_type, coffee_amount)に電話するだけです。この注文を作成するときは、変数にも設定するようにしてください。おそらく次のようなものです:

new_order = Order(flat_white, order_amount) 

印刷「有効な番号を入力してください」と「間違った入力」はやや冗長です。無効な入力で印刷するには、それらのうちの1つが必要です。

最後に、pprintNoneを返し、その後アウトのものを出力しますそれはかなり印刷xを終えた後のでprint(..., pprint(x))は、それがprintへの別の呼び出しであるかのようにだけではなく、pprintを呼び出し、余分なNoneを印刷します。

- - これらの変更のすべてを作る

、あなたのようなものとなってしまいます。ですので、このコードは何も実行されません

class Coffee(object): 

    def __init__ (self, coffee_type, price): 
     self.coffee_type = coffee_type 
     self.price = price 

class Order(object): 

    def __init__(self, coffee_type, coffee_amount): 
     self.coffee_type = coffee_type 
     self.coffee_amount = coffee_amount 

if __name__ =="__main__": 

    coffee_available=[Coffee("1 : Flat White", 3.50), 
         Coffee("2 : Long Black", 3.50), 
         Coffee("3 : Cappuccino", 4.00), 
         Coffee("4 : Espresso", 3.25), 
         Coffee("5 : Latte", 3.50)] 

    ordering = 'Y' 

    while ordering == 'Y': 

     print("Coffee Type\t\tPrice") 
     print("-----------\t\t-----") 
     for coffee in coffee_available: 
      print("{}\t- - -\t$ {}".format(coffee.coffee_type,coffee.price)) 
     print() 
     order_coffee = int(input("What is the number of the coffee you want? ")) 

     order_amount = input("How many would you like to order? ") 

     new_order = None 

     if order_coffee >= 1 and order_coffee <=5: 
      new_order = Order(coffee_available[order_coffee-1], order_amount) 

     else: 
      print ("Please enter a valid number") 
+0

"このファイルを実行すると、実際には何も実行されません。試しましたか?クラスブロック内のコードは、(もしそこに定義されている変数を特別扱いして) 'if True:'ブロックのように実行されるので、 'class Main' **のコードは実際に実行されます**。 (あなたの指針の多くがOPに役立つと間違ってはいけません) –

+0

私はそれを実行しようとしなかった、私は以前にその使用法を見たことがなかったので、私が見た最初の問題だった。私のエラーを指摘してくれてありがとう。 – arewm

+1

問題ありません([関連する質問](http://stackoverflow.com/questions/26193653/why-does-a-class-body-get-executed-at-definition-time))OPは間違いなく使用していませんこの機械は意図された方法で。 1つの使用例は、[サブプロセスが内部的に異なる方法で内部メソッドを定義してからunix](https://github.com/tadhgmister/cpython/blob/master/Lib/subprocess.py#L1126) –

関連する問題