抛硬币得分停留在零
Coin toss score stuck at zero
绝对初学者,尝试制作一个简单的掷硬币游戏来练习我读过的前几章。我试图在游戏中添加一个记分板,但分数一直停留在 0 到 0。还有任何其他提示也将不胜感激。我不认识任何编程的人,所以我可以使用建议。
"""This will be an attempt to create a simple
coin toss game in which the player chooses heads or
tails and a random generator will pick one from a list
of either heads or tails and return whether or not
the player chose correctly. I also hope to
create a scoreboard"""
from random import randint
coin = ['heads' , 'tails']
side = coin[0]
guess = 'heads'
token = int(raw_input('how many games?'))
wins = 0
losses = 0
def getinfo(token):
guess = raw_input('Heads or Tails?')
def flipcoin(guess, side, wins, losses):
side = coin[randint(0,1)]
print 'You Chose: %s' %(guess)
print 'Coin Is: %s' %(side)
if guess == side:
print 'you win'
wins = wins + 1
else:
print 'you lose'
losses = losses + 1
def main(token):
while token > 0:
getinfo(token)
flipcoin(guess, side, wins, losses)
if wins > losses:
print "You are winning %s to %d" %(wins , losses)
elif wins == losses:
print "You are tied %s to %d" %(wins , losses)
else:
print "You are losing %s to %d" %(losses, wins)
token -= 1
print '%d games left' %(token)
print 'wins: %s' %(wins)
print 'losses: %s' %(losses)
main(token)
您的 "guess, side, wins, losses" 变量是全局变量,因此您不应将它们传递给 "flipcoin" 函数。这样做会创建具有相同名称的新局部变量,并且永远不会更新全局变量。
如果您更改这些行,它似乎有效:
def flipcoin():
global wins, losses
side = coin[randint(0,1)]
print 'You Chose: %s' %(guess)
print 'Coin Is: %s' %(side)
if guess == side:
print 'you win'
wins = wins + 1
else:
print 'you lose'
losses = losses + 1
def main(token):
while token > 0:
getinfo(token)
flipcoin()
您的问题是变量在 "module scope" 处在函数外部声明,然后您尝试从函数内部修改它们。
函数正在创建自己的局部变量,而不是修改模块范围的变量。
解决该问题的一种方法是为变量添加 global
声明。
Use of "global" keyword in Python
另一种可能更好的方法是将变量放在 class 中,如下所示:
class GameState(object):
def __init__(self):
self.wins = 0
self.losses = 0
state = GameState()
# later, in code:
state.wins += 1 # for a win
全局变量使程序变得混乱且难以理解。您可以通过将它们放在一起 class 来改进程序。您可以通过显式连接来进一步改进程序:将参数添加到您传入 class 实例以供函数修改的函数,而不是在模块级别拥有一个实例。
其他答案建议将变量移至 main()
。这也是一种有效的方法,尤其是对于像这样的小而简单的程序。我偏爱将所有变量打包到一个 class 中,这源于我的小程序随着时间的推移成长为大程序的经验。如果将相关的东西放在一起,则可以更轻松地扩展程序。但是对于这个程序,只要将变量放入main()
就可以了。
如前所述,您应该在函数中返回。限制全局变量的使用。
"""This will be an attempt to create a simple
coin toss game in which the player chooses heads or
tails and a random generator will pick one from a list
of either heads or tails and return whether or not
the player chose correctly. I also hope to
create a scoreboard"""
from random import randint
coin = ['heads' , 'tails']
def getinfo(token):
return raw_input('Heads or Tails?')
def flipcoin(guess, side, wins, losses):
side = coin[randint(0,1)]
print 'You Chose: %s' %(guess)
print 'Coin Is: %s' %(side)
if guess == side:
print 'you win'
wins = wins + 1
else:
print 'you lose'
losses = losses + 1
return side, wins, losses
def main():
token = int(raw_input('how many games?'))
wins = 0
losses = 0
side = coin[0]
guess = 'heads'
while token > 0:
guess = getinfo(token)
side, wins, losses = flipcoin(guess, side, wins, losses)
if wins > losses:
print "You are winning %s to %d" %(wins , losses)
elif wins == losses:
print "You are tied %s to %d" %(wins , losses)
else:
print "You are losing %s to %d" %(losses, wins)
token -= 1
print '%d games left' %(token)
print 'wins: %s' %(wins)
print 'losses: %s' %(losses)
if __name__ == '__main__':
main()
绝对初学者,尝试制作一个简单的掷硬币游戏来练习我读过的前几章。我试图在游戏中添加一个记分板,但分数一直停留在 0 到 0。还有任何其他提示也将不胜感激。我不认识任何编程的人,所以我可以使用建议。
"""This will be an attempt to create a simple
coin toss game in which the player chooses heads or
tails and a random generator will pick one from a list
of either heads or tails and return whether or not
the player chose correctly. I also hope to
create a scoreboard"""
from random import randint
coin = ['heads' , 'tails']
side = coin[0]
guess = 'heads'
token = int(raw_input('how many games?'))
wins = 0
losses = 0
def getinfo(token):
guess = raw_input('Heads or Tails?')
def flipcoin(guess, side, wins, losses):
side = coin[randint(0,1)]
print 'You Chose: %s' %(guess)
print 'Coin Is: %s' %(side)
if guess == side:
print 'you win'
wins = wins + 1
else:
print 'you lose'
losses = losses + 1
def main(token):
while token > 0:
getinfo(token)
flipcoin(guess, side, wins, losses)
if wins > losses:
print "You are winning %s to %d" %(wins , losses)
elif wins == losses:
print "You are tied %s to %d" %(wins , losses)
else:
print "You are losing %s to %d" %(losses, wins)
token -= 1
print '%d games left' %(token)
print 'wins: %s' %(wins)
print 'losses: %s' %(losses)
main(token)
您的 "guess, side, wins, losses" 变量是全局变量,因此您不应将它们传递给 "flipcoin" 函数。这样做会创建具有相同名称的新局部变量,并且永远不会更新全局变量。
如果您更改这些行,它似乎有效:
def flipcoin():
global wins, losses
side = coin[randint(0,1)]
print 'You Chose: %s' %(guess)
print 'Coin Is: %s' %(side)
if guess == side:
print 'you win'
wins = wins + 1
else:
print 'you lose'
losses = losses + 1
def main(token):
while token > 0:
getinfo(token)
flipcoin()
您的问题是变量在 "module scope" 处在函数外部声明,然后您尝试从函数内部修改它们。
函数正在创建自己的局部变量,而不是修改模块范围的变量。
解决该问题的一种方法是为变量添加 global
声明。
Use of "global" keyword in Python
另一种可能更好的方法是将变量放在 class 中,如下所示:
class GameState(object):
def __init__(self):
self.wins = 0
self.losses = 0
state = GameState()
# later, in code:
state.wins += 1 # for a win
全局变量使程序变得混乱且难以理解。您可以通过将它们放在一起 class 来改进程序。您可以通过显式连接来进一步改进程序:将参数添加到您传入 class 实例以供函数修改的函数,而不是在模块级别拥有一个实例。
其他答案建议将变量移至 main()
。这也是一种有效的方法,尤其是对于像这样的小而简单的程序。我偏爱将所有变量打包到一个 class 中,这源于我的小程序随着时间的推移成长为大程序的经验。如果将相关的东西放在一起,则可以更轻松地扩展程序。但是对于这个程序,只要将变量放入main()
就可以了。
如前所述,您应该在函数中返回。限制全局变量的使用。
"""This will be an attempt to create a simple
coin toss game in which the player chooses heads or
tails and a random generator will pick one from a list
of either heads or tails and return whether or not
the player chose correctly. I also hope to
create a scoreboard"""
from random import randint
coin = ['heads' , 'tails']
def getinfo(token):
return raw_input('Heads or Tails?')
def flipcoin(guess, side, wins, losses):
side = coin[randint(0,1)]
print 'You Chose: %s' %(guess)
print 'Coin Is: %s' %(side)
if guess == side:
print 'you win'
wins = wins + 1
else:
print 'you lose'
losses = losses + 1
return side, wins, losses
def main():
token = int(raw_input('how many games?'))
wins = 0
losses = 0
side = coin[0]
guess = 'heads'
while token > 0:
guess = getinfo(token)
side, wins, losses = flipcoin(guess, side, wins, losses)
if wins > losses:
print "You are winning %s to %d" %(wins , losses)
elif wins == losses:
print "You are tied %s to %d" %(wins , losses)
else:
print "You are losing %s to %d" %(losses, wins)
token -= 1
print '%d games left' %(token)
print 'wins: %s' %(wins)
print 'losses: %s' %(losses)
if __name__ == '__main__':
main()