Exercism: Robot Name (Python)

机器人名字。两个条件:1. 随机命名2个字母加3个数字。2 reset方法重制名字不能重复。

第一个很简单,直接从ascii_uppercase和digits选就可以。
第二个我是用一个set来存之前生成的名字。

看了一些其他的解法,几个其他的方法:

1. digits也可以用randint来做。
        str(random.randint(100, 999))
2. 2个字母加3个数字可以使用choices来做。之前不知道这些方法可以使用k,非常好用。sample 之前没用过,可以返回unique的value, 看上去很好用。
        name += "".join(random.choices(string.ascii_uppercase, k=2))
        name += "".join(random.sample(string.digits, k=3))
3. 有一些人在reset里直接使用random重制seed,来防止重名,是个挺好的方法。


import random
import string

class Robot:
    def __init__(self):
        self.__used_names = set()
        self.name = self.gen_name()
    def reset(self):
        self.__used_names.add(self.name)
        while True:
            new_name = self.gen_name()
            if new_name not in self.__used_names:
                self.name = new_name
                break
    def gen_name(self):
        name: str = ""
        name += "".join(random.choices(string.ascii_uppercase, k=2))
        name += "".join(random.sample(string.digits, k=3))
        return name

评论

此博客中的热门博文

拜厄练习曲44, 45

Exercism: Word Count (Python)

Exercism: Anagram (Python)