【发布时间】:2020-11-08 08:33:38
【问题描述】:
我正在编写一个示例问候程序。我有一个以模板字符串为名称的随机问候消息列表。
我的代码如下
from random import randint
random_greeting = [
"Hello {name}, Hope you are doing well",
"Hello {name}, Hope you are having a great day",
"Hello {name}, Nice to meet you"
]
class Greetings(object):
global random_greeting
def read_input(self):
return input("What is your name? ")
def print_greeting_rand(self, name):
greet_length = len(random_greeting)
random_int = randint(0, greet_length-1)
message = random_greeting[random_int]
print(f"{message}") # Here {name} not coming into scope
if __name__ == "__main__":
greet = Greetings()
name = greet.read_input()
greet.print_greeting_rand(name)
因此,random_greeting 具有名称为模板字符串{name} 的消息列表。在 print_greeting_rand 函数中,我基于随机索引获取问候消息并使用 Python F-Strings 进行打印,{name} 未按预期进行解释。
有什么建议吗?
【问题讨论】:
-
我不认为你可以用 f 字符串来做到这一点(除非可能有一些讨厌的
evalhack)。你可以做message.format(name=name) -
@alaniwi,是的,您能否添加有关
evalhack 的更多信息。请。谢谢。 -
@wjandrea,是的,我想我可以使用这种方法。
-
@rɑːdʒɑ re
eval,有人在 wjandrea 链接的页面上发布了对此效果的答案。但不推荐。 -
@Jan 我的意思是,在运行时按名称获取变量不可避免地会很麻烦。因此,毫无疑问,您在答案中使用
kwargs字典的原因。