问题要问:
<<背景故事:假设我们正在为新汉堡设计销售点和订单跟踪系统联合的。这是一个小关节,仅售出4个用于连击的选项:经典单曲组合(汉堡包和一个帕蒂),经典双重奶酪组合(2个馅饼),和经典三重与奶酪组合(3个馅饼),前卫四倍鳄梨调味酱组合(4个馅饼)。我们将这些连击编码为1、2、3和4分别。每顿饭都可以是大小的,以获取更大的薯条和喝。一个大小的组合分别由5、6、7和8代表组合1、2、3和4。>>
编写一个称为order_size的迭代函数,该函数采用顺序并返回顺序中的连击数。例如,order_size(237) -> 3。
我应该有
order_size(0) = 0
order_size(6) = 1
order_size(51) = 2
order_size(682) = 3
我的代码是:
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
,但我没有得到订单//10部分。我猜这是错误的,但我想不出任何东西可以代替。
不需要迭代函数,您可以通过"将"它变成字符串来测量数字的长度:
num = 127
order = len(str(num))
print(order) # prints 3
但是,如果您真的想迭代地进行:
def order(num):
res = 0
while num > 0:
num = int(num / 10)
res += 1
return res
print(order(127)) # prints 3
怎么样:
from math import log
def order_size(order):
if order <= 0: return 0
return int(log(order, 10) + 1)
一些样本(左列顺序,右列订单大小):
0 0
5 1
10 2
15 2
20 2
100 3
893 3
10232 5
您建议的答案中有几个错误。
-
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进入WALE循环,就像我将任何其他非负单位数字一样。通过将第一个
return
语句向后推,它在while循环后执行。因此,在变量 size 中计数订单后,它将返回。通过向后推
else:
,它在if
条件下执行(即,当传递给order_size(n)的数字为负)。通过将第二个
return
向后推,它在句法上是正确的,并且包含在else
块中。
现在已经解决了,让我解决这个问题:
,但我没有订单//10部分。
从Python 3开始,//
是A flober Division (又称Integer Division )二进制操作。
它有效地执行标准部门,然后回合 down (朝向负无穷大)到最近的整数。
这里有一些可以帮助您的示例。特别注意最后一个。
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 Time d Time dips n 全全部 。
因此,对于n = 1042之类的数字, n // 10
会给你几个全部 10次拟合1042。
这是104(自1042/10 = 104.2以来,我们有104)。请注意,我们如何有效地敲除了数字?
让我们看看您的while
循环。
while order > 0:
size += 1
order = order // 10
每当数字被"击倒" order 时, size 计数器就会增加,从而计算在达到终止步骤之前,您可以敲出多少位数字。
当您敲击最终(单个)数字时,就会发生终止。例如,假设您将顺序减少到1(从1042),然后1 // 10
返回0。
因此,一旦所有数字都被"击倒"并计算,您的 order order 的值将为0。while循环将终止,您的 size size counter counter将退还。
希望这会有所帮助!
免责声明:也许这不是您想听到的,但是许多大学都考虑从互联网复制代码,并将其作为您自己的代码将其传递给 plagiarism 。