無限ループを利用して,コンピュータとじゃんけんをするプログラムを作成しなさい。 ここでコンピュータは,勝敗がつくまでグー,チョキ,パー,グー,チョキ,パー,グー,…… の順に手を繰り返すものとする。
# coding: shift_jis hands = ["グー", "チョキ", "パー"] i = 0 #最初はグー msg = "" while True: print(msg, "手(グー・チョキ・パー)を入力してください:", end="") hand1 = input() #あなた(プレイヤー)の手 hand2 = hands[i] #コンピュータの手 print("コンピュータの手は:", hand2) if hand1 == "グー" and hand2 == (ア): print("あなたの勝ちです。") break if hand1 == "グー" and hand2 == (イ): print("あなたの負けです。") break if hand1 == (ア) and hand2 == (イ): print("あなたの勝ちです。") break if hand1 == (ア) and hand2 == "グー": print("あなたの負けです。") break if hand1 == (イ) and hand2 == "グー": print("あなたの勝ちです。") break if hand1 == (イ) and hand2 == (ア): print("あなたの負けです。") break print("引き分けです。") i = (i + 1) % 3 msg = "次の"
H:\prg1\06> python stone_scissors_paper.py↵ 手(グー・チョキ・パー)を入力してください:グー コンピュータの手は:グー 引き分けです。 次の 手(グー・チョキ・パー)を入力してください:チョキ コンピュータの手は:チョキ 引き分けです。 次の 手(グー・チョキ・パー)を入力してください:パー コンピュータの手は:パー 引き分けです。 次の 手(グー・チョキ・パー)を入力してください:パー コンピュータの手は:グー あなたの勝ちです。
上のプログラムを実行すると,ひらがなでたとえば"ちょき"と入力すると, 勝敗はコンピュータの手に関係なく引き分けとなる。それはなぜか? プログラムの実行者がカタカナのグー・チョキ・パー以外の文字を入力した場合に再度, カタカナで手の入力を促すように,上のプログラムを改良しなさい。
if not(hand1 == "グー" or hand1 == "チョキ" or hand1 == "パー"): print("入力が不適切です。") msg = "もう一度" continue