我正在尝试用python创建游戏Yahtzee,但我在将点数放入我制作的表格时遇到了麻烦。该表是一个列表,每个项目对应一行。每一项(意思是每一行)都是一个f字符串,它从大括号内的字典中检索值。
在代码的后面,我更新了在行中被调用的值,并打印该行。出于某种原因,字典中的旧值是打印出来的值。
from random import randrange
def roll(saved):
global roll
roll = []
for i in range(5 - len(saved)):
roll.append(str(randrange(1,7)))
global roll_og
roll_og = roll
roll.sort()
print("Avaliable dice : " + ",".join(roll))
def avaliable_points():
#numbers
global roll_og
for i in range(1,7):
if roll_og.count(str(i)) > 0:
points[str(i)] = roll_og.count(str(i)) * i
def print_table(table):
for i in table:
print(i)
saved = []
points = {
"1" : "",
"2" : "",
"3" : "",
"4" : "",
"5" : "",
"6" : ""
}
avaliable_grid = [
" _____________________________ _____________________________",
"| |Player 1|Player 2| | |Player 1|Player 2|",
"|-----------|--------|--------| |-----------|--------|--------|",
f"|Ones |{points[str(1)]}| | |3 of a Kind| | |",
f"|-----------|--------|--------| |-----------|--------|--------|",
f"|Twos |{points[str(2)]}| | |4 of a Kind| | |",
f"|-----------|--------|--------| |-----------|--------|--------|",
f"|Threes |{points[str(3)]}| | |Full House | | |",
f"|-----------|--------|--------| |-----------|--------|--------|",
f"|Fours |{points[str(4)]}| | |S. Straight| | |",
f"|-----------|--------|--------| |-----------|--------|--------|",
f"|Fives |{points[str(5)]}| | |L. Straight| | |",
f"|-----------|--------|--------| |-----------|--------|--------|",
f"|Sixes |{points[str(6)]}| | |Chance | | |",
"|-----------|--------|--------| |-----------|--------|--------|",
"|#############################| |YAHTZEE | | |",
"|-----------|--------|--------| |-----------|--------|--------|",
f"|Sum | | | |#############################|",
"|-----------|--------|--------| |-----------|--------|--------|",
f"|Bonus | | | |TOTAL SCORE| | |",
" ----------------------------- ----------------------------- ",
]
roll(saved)
avaliable_points()
print(points)
print_table(avaliable_grid) 我关心的表是available_grid列表,字典是points字典。代码中的所有其他函数都是决定表中每个槽中有多少点的函数。
Avaliable dice : 1,2,2,4,6
{'1': 1, '2': 4, '3': '', '4': 4, '5': '', '6': 6}
_____________________________ _____________________________
| |Player 1|Player 2| | |Player 1|Player 2|
|-----------|--------|--------| |-----------|--------|--------|
|Ones || | |3 of a Kind| | |
|-----------|--------|--------| |-----------|--------|--------|
|Twos || | |4 of a Kind| | |
|-----------|--------|--------| |-----------|--------|--------|
|Threes || | |Full House | | |
|-----------|--------|--------| |-----------|--------|--------|
|Fours || | |S. Straight| | |
|-----------|--------|--------| |-----------|--------|--------|
|Fives || | |L. Straight| | |
|-----------|--------|--------| |-----------|--------|--------|
|Sixes || | |Chance | | |
|-----------|--------|--------| |-----------|--------|--------|
|#############################| |YAHTZEE | | |
|-----------|--------|--------| |-----------|--------|--------|
|Sum | | | |#############################|
|-----------|--------|--------| |-----------|--------|--------|
|Bonus | | | |TOTAL SCORE| | |
----------------------------- ----------------------------- 我在更改字典后将其打印出来,以便检查它是否确实被更改过。
发布于 2020-05-26 09:10:07
问题是,您期望f字符串在points字典更改时更新,但f字符串在解释时是不变的。看看这个例子:
>>> x = 10
>>> x_string = f"x is {x}"
>>> x_string
'x is 10'
>>> x = 20 # Change the value of x.
>>> x_string
'x is 10'因此,解决问题的一种方法是在print_table()中定义avaliable_grid。
def print_table(points):
available_grid = [ #...
#...
]
for i in available_grid:
print(i)我还建议传入points,这样就不会与全局变量混淆。
顺便说一句,因为您只使用available_grid作为跟踪字符串的一种方法,所以您可以使用块字符串获得相同的结果。
available_grid = f"""
_____________________________ _____________________________
| |Player 1|Player 2| | |Player 1|Player 2|
|-----------|--------|--------| |-----------|--------|--------|
|Ones |{points[str(1)]}| | |3 of a Kind| | |
|-----------|--------|--------| |-----------|--------|--------|
|Twos |{points[str(2)]}| | |4 of a Kind| | |
|-----------|--------|--------| |-----------|--------|--------|
|Threes |{points[str(3)]}| | |Full House | | |
|-----------|--------|--------| |-----------|--------|--------|
|Fours |{points[str(4)]}| | |S. Straight| | |
|-----------|--------|--------| |-----------|--------|--------|
|Fives |{points[str(5)]}| | |L. Straight| | |
|-----------|--------|--------| |-----------|--------|--------|
|Sixes |{points[str(6)]}| | |Chance | | |
|-----------|--------|--------| |-----------|--------|--------|
|#############################| |YAHTZEE | | |
|-----------|--------|--------| |-----------|--------|--------|
|Sum | | | |#############################|
|-----------|--------|--------| |-----------|--------|--------|
|Bonus | | | |TOTAL SCORE| | |
----------------------------- -----------------------------
"""https://stackoverflow.com/questions/62013053
复制相似问题