为什么我的分数没有更新?它只是将两个分数都显示为 0

Why is my score not updating? It just keeps displaying both scores as 0

提问人:Cameron Lopez 提问时间:7/29/2023 更新时间:7/29/2023 访问量:28

问:

import random
def rps():
    user_score = 0 
    comp_score = 0
    scoreboard = f'You: {user_score} \nComp: {comp_score}'
    while user_score < 3 or comp_score < 3:
        choice = ['r', 'p', 's']
        user = input('Choose [r] [p] or [s]: ')
        user = user.lower()
        comp = random.choice(choice)
        outcome = f"You chose {user} and I chose {comp}"
        if user == comp:
            print(scoreboard)
            print(outcome)
            print('Tie Game')
        elif user == 'r' and comp == choice[2] or user == 'p' and comp == choice[0] or user == 's' and comp == choice[1]:
            user_score += 1
            print(scoreboard)
            print(outcome, '\nYou win!')
        else:
            comp_score += 1 
            print(scoreboard)
            print(outcome, '\nI win')
    print(scoreboard)

我试过将分数和记分牌放在 while 循环中,将其排除在函数之外。我不知道还能做什么

python-3.x 函数 while-loop

评论

1赞 DallogFheir 7/29/2023
你从不更新。scoreboard

答:

0赞 Christopher Solanilla 7/29/2023 #1

分数不会更新,因为记分牌是在函数中定义的。有很多方法可以解决这个问题,一种方法是定义你自己的函数来更新记分牌,如下所示:

import random

def updateScoreBoard(userScore, cpuScore):
    scoreboard= f'You: {userScore} \nComp: {cpuScore} '
    print(f'You: {userScore} \nComp: {cpuScore}')
    #print(f'testing the value of userScore: {userScore}')
    #print(f'testing the value of cpuScore: {cpuScore}')
    
def rps():
    user_score = 0 
    comp_score = 0
    scoreboard = f'You: {user_score} \nComp: {comp_score}'
    while user_score < 3 and comp_score < 3:
        choice = ['r', 'p', 's']
        user = input('Choose [r] [p] or [s]: ')
        user = user.lower()
        comp = random.choice(choice)
        outcome = f"You chose {user} and I chose {comp}"
        if user == comp:
            #print(scoreboard)
            print(outcome)
            print('Tie Game')
            updateScoreBoard(user_score,comp_score)
            
        elif user == 'r' and comp == choice[2] or user == 'p' and comp == choice[0] or user == 's' and comp == choice[1]:
            user_score += 1
            #print(scoreboard)
            print(outcome, '\nYou win!')
            updateScoreBoard(user_score,comp_score)
            
        else:
            comp_score += 1 
            #print(scoreboard)
            print(outcome, '\nI win')
            updateScoreBoard(user_score,comp_score)
            
    print(scoreboard)
    
rps()

就我个人而言,我会将记分牌、user_score 和 comp_score 等变量全部放在 def 之外,然后将变量传递到您的函数中。但是,我提供的示例适用于您编写的样式。

0赞 VANN Universal 7/29/2023 #2

在代码中,设置为 in the beginning。当包含的变量发生更改时,它不会自动更新。要更新 ,您应该在循环中移动 F-String(并且仅移动 F-String):scoreboard'You: 0 \nComp: 0'scoreboard

import random
def rps():
    user_score = 0 
    comp_score = 0
    while user_score < 3 or comp_score < 3:
        choice = ['r', 'p', 's']
        user = input('Choose [r] [p] or [s]: ')
        user = user.lower()
        comp = random.choice(choice)
        outcome = f"You chose {user} and I chose {comp}"
        if user == comp:
            print(outcome, 'Tie Game')
        elif user == 'r' and comp == choice[2] or user == 'p' and comp == choice[0] or user == 's' and comp == choice[1]:
            user_score += 1
            print(outcome, '\nYou win!')
        else:
            comp_score += 1 
            print(outcome, '\nI win')
        scoreboard = f'You: {user_score} \nComp: {comp_score}'
        print(scoreboard)
    print(scoreboard)

这略微改变了打印的顺序,因为我想避免复制 F 弦。您可以将 and 放入一个函数中,例如并调用它来恢复打印的顺序。scoreboard = ...printprint_scoreboard