Python - 可分性和计数

时间:2014-02-10 23:19:31

标签: python python-3.3

好的,为了清晰起见,编辑很抱歉。

我需要计算1和n之间的数字(我们会说2)的出现次数(用户输入的正数)。这包括每次给定的数字可以进入1到n之间的每个数字。

因此每个数字中的每个实例都有2个,最多为n。因此,10分为10分,加上4分9分,4分8分,3分7分,3分6分,2分5分,2分4分,1分3分,1分2分。剩余无所谓,我只是需要计算2s。

所以输入10的用户应该打印25,如果我的数学是正确的。

我是新人,完全无能为力。

截至目前,我基本上要求用户输入一个数字。

n = int(输入(“输入介于1和1000之间的正数”))

我成功地将我的代码除以9,但这并不是我想要做的。我想我需要将1和n之间的所有内容转换为字符串?那会使用像1:n这样的范围吗?这甚至可能吗?

然后我可以计算一定数量的多少?

谢谢!

1 个答案:

答案 0 :(得分:1)

你的意思是这些吗?

def count(n):
    occurrences = 0
    for i in range(n, 0, -1):  # i -> n, n-1, n-2, ... 3, 2, 1
        occurrences += i//2    # add whole number of 2's in this value of i
    return occurrences

print(count(10))  # 25
print(count(9))   # 20

如果这样做是正确的,可以优化并缩短为:

def count(n):
    return sum(i//2 for i in range(n, 0, -1))

将内置的sum()函数应用于generator expression

range(n, 0, -1)是一个iterator,可以生成从n1向后的所有数字 - 这是我用过的,因为这就是你描述你想要的内容。由于按顺序执行并不重要,因此使用range(1, n+1)生成序列的升序(1, 2, 3, ... n-2, n-1, n)可能更好(更简单)。