堆栈溢出
感谢您提供了漂亮的类型注释(以及分数
和最后一轮
):
定义请求有效输入(…:str,…:list[str],…:int):...user_input=输入(消息).strip()...当user_input不在允许的值中时:...请求有效输入(最大值=最大值)
不,请不要这样重复。存在堆栈溢出的风险:
RecursionError:超出最大递归深度
此外,你甚至没有分配user_input=请求有效输入(…)
这个虽然
循环允许您不断提示有效输入,而不需要将任何东西推送到调用堆栈上。
请随意对返回的值进行注释:定义…)->字符串:
有意义的标识符
在分数
,我猜测那个第页
可能是一个好的标识符?当然,它很简洁。
但它需要一个解释#
评论,因为它写得过于简洁和晦涩。也许你脑子里有“蟒蛇”,许多开发人员会在哪里谈论“计算机得分”?如果这是一个C或rust程序,最终用户不太可能想到分数就“C分数”或“锈蚀分数”而言。
小小的小毛病:RPS“docstring”通常拼写为“docstring”,没什么大不了的。就让“$黑色*.py“帮你整理一下,还有其他一些细节。我们将期望看到表达式的单引号,其中包括双引号,因为这样可以避免\
反击逃脱。
印刷品(“正是这样,”爱丽丝说。“那么你应该说出你的意思,”三月兔继续说道
无用常量属性
这使得每个RPS对象都更加复杂,而且没有任何好处:
self.welcome=欢迎
要么带上模块级别欢迎
在课堂上拉下绳子,或者仅仅依赖于对它的全球引用。这并不是说我们要在每个人的基础上改变它。
枚举
就目前而言,这很好:
self.letter_mapping={“r”:“ROCK”,“s”:“SCISSORS”,“p”:“PAPER”}
但感觉真的像枚举这就是我们想要的。
请注意,您可以安排.值
如果需要,将每个枚举项的值设置为单个小写字母。
此外,我们似乎已经复制了其中的一些['r'、's'、p'、q']
和['r','s','p']
出现的次数比期望的要多。这似乎是我们应该能够做到的干燥向上的只要一点点努力。
这是一个思维实验。如果UI突然要求我们处理
Chi、Fou、Mi或
Ro、Sham、Bo或
简、肯、彭?你想去几个地方那些词的重复实例?避免重复并不重要;我们把它称为一个好习惯。
让我们不要即使谈论岩石、纸、剪刀、蜥蜴、斯波克。
复制返回类型
这个签名很可爱:
def report_result(self)->无:'''打印。。。退货:无
“返回:”备注与签名重复,所以你可能更喜欢省略它。
更糟糕的是,几个月后你可能会开始返回一些整数分数,和梅比会注意到麻烦但没有任何自动化工具会标记不一致的“退货:”备注。
多余的父母
while(keep_going==“y”):
这不是C或java,我们不需要(
)
在那里修剪。如上所述,运行黑色
基于此代码库会把它整理一下。
额外标志
first_try=真而keep_going==“y”:msg=game.welcome if first_try else“键入您的新…”
这当然有效,你可以保持原样。
有时,引入这样的旗帜正是正确的做法。但在这里,最初分配就足够了msg=游戏欢迎
,然后在循环的底部无条件地重新分配“键入您的新…”在现有基础上消息
.