你建议的答案有几个错误。应该将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块中。
现在,让我来解决这个问题:But I don't get the order // 10 portion.
As of 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整体的次数。
因此,对于n=1042这样的数字,n // 10将给出1042中有多少整数乘以10。
这是104(因为1042/10=104.2,四舍五入我们有104)。
注意我们是如何有效地删除一个数字的?
让我们看看您的while循环。while order > 0:
size += 1
order = order // 10
每次“敲掉”一个数字时,顺序的大小计数器都会递增,因此在您进入终止步骤之前,您可以敲掉多少个数字。
当你敲出最后一个(单个)数字时就会终止。例如,假设您将顺序减少到1(从1042),然后1 // 10返回0。
因此,一旦所有的数字都被“删除”并计数,您的顺序的值将为0。while循环将终止,并返回size计数器。
希望这有帮助!
免责声明:也许这不是你想听到的,但许多大学认为从互联网上复制代码并将其作为自己的代码来传播是抄袭。