Python 石头剪子布
我在comp-sci课程上做了一个测试,其中一个问题是制作一个石头剪刀游戏,如果玩家1赢了,它将返回-1,如果玩家2赢了,它将返回1,如果是平局,它将返回0。我做了我的程序并运行了它,它成功了,但据我的教授说,它没有成功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
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你应该回答这个问题,因为你实际上回答了被问到的问题,而不是发布的答案,这些答案给出的代码是有效的(值得赞扬的)行动小组并没有要求你这么做。