获取非负整数数字的数量(Python)



问题要问:

<<背景故事:假设我们正在为新汉堡设计销售点和订单跟踪系统联合的。这是一个小关节,仅售出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

您建议的答案中有几个错误。

  1. else语句和两个return语句应减少一个级别。
  2. 您的测试仪问题表明您应该计算非负整数的数字,而不仅仅是积极的数字(即,您的算法必须在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

相关内容

  • 没有找到相关文章

最新更新