首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >F字符串在列表中不更新

F字符串在列表中不更新
EN

Stack Overflow用户
提问于 2020-05-26 09:01:12
回答 1查看 84关注 0票数 1

我正在尝试用python创建游戏Yahtzee,但我在将点数放入我制作的表格时遇到了麻烦。该表是一个列表,每个项目对应一行。每一项(意思是每一行)都是一个f字符串,它从大括号内的字典中检索值。

在代码的后面,我更新了在行中被调用的值,并打印该行。出于某种原因,字典中的旧值是打印出来的值。

代码语言:javascript
复制
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字典。代码中的所有其他函数都是决定表中每个槽中有多少点的函数。

代码语言:javascript
复制
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|        |        |
 -----------------------------          ----------------------------- 

我在更改字典后将其打印出来,以便检查它是否确实被更改过。

EN

回答 1

Stack Overflow用户

发布于 2020-05-26 09:10:07

问题是,您期望f字符串在points字典更改时更新,但f字符串在解释时是不变的。看看这个例子:

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
def print_table(points):
    available_grid = [ #...
                       #...
        ]
    for i in available_grid:
        print(i)

我还建议传入points,这样就不会与全局变量混淆。

顺便说一句,因为您只使用available_grid作为跟踪字符串的一种方法,所以您可以使用块字符串获得相同的结果。

代码语言:javascript
复制
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|        |        |
 -----------------------------          -----------------------------
"""
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62013053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档