首页 > 解决方案 > 我怎样才能制作一个循环,以便每次都将点添加到“用户”或“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)

标签: pythonpython-3.x

解决方案


主要问题是您在循环的每次迭代中重置comp和。将这些行移到循环开始的上方。其他几点:user0for

  • 您重复输赢代码六次;您可以创建另一个功能,或者在不同的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))

推荐阅读