3 回答

TA貢獻1942條經驗 獲得超3個贊
您可以利用一個簡單的正則表達式和**kwargs:
import random, re
class Greetings(object):
greetings = [
"Hello {name}, Hope you are doing well {when}",
"Hello {name}, Hope you are having a great day",
"Hello {name}, Nice to meet you"
]
rx = re.compile(r'{([^{}]+)}')
vars = {}
def read_input(self):
return input("What is your name? ")
def print_greeting_rand(self, **kwargs):
self.vars = kwargs
tmpl = self.rx.sub(self.__replace__, random.choice(self.greetings))
print(tmpl)
def __replace__(self, m):
var = m.group(1)
if var in self.vars:
return self.vars[var]
return m.group(0)
if __name__ == "__main__":
greet = Greetings()
greet.print_greeting_rand(name=greet.read_input(), when="today")
解釋:
這將掃描字符串以查找形式為{+ variable_name +的任何變量},并在在參數中找到它時替換它**kwargs。如果沒有找到,它就簡單地返回{variable_name},即保持原樣。
請參閱regex101.com上的表達式演示。

TA貢獻1871條經驗 獲得超8個贊
不幸的是,對于 f-strings 你不能這樣做,因為它們會立即被評估,所以你可以做的是使用:
from random import choice
random_greeting = [
"Hello {name}, Hope you are doing well",
"Hello {name}, Hope you are having a great day",
"Hello {name}, Nice to meet you"
]
def print_greeting_rand(self, name):
message = choice(random_greeting)
print(message.format(name=name))

TA貢獻1846條經驗 獲得超7個贊
你要
print(message.format(name=name))
這同樣適用于 f 弦。
print(f'{message}'.format(name=name))
添加回答
舉報