4

息子にプログラミングを教えようとしていますが、自分ではできない挑戦を息子に与えました。

彼は、ユーザーに A、B、または C を入力するように促す必要があります。ユーザーの選択に応じて、結果やその他のものを出力します。これが機能している間に、エラー処理を行って、入力が A、B、または C でない場合をチェックしようとしています。コードを以下に示します。あなたが提供できるガイダンスに感謝します。

print "************************************************************"
print "*                                                          *"
print "*            Welcome to the cinemas                        *"
print "*                                                          *"
print "************************************************************"
print "*                                                          *"
print "*  What movie would you like to see ?                      *"
print "*                                                          *"
print "*  A) Star Wars                                            *"
print "*  B) Bourne Identity                                      *"
print "*  C) The Hunger Games                                     *"
print "*                                                          *"
print "************************************************************"
movie=raw_input()
while(movie!="A","B","C"):
    print "************************************************************"
    print "*                                                          *"
    print "*            Welcome to the cinemas                        *"
    print "*                                                          *"
    print "************************************************************"
    print "*                                                          *"
    print "*  What movie would you like to see ?                      *"
    print "*                                                          *"
    print "*  A) Star Wars                                            *"
    print "*  B) Bourne Identity                                      *"
    print "*  C) The Hunger Games                                     *"
    print "*                                                          *"
    print "************************************************************"
    movie=raw_input()

print "************************************************************"
print "*                                                          *"
print "*  How many tickets would you like ?                       *"
print "*                                                          *"
print "************************************************************"
quantity =input()
cost = 7.5
if movie =="A":
    print "You are seeing Star Wars"
    price = cost*quantity
    print "You owe ", price
elif movie =="B":
    print "You are seeing Bourne Identity"
    price = cost*quantity
    print "You owe ", price
elif movie =="C":
    print "You are seeing The Hunger Games"
    price = cost*quantity
    print "You owe ", price 
4

3 に答える 3

7

あなたがしたいwhile movie not in ("A", "B", "C")

movie != "A", "B", "C"movieが 3 要素の tuple と等しいかどうかをチェックします("A", "B", "C")が、決してそうなることはありません。

于 2013-01-21T03:38:05.313 に答える
1

繰り返しを避けるためにループを構造化するためのより良い方法がいくつかあります。

最初の方法は、ムービーを無効な値に設定することです。これは、ループが常に少なくとも1回実行されることを意味します。

movie = None
while movie not in ("A", "B", "C"):
    print "************************************************************"
    print "*                                                          *"
    print "*            Welcome to the cinemas                        *"
    print "*                                                          *"
    print "************************************************************"
    print "*                                                          *"
    print "*  What movie would you like to see ?                      *"
    print "*                                                          *"
    print "*  A) Star Wars                                            *"
    print "*  B) Bourne Identity                                      *"
    print "*  C) The Hunger Games                                     *"
    print "*                                                          *"
    print "************************************************************"
    movie = raw_input()

2番目の方法はwhile True:ループを使用することです

while True:
    print "************************************************************"
    print "*                                                          *"
    print "*            Welcome to the cinemas                        *"
    print "*                                                          *"
    print "************************************************************"
    print "*                                                          *"
    print "*  What movie would you like to see ?                      *"
    print "*                                                          *"
    print "*  A) Star Wars                                            *"
    print "*  B) Bourne Identity                                      *"
    print "*  C) The Hunger Games                                     *"
    print "*                                                          *"
    print "************************************************************"
    movie = raw_input()
    if movie in ("A", "B", "C"):
        break

次に、Alexが提案するように、変数に映画を保存する作業を行うことができます

于 2013-01-21T04:14:43.800 に答える
1

また、各行を印刷する代わりに、複数行の文字列を使用できます。

welcometext = """
************************************************************
*                                                          *
*            Welcome to the cinemas                        *
*                                                          *
************************************************************
*                                                          *
*  What movie would you like to see ?                      *
*                                                          *
*  A) Star Wars                                            *
*  B) Bourne Identity                                      *
*  C) The Hunger Games                                     *
*                                                          *
************************************************************"""

そうすれば、プログラムは非常にコンパクトになります。

print welcometext
movie = raw_input(">>")
while movie.upper() not in ("A","B","C"):
    print welcometext
    movie = raw_input(">>")

もう少し高度なことをしたい場合:

movies = {
    "A": "Star Wars", 
    "B": "Bourne Identity", 
    "C": "The Hunger Games", 
    "D": "Kill Bill"
}

welcometext = """
************************************************************
*                                                          *
*            Welcome to the cinemas                        *
*                                                          *
************************************************************
*                                                          *
*  What movie would you like to see ?                      *
"""

for letter, movie in movies.items():
    welcometext += "*  {}) {: <52} *\n".format(letter, movie)

# ( <52 is for padding 52 spaces, \n is for the newline )

welcometext += """*                                                          *
************************************************************"""

movieletter = ''
while movieletter.upper() not in movies:
    print welcometext
    movieletter = raw_input(">>")

moviename = movies[movieletter.upper()]
print "You have selected {}!".format()

その後、価格などをmovies辞書に追加することもできます。楽しみ!

于 2013-01-21T03:58:56.053 に答える