Python 石头剪子布

Python 石头剪子布,python,Python,我在comp-sci课程上做了一个测试,其中一个问题是制作一个石头剪刀游戏,如果玩家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 playe

我在comp-sci课程上做了一个测试,其中一个问题是制作一个石头剪刀游戏,如果玩家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
def rps(x,y):
player1=-1
player2=1
平局=0
'R'>'S'
“P'>'R”
'S'>'P'
如果x>y:
返回播放器1
如果x
印刷品

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

您的代码中几乎没有问题:

一,。 以下几行没有任何作用。不能将字符
R
设置为大于字符
S

'R' > 'S'
'P' > 'R'
'S' > 'P'
二,。 第1节的原因是,如果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,p2
,因为它们在我看来更能代表玩家的选择,但如果你必须使用
x
y
,只需将它们改回。

你可以执行以下操作:

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]
你问:

谁能帮我看看我的代码是不是错了

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)
是的,这是错误的。原因如下

如果你运行
rps('R','S')
,你应该得到
1
,因为石头胜过纸张。类似地,
rps('R','P')
应该给出
-1
,因为纸比石头强。这两种方法都适用于您的代码

但是,如果您运行
rps('S','p')
,您应该得到
1
,因为剪刀比纸强,但您没有-您的代码返回
-1
,这是错误的

正如eumiro在评论中指出的,这三行

'R'>'S'
'P'>'R'
'S'>'P'
我假设你认为这是定义要使用的顺序,实际上什么都不做

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: "))]

“R'>'S',“P'>'R',“S'>'P'这几行没有任何作用。你已经学过什么词典了吗?你说“它起作用了”,但显然它不起作用。程序运行时没有语法错误是不够的。使用测试用例并检查结果。如果您运行
rps('R','S')
,您将得到
1
,因为石头胜过纸张。类似地,
rps('R','P')
给出了
-1
,因为纸比石头强。但是如果你运行
rps('S','P')
,你应该得到
1
,因为剪刀比纸好,但是你没有-你得到
-1
,这是错误的。@ChrisTaylor你应该回答这个问题,因为你实际上回答了被问到的问题,而不是发布的答案,这些答案给出的代码是有效的(值得赞扬的)行动小组并没有要求你这么做。