亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python f 字符串從消息列表中解釋

Python f 字符串從消息列表中解釋

侃侃無極 2023-03-16 16:03:28
我正在編寫一個示例問候程序。我有一個隨機的問候消息列表,其中包含模板字符串作為名稱。我的代碼如下from random import  randintrandom_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 scopeif __name__ == "__main__":    greet = Greetings()    name = greet.read_input()    greet.print_greeting_rand(name)所以 random_greeting 有名稱為模板字符串的消息列表{name}。print_greeting_rand在我基于隨機索引獲取問候消息并使用 Python F-Strings 打印的函數中,{name}沒有按預期進行解釋。有什么建議嗎?
查看完整描述

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上的表達式演示。



查看完整回答
反對 回復 2023-03-16
?
ITMISS

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))


查看完整回答
反對 回復 2023-03-16
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

你要

print(message.format(name=name))

這同樣適用于 f 弦。

print(f'{message}'.format(name=name))


查看完整回答
反對 回復 2023-03-16
  • 3 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號