您建议的答案中有几个错误。
else
语句和两个语句的return
缩进应该少一级。
- 您的测试问题表明您应该计算非负整数的数字,而不仅仅是正整数(即您的算法必须在 0 上工作)。
这是我根据您的建议和任务标准提出的替代方案。
def order_size(order):
# Fill in your code here
if order >= 0:
size = 0
while order > 0:
size += 1
order = order // 10
return size
else:
return 0
请注意
通过在条件中使用包含不等式if
,我允许 0 进入 while 循环,就像任何其他非负个位数一样。
通过将第一return
条语句推回,它在while 循环之后执行。因此,在订单被计入变量size之后,它就会被返回。
通过else:
向后推,即使if
条件不满足(即当传递给 order_size(n) 的数字为负数时),它也会执行。
通过将第二个推return
回去,它在语法上是正确的,并且else
应该包含在块中。
现在已经解决了,让我来解决这个问题:
但我没有收到订单// 10 份。
从 Python 3 开始,这//
是一个地板除法(又名整数除法)二元运算。
它有效地执行标准除法,然后向下舍入(向负无穷大)到最接近的整数。
这里有一些例子可以帮助你。特别注意最后一个。
10 // 2 # Returns 5 since 10/2 = 5, rounded down is 5
2 // 2 # Returns 1 since 2/2 = 1, rounded down is 1
11 // 2 # Returns 5 since 11/2 = 5.5, rounded down is 5
4 // 10 # Returns 0 since 4/10 = 0.4, rounded down is 0
(-4) // 10 # Returns -1 since (-4)/10 = -0.4, rounded down is -1
对于非负分子 n,n // d
可以看作是d 适合 n whole的次数。
所以对于像 n = 1042 这样的数字,n // 10
会给你多少整数乘以 10 适合 1042。
这是 104(因为 1042/10 = 104.2,四舍五入我们有 104)。注意到我们是如何有效地敲掉一个数字的吗?
让我们看看你的while
循环。
while order > 0:
size += 1
order = order // 10
每次一个数字被“敲掉”订单时,大小计数器都会增加,从而计算在你到达终止步骤之前你可以敲掉多少个数字。
当您敲击最后一个(单个)数字时会发生终止。例如,假设您将订单减少到 1(从 1042),然后1 // 10
返回 0。
因此,一旦所有数字都被“敲掉”并计数,您的订单将具有 0 值。while 循环将终止,并且您的尺寸计数器将被返回。
希望这可以帮助!
免责声明:也许这不是您想听到的,但许多大学认为从 Internet 复制代码并将其作为您自己的代码冒充是剽窃。