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
评论
发表评论