当我想到在return语句中实现操作符时,我正试图解决这个问题。问题是:
数字根是数字中所有数字的递归和。给定n,取n的数字之和。如果该值有多个数字,则继续以这种方式减少,直到生成一个数字。输入将是一个非负整数。示例:
16 --> 1 + 6 = 7
493193 --> 4 + 9 + 3 + 1 + 9 + 3 = 29 --> 2 + 9 = 11 --> 1 + 1 = 2
942 --> 9 + 4 + 2 = 15 --> 1 + 5 = 6
代码:
def digital_root(n):
return w:=sum(int(x) for x in str(n)) if w<10 else digital_root(w)
2条答案
按热度按时间plicqrtu1#
要使用walrus操作符,应将其放在
if
条件是:这基本上是一个简短的版本:
kdfy810k2#
你太专注于“简短”的代码,以至于没有意识到你在做愚蠢的决定。整件事都做没有意义
str
-int
-sum
歌舞n < 10
-要“缩短”这个时间,可以使用条件表达式-
但看看如何将数字转换为字符串,然后立即使用
int
? 我知道您这样做是为了利用字符串的iterable属性,但是您可以为数字编写一个简单的迭代器,并完全跳过类型转换-这样做的好处是显而易见的。不仅是
digital_root
更容易写,但你也有一个有用的digits
在需要此数字功能的任何其他程序中有用的函数。