Python更新orderedict类中的随机场选择函数

2024-04-18 09:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行一个脚本来选择一个字符串并更新一个当前字段,但是由于某些原因,在调用Greeting类中的changerandom函数时,代码没有更新最后一个值

...[snip]...
class Greeting(Packet):
    fields = OrderedDict([
         ("Morning",     "Hi"),
         ("Afternoon",   "Good Afternoon!"),
         ("Evening",     "Good Evening!"),
    ])

    def change(self):
        self.fields["Morning"] = "Good morning!"

    def changerandom(self, n = 1): 
        function=[
                    {self.fields["Morning"]: "Hello!"},
                    {self.fields["Morning"]: "Bonjorno!"},
                    {self.fields["Morning"]: "Hola!"},
                 ]
        result = {}
        for i in range(n):
            result.update(choice(function))
            print "Updated string:",result
            return result
text = Greeting()
print text
text.change()
print text
text.changerandom()
print text

我的代码返回以下内容:

Hi
Good morning!
Updated string: {'Good morning!': 'Hola!'}
Good morning!

虽然它应该回来:

Hi
Good morning!
Hola!

我不确定我在这里遗漏了什么,我不明白为什么我不能更新最后一个字段。 任何帮助都将不胜感激


Tags: 代码textselffieldsresulthigreetinggood
1条回答
网友
1楼 · 发布于 2024-04-18 09:45:17

问题是你在return生成一个结果,而不在任何地方赋值

您还可以使用fields,而不是。所以,你的代码应该是

def changerandom(self, n = 1): 
        function=[
                    {"Morning": "Hello!"},
                    {"Morning": "Bonjorno!"},
                    {"Morning": "Hola!"},
                 ]

        for i in range(n):
            result = choice(function)
            self.fields.update(result)
            print "Updated string:",result
            return result

请注意,我们正在使用self.fields.update,并且不再return任何东西

通常情况下,函数和方法返回某个内容或更改某个内容是一种很好的做法,但决不能两者兼而有之

相关问题 更多 >