我对我的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
我没看到它有什么问题?如果你做rps('R','P')那么它将返回-1,因为x = player1并且因为Rock击败Paper。任何人都可以帮我看看我的代码是否错误?
答案 0 :(得分:3)
您的代码中存在一些问题:
1。
以下几行不做任何事情。您设置字符R
不能大于字符S
:
'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, p2
,因为它们更好地代表了玩家的选择,但如果您必须使用x
和y
,只需将其更改回来。
答案 1 :(得分: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]
答案 2 :(得分:3)
你问:
任何人都可以帮我看看我的代码是否错误?
是的,这是错的。这就是原因。
如果你运行rps('R','S')
,你应该得到1
,因为摇滚乐会打败。同样地rps('R','P')
也应该-1
,因为纸张会摇滚。这些都适用于您的代码。
但是,如果你运行rps('S','P')
,你应该得到1
,因为剪刀击败纸张,但你没有 - 你的代码返回-1
,这是错误的。
正如eumiro在评论中指出的那样,三行
'R'>'S'
'P'>'R'
'S'>'P'
我认为你认为是定义了要使用的顺序,实际上并没有做任何事情。
答案 3 :(得分: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: "))]
答案 4 :(得分: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