我一直在尝试编写一个简单的RPS游戏,用户可以在游戏中对抗计算机。 此时只有1次迭代(因为我卡住了......)并且没有验证用户的输入是否有效。 我遇到的问题是,无论我为了将计算机和用户的分数存储在变量中而尝试做什么,它都保持等于0,无论我尝试什么缩进或者我试图放置返回的地方。 (正如你在下面的代码中看到的那样......我试着没有运气的一些部分被注释掉了)。理想情况下,由于我计划进行多次迭代,我希望变量u和v本身能够更新并保持得分,而不仅仅是打印谁赢得特定迭代。
你能帮我理解我在这里做错了吗?
干杯
from random import randrange
rps = ["r", "p", "s"]
def gameplay(user,comp):
u = 0 #user's score
v = 0 #computer's score
print "Computer chose: " + comp
if comp == user:
pass
elif comp == "r" and user == "p":
u += 1
#print u
#return u
elif comp == "r" and user == "s":
v += 1
#print v
#return v
elif comp == "p" and user == "s":
u += 1
#print u
#return u
elif comp == "p" and user == "r":
v += 1
#print v
#return v
elif comp == "s" and user == "r":
u += 1
#print u
#return u
elif comp == "s" and user == "p":
v += 1
#print v
#return v
return u
return v
gameplay(raw_input("your move?"),rps[randrange(3)])
print u
print v
答案 0 :(得分:3)
只是为了好玩......看看你是否能理解这个OOP实现(开始学习OOP永远不会太早)
WIN,TIE,LOSE = 1,0,-1
class RockPaperScissors:
def __str__(self):
return self.__class__.__name__
class Rock(RockPaperScissors):
def __cmp__(self,other):
if isinstance(other,Rock): return TIE
if isinstance(other,Paper): return LOSE
return WIN
class Paper(RockPaperScissors):
def __cmp__(self,other):
if isinstance(other,Paper): return TIE
if isinstance(other,Scissors):return LOSE
return WIN
class Scissors(RockPaperScissors):
def __cmp__(self,other):
if isinstance(other,Scissors): return TIE
if isinstance(other,Rock):return LOSE
return WIN
def RPS(ltr_code):
return {'r':Rock,'p':Paper,'s':Scissors}[ltr_code.lower()]()
player = RPS("r")
computer = RPS("s")
if player > computer:
print "Player Wins! %s beats %s"%(player,computer)
elif player < computer:
print "Computer wins!! %s beats %s"%(computer,player)
else:
print "Tied!! %s ties %s"%(computer,player)
答案 1 :(得分:1)
您的计划有两个问题:
return (u, v)
u, v = gameplay(...)
。这会将函数返回的u
和v
的值绑定到函数外部的变量u
和v
。变量的名称不必匹配;您也可以使用任何其他名称,例如my_score, cpu_score = gameplay(...)
当这两个被修复时,似乎工作正常。
答案 2 :(得分:1)
每次你在开始时调用“游戏玩法”时你都要设置u,v = 0,0。你需要在方法之外定义分数以使一切正常工作:
from random import randrange
rps = ["r", "p", "s"]
u, v = 0, 0
def gameplay(user,comp,u,v):
print "Computer chose: " + comp
if comp == user:
pass
elif comp == "r" and user == "p":
u += 1
elif comp == "r" and user == "s":
v += 1
elif comp == "p" and user == "s":
u += 1
elif comp == "p" and user == "r":
v += 1
elif comp == "s" and user == "r":
u += 1
elif comp == "s" and user == "p":
v += 1
return u, v
for i in range(4): # 4 Games
u, v = gameplay(raw_input("your move?"),rps[randrange(3)],u,v)
print "User: ", u, " CPU: ",v #Displaying final scores