python - 我怎样才能制作一个循环,以便每次都将点添加到“用户”或“comp”?
问题描述
我正在用python制作一个石头纸剪刀游戏。在其中,用户以及计算机将获得 3 次机会。谁赢得了一轮将获得1
积分。每一轮都会给获胜的一方加一分。
这是代码:
from random import choice
def stone_paper_scissor(): #g = guess
print("Choose either of the following:")
print(" stone, paper, scissor")
for i in range(3):
guess = ("stone", "paper", "scissor")# guess
user_g = input('ENTER YOUR GUESS:')
user_g.lower()
comp_g = choice(guess) #computer"s guess
comp = 0 # computer's score
user = 0 # user's score
#-------------------------------------------------------------------------
# when both parties guess are the same
if comp_g == user_g:
print( "--------------------------------------" )
print( "IT'S A DRAW!" )
print( "--------------------------------------" )
break
#-------------------------------------------------------------------------
# when computer chooses stone(guess[0])
if comp_g == guess[0]:
if user_g == guess[1]:
print( "----------------------------------" )
print( "YOU WIN!" )
print( "----------------------------------" )
print("COMPUTER"+ comp_g)
print("USER"+ user_g)
user += 1
print("USER: %d" %(user))
print("COMPUTER: %d" %(comp))
elif user_g == guess[2]:
print( "----------------------------------" )
print( "YOU LOSE!" )
print( "----------------------------------" )
print("COMPUTER"+ comp_g)
print("USER"+ user_g)
comp += 1
print("USER: %d" %(user))
print("COMPUTER: %d" %(comp))
#-------------------------------------------------------------------------
# when computer chooses paper(guess[1])
if comp_g == guess[1]:
if user_g == guess[0]:
print( "----------------------------------" )
print( "YOU LOSE!" )
print( "----------------------------------" )
print("COMPUTER"+ comp_g)
print("USER"+ user_g)
comp += 1
print("USER: %d" %(user))
print("COMPUTER: %d" %(comp))
elif user_g == guess[2]:
print( "----------------------------------" )
print( "YOU WIN!" )
print( "----------------------------------" )
print("COMPUTER" + comp_g)
print("USER" + user_g)
user += 1
print("USER: %d" %(user))
print("COMPUTER: %d" %(comp))
#---------------------------------------------------------------------------
# when computer chooses scissor (guess[2])
if comp_g == guess[2]:
if user_g == guess[0]:
print( "----------------------------------" )
print( "YOU WIN!" )
print( "----------------------------------" )
print("COMPUTER"+ comp_g)
print("USER"+ user_g)
user += 1
print("USER: %d" %(user))
print("COMPUTER: %d" %(comp))
elif user_g == guess[1]:
print( "----------------------------------" )
print( "YOU LOSE!" )
print( "----------------------------------" )
print("COMPUTER"+ comp_g)
print("USER"+ user_g)
comp += 1
print("USER: %d" %(user))
print("COMPUTER: %d" %(comp))
#--------------------------------------------------------------------------------
print(stone_paper_scissor())
这是我期望的输出:
Choose either of the following:
stone, paper, scissor
ENTER YOUR GUESS:paper
----------------------------------
YOU WIN!
----------------------------------
COMPUTER:stone
USER:paper
USER: 1
COMPUTER: 0
ENTER YOUR GUESS:scissor
----------------------------------
YOU WIN!
----------------------------------
COMPUTER:paper
USER:scissor
USER: 2
COMPUTER: 0
ENTER YOUR GUESS:paper
----------------------------------
YOU LOSE!
----------------------------------
COMPUTER:scissor
USER:paper
USER: 2
COMPUTER: 1
None
Process finished with exit code 0
但我得到的输出不是预期的:
Choose either of the following:
stone, paper, scissor
ENTER YOUR GUESS:paper
----------------------------------
YOU WIN!
----------------------------------
COMPUTER:stone
USER:paper
USER: 1
COMPUTER: 0
ENTER YOUR GUESS:scissor
----------------------------------
YOU WIN!
----------------------------------
COMPUTER:paper
USER:scissor
USER: 1
COMPUTER: 0
ENTER YOUR GUESS:paper
----------------------------------
YOU LOSE!
----------------------------------
COMPUTER:scissor
USER:paper
USER: 0
COMPUTER: 1
None
Process finished with exit code 0
我知道错误背后的原因(我在def()
a 循环下制作整个程序。结果,我得到了意想不到的结果)。我实际上想从社区获得解决方案来解决我的问题。每一个建议都将不胜感激。
谢谢你
(使用的IDE:Pycharm)
解决方案
主要问题是您在循环的每次迭代中重置comp
和。将这些行移到循环开始的上方。其他几点:user
0
for
- 您重复输赢代码六次;您可以创建另一个功能,或者在不同的
if/else
块之后移动它的公共部分 - 或者您可以根据列表中元素的顺序来确定获胜/失败的猜测!
- 您应该检查用户的输入是否有效
- 在“绘制”的情况下,您应该使用
continue
而不是break
- 您可以在函数中添加一个参数来表示要玩的轮数
- 该函数没有
return
任何作用,因此不需要print
结果
这是我的版本:
def stone_paper_scissor(rounds):
guess = ("stone", "paper", "scissors")
comp = 0
user = 0
print("Choose either of the following:")
print(*guess)
for i in range(rounds):
user_g = input('ENTER YOUR GUESS: ').lower()
if user_g not in guess:
print("invalid choice")
continue
comp_g = choice(guess)
if comp_g == user_g:
print( "IT'S A DRAW!" )
elif guess[guess.index(user_g) - 1] == comp_g:
print( "YOU WIN!" )
user += 1
else:
print( "YOU LOSE!" )
comp += 1
print("COMPUTER " + comp_g)
print("USER "+ user_g)
print("USER: %d" %(user))
print("COMPUTER: %d" %(comp))
推荐阅读
- c# - 如何限制 transform.Rotate(float,0,0)?
- visual-studio - 从 Visual Studio 发布 Azure Web App 不会更新网站
- python - 字符串上的Python For循环没有打印任何结果
- node.js - 从 node.js 和 Typescript 中的动态文件名加载 JSON 的最佳方法是什么?
- java - 在Java中解析到OffsetDateTime的字符串
- mysql - “错误号”和“SQLSTATE CODE”有什么区别?
- reactjs - 如何在 DateField redux-form 上设置初始值?
- python - 通过 xpath 通过表中元素的索引号查找元素
- odoo - 如何解决和防止 many2one 字段成为 odoo 中的循环引用问题
- python - SKLEARN 实例方法上的多处理