3

コンプ科学クラスのテストがあり、質問の 1 つは、プレイヤー 1 が勝った場合は -1 を返し、プレイヤー 2 が勝った場合は 1 を返し、引き分けの場合は返すジャンケン ゲームを作成することでした。 0. プログラムを作成して実行したところ、うまくいきましたが、教授によると、うまくいかなかったとのことです。

def rps(x,y):
    player1 = -1
    player2 = 1
    tie = 0
    'R'>'S'
    'P'>'R'
    'S'>'P'
    if x>y:
        return player1
    if x<y:
        return player2
    else:
        return tie

何が悪いのかわかりませんか?rps('R','P') を実行すると、-1 が返されます。これは、x = player1 であり、Rock が Paper よりも優れているためです。私のコードが間違っているかどうかを確認するのを手伝ってくれる人はいますか?

4

5 に答える 5

3

次のことができます。

def rps(p1,p2):
    retval= {
        'R':{'R': 0, 'S':-1, 'P': 1},
        'S':{'R': 1, 'S': 0, 'P':-1},
        'P':{'R':-1, 'S': 1, 'P': 0}
    }
    return retval[p1][p2]
于 2013-02-15T09:55:34.080 に答える
3

コードにはいくつかの問題があります。

1. 次の行は何もしません。character をcharacterよりも大きく設定することはできません:RS

'R' > 'S'
'P' > 'R'
'S' > 'P'

2. セクション 1 の原因は、あなたif x>y:が思っていることをしていないことです。のコンテンツがアルファベットでのxコンテンツの前にあるかどうかを確認するだけです。y( と の中身が文字だxと仮定)y


あなたのコードはそのままでは修正が難しいので、まったく別の角度からこの問題にアプローチすることをお勧めします。

これはあなたのものとはまったく異なる解決策ですが、これは機能します。結果を得るために多くのifチェックを使用するだけです。

def rps(p1, p2):
    if p1 == p2:
        return 0
    elif (p1 == "R" and p2 == "S")\
    or (p1 == "S" and p2 == "P")\
    or (p1 == "P" and p2 == "R"):
        return -1
    else:
        return 1

プレーヤーの選択をよりよく表しているので、 に置き換えましたが、 と を使用する必要がある場合は、x, y元に戻してください。p1, p2xy

于 2013-02-15T09:39:43.497 に答える
3

あなたは尋ねました:

私のコードが間違っているかどうかを確認するのを手伝ってくれる人はいますか?

はい、違います。理由は次のとおりです。

走れrps('R','S')ば が得られるはずです1。紙は岩に勝るので、同様にrps('R','P')与えるべきです。-1これらは両方ともコードで機能します。

ただし、ハサミは紙よりも優れているため、実行rps('S','P')すると が得られるはずですが、そうではありません。コードは を返しますが、これは間違っています。1-1

eumiroがコメントで指摘したように、3行

'R'>'S'
'P'>'R'
'S'>'P'

使用する順序を定義していると思いますが、実際には何もしないでください。

于 2013-02-15T10:49:49.323 に答える
1
def rps(x,y):
    return [0, -1, 1]['RPS'.index(x) - 'RPS'.index(y)]

または、インタラクティブなプログラムが必要な場合:

from random import randint
['Tie', 'I win', 'You win'][randint(0, 2) - 'RPS'.index(raw_input("Enter R, P, or S: "))]
于 2013-04-30T00:22:36.337 に答える
0
def rps(x,y):
    d = {'R': 1, 'S': 2, 'P': 3}
    return ((d[x] - d[y]) + 1) % 3 - 1


for p1 in 'RPS':
    for p2 in 'RPS':
        print p1, p2, rps(p1, p2)

版画

R R 0
R P 1
R S -1
P R -1
P P 0
P S 1
S R 1
S P -1
S S 0
于 2013-02-15T09:35:40.647 に答える