为什么 Walrus Operator 在此函数的 return 语句中实现时不起作用?
Why is the Walrus Operator not working when implemented inside the return statement of this function?
当我想到在 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)
要使用海象运算符,您应该将其放在 if
条件为:
的位置
def digital_root(n):
return w if (w := sum(int(x) for x in str(n))) < 10 else digital_root(w)
这基本上是一个较短的版本:
def digital_root(n):
if (w := sum(int(x) for x in str(n))) < 10:
return w
else:
return digital_root(w)
您过于关注“短”代码而没有意识到自己在做出愚蠢的决定。 str
-int
-sum
歌舞全无意义 n < 10
-
def digital_root(n):
if n < 10:
return n
else:
return digital_root(sum(int(x) for x in str(n)))
要“缩短”它,您可以使用 conditional expression -
def digital_root(n):
return n if n < 10 else digital_root(sum(int(x) for x in str(n)))
但是看看如何将数字转换为字符串并立即使用 int
返回?我知道您这样做是为了利用字符串的可迭代 属性,但是您可以为数字编写一个简单的迭代器并完全跳过类型转换 -
def digits(n):
yield n % 10
if n >= 10: yield from digits(n // 10)
def digital_root(n):
return n if n < 10 else digital_root(sum(digits(n)))
这样做的好处是显而易见的。 digital_root
不仅更容易编写,而且您还有一个有用的 digits
函数,它在任何其他需要这种数字功能的程序中都很有用。
print(digital_root(16))
print(digital_root(493193))
print(digital_root(942))
7
2
6
当我想到在 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)
要使用海象运算符,您应该将其放在 if
条件为:
def digital_root(n):
return w if (w := sum(int(x) for x in str(n))) < 10 else digital_root(w)
这基本上是一个较短的版本:
def digital_root(n):
if (w := sum(int(x) for x in str(n))) < 10:
return w
else:
return digital_root(w)
您过于关注“短”代码而没有意识到自己在做出愚蠢的决定。 str
-int
-sum
歌舞全无意义 n < 10
-
def digital_root(n):
if n < 10:
return n
else:
return digital_root(sum(int(x) for x in str(n)))
要“缩短”它,您可以使用 conditional expression -
def digital_root(n):
return n if n < 10 else digital_root(sum(int(x) for x in str(n)))
但是看看如何将数字转换为字符串并立即使用 int
返回?我知道您这样做是为了利用字符串的可迭代 属性,但是您可以为数字编写一个简单的迭代器并完全跳过类型转换 -
def digits(n):
yield n % 10
if n >= 10: yield from digits(n // 10)
def digital_root(n):
return n if n < 10 else digital_root(sum(digits(n)))
这样做的好处是显而易见的。 digital_root
不仅更容易编写,而且您还有一个有用的 digits
函数,它在任何其他需要这种数字功能的程序中都很有用。
print(digital_root(16))
print(digital_root(493193))
print(digital_root(942))
7
2
6