提问人:Cameron Lopez 提问时间:7/29/2023 更新时间:7/29/2023 访问量:28
为什么我的分数没有更新?它只是将两个分数都显示为 0
Why is my score not updating? It just keeps displaying both scores as 0
问:
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 循环中,将其排除在函数之外。我不知道还能做什么
答:
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 = ...
print
print_scoreboard
评论
scoreboard