1

始めている間、私は小さなプロジェクトとしてじゃんけんゲームを作っています、そして私は同じビットのコードをたくさん使わなければなりません。現時点では、コピーして貼り付けているので、これを行うための最良の方法は何ですか。乱雑に見えます。さらに、入力の検証中にループが発生する問題があり、すべてを変更する必要があるのは面倒です。

user_continue = raw_input("Would you like to play again? Y/N: ")
user_continue = user_continue.upper()
#Yes or no continue for the continue while loop to continue working until correct user input.
y_n_continue = False
while y_n_continue == False:
    if user_continue == "Y" or user_continue == "YES" or user_continue == "N" or user_continue == "NO":
        if user_continue == "Y" or user_continue == "YES":
            continue_game = True
            y_n_continue = True
        elif user_continue == "N" or user_continue == "NO":
            continue_game = False
            y_n_continue = True
        else:
            print "Press Y or N"
            y_n_continue = False
    else:
        print ""

コード全体を追加した方がおそらく簡単でしょう(Antonのおかげで、修正が加えられました。現時点では、エラーが発生しています-TypeError:'bool'オブジェクトは呼び出せません。

私は基本的に、ユーザーが望む限りゲームをループさせ、入力を検証してすべてを可能な限り防弾にするようにしています。

編集2-これが新しいコードで、その下にいくつかのテストデータがあります。

起動すると、最初にy/nを入力するように求められます。

また、各ゲームの後にyまたはnを2回入力する必要があります。

じゃんけんの選択に「間違った」データを入力すると、y/nの選択になります

import random


def continue_game():
    while True:
        user_continue = raw_input("Would you like to play again? Y/N: ").upper()
        if user_continue in ["Y", "YES", "N", "NO"]:
            return user_continue in ["Y", "YES"]
        else:
            print "Press Y or N"



while continue_game():

    #computers choice of rock, paper or scissors
    computer_input = ["ROCK", "PAPER", "SCISSORS"]
    computer_choice = random.choice(computer_input)
    #users choice or rock, paper or scissors
    user_input = raw_input("Choose rock, paper or scissors: ")
    #Turns user input to upper case.
    user_choice = user_input.upper()
    if user_choice == "ROCK" or user_choice == "PAPER" or user_choice == "SCISSORS":
        #Computer = ROCK
        if computer_choice == "ROCK":
            #user = ROCK
            if user_choice == "ROCK":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You draw!"

                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False



            #user = PAPER
            elif user_choice == "PAPER":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You win!"
                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False


            #user = SCISSORS   
            elif user_choice == "SCISSORS":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You lose!"
                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False


        #Computer = PAPER
        elif computer_choice == "PAPER":
            #user = ROCK
            if user_choice == "ROCK":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You lose!"
                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False

            #user = PAPER
            elif user_choice == "PAPER":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You draw!"
                if continue_game():
                    print "continue"
                else:
                    continue_game = False


            #user = SCISSORS   
            elif user_choice == "SCISSORS":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You win!"
                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False

        #Computer = SCISSORS
        elif computer_choice == "SCISSORS":
            #user = ROCK
            if user_choice == "ROCK":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You win!"
                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False

            #user = PAPER
            elif user_choice == "PAPER":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You lose!"
                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False

            #user = SCISSORS   
            elif user_choice == "SCISSORS":
                print "You have chosen: " + user_choice
                print "The computer has chosen: " + computer_choice
                print "You draw!"
                #replay?
                if continue_game():
                    print "continue"
                else:
                    continue_game = False

        else:
            print "Something has gone wrong."
    else:
        print "Are you sure you entered that correctly?"

出力:

Would you like to play again? Y/N: y

Choose rock, paper or scissors: rock

You have chosen: ROCK

The computer has chosen: PAPER

You lose!

Would you like to play again? Y/N: y

continue

Would you like to play again? Y/N: y

Choose rock, paper or scissors: paper

You have chosen: PAPER

The computer has chosen: ROCK

You win!

Would you like to play again? Y/N: wer

Press Y or N

Would you like to play again? Y/N: dfg

Press Y or N

Would you like to play again? Y/N: y

continue

Would you like to play again? Y/N: y

Choose rock, paper or scissors: test

Are you sure you entered that correctly?

Would you like to play again? Y/N: y

Choose rock, paper or scissors: rock

You have chosen: ROCK

The computer has chosen: SCISSORS

You win!

Would you like to play again? Y/N: n

exit

Would you like to play again? Y/N: n

>>> 

私は自分が苦しんでいることを知っていますが、これはすべてありがたいことです。

4

3 に答える 3

4

continue_gameコードから関数を作成し、変数の値を返すことができます。関数にラップされたコードの縮小版とその使用例を次に示します。

def continue_game():
    while True:
        user_continue = raw_input("Would you like to play again? Y/N: ").upper()
        if user_continue in ["Y", "YES", "N", "NO"]:
            return user_continue in ["Y", "YES"]
        else:
            print "Press Y or N"

if continue_game():
    print "continue"
else:
    print "exit"

更新:完全なコードに関して、エラーを修正するには、次の行を削除する必要があります。

continue_game = True

と交換:

while continue_game == True:

と:

while continue_game():
于 2012-10-14T09:25:30.830 に答える
0

まず、whilevar==誤ってvarではないときに使用するようなものは避ける必要があります。

同じこと:

"if user_continue=="Y"またはuser_continue=="YES"またはuser_continue=="N"またはuser_continue=="NO ":"

次のようなことをします:

「「YESNO」のuser_continue.upper()の場合

方法は正しいですか?代わりは :)

プレイヤーがもう一度プレイしたいかどうかを尋ねる正しい方法は、「ゲーム」機能を作成し、最後にそれを呼び出すことだと思います

ここの例:http: //pastebin.com/0jQtwGdi

于 2012-10-14T10:26:54.120 に答える
0

ゲームのルールを表すこの表を理解したら、次のようにします。

      | ROCK2 | PAPR2 | SCIS2 |
------+-------+-------+-------|
ROCK1 |    0  |     2 |     1 |
PAPR1 |    1  |     0 |     2 |
SCIS1 |    2  |     1 |     0 |

1 = column wins, 2 = row wins, 0 = draw

辞書とタプルのインデックスといくつかの例外処理を使用することで、プログラム全体を大幅に縮小できます。

import random

m = dict(
        rock     = dict(rock=0, paper=2, scissors=1),
        paper    = dict(rock=1, paper=0, scissors=2),
        scissors = dict(rock=2, paper=1, scissors=0)
    )

while True:

    try:
        continue_game = {'n': False, 'y': True}[
            raw_input("Would you like to play again? Y/N: ")[0].lower()
        ]
    except:
        print "Press Y or N"
        continue # next loop

    if not continue_game: break

    human = raw_input("Choose rock, paper or scissors: ").lower()
    computer = random.choice(m.keys())

    print "You have chosen:", human
    print "The computer has chosen:", computer
    print ("You draw!", "You lose!", "You win!")[ m[computer][human] ]

最初は少し注意が必要ですが、そのような設計されたコードは、繰り返さないことを保証し、状況に応じて構造化されたものよりもさらに読みやすく(そして保守可能)なります。

于 2012-10-14T10:33:00.230 に答える