Pyschools数字序列

时间:2017-03-29 07:14:13

标签: python python-2.7

所以我正在做pyschools主题6问题23:

编写一个函数getNumbers(number),它接受一个数字作为参数,并返回一个数字列表,如下面给出的样本所示。

实施例

>>> getNumbers(10)
[100, 64, 36, 16, 4, 0, 4, 16, 36, 64, 100]
>>> getNumbers(9)
[81, 49, 25, 9, 1, 1, 9, 25, 49, 81]
>>> getNumbers(8)
[64, 36, 16, 4, 0, 4, 16, 36, 64]
>>> getNumbers(0)
[0]

这是我的代码:

def getNumbers(num):
    x = []
    y = []
    if num % 2 == 0:
        x = [i**2 for i in range(0, num+2, 2)]
        y = [i**2 for i in range(0, num+2, 2)]
        z = sorted(x, reverse=True) + y
        if z.count(0) > 1:
            z.remove(0)
            return z
    elif num % 3 == 0:
        x = [i**2 for i in range(1, num+2, 2)]
        y = [i**2 for i in range(1, num+2, 2)]
        return sorted(x, reverse=True) + y
    elif num == 1:
        x.append(num)
        y.append(num)
        return sorted(x, reverse=True) + y

哪个有效,但我没有通过私人测试案例。任何想法为什么? 私有测试用例是由他们制作的,用于查看您是否使用硬编码。

Test Cases       Expected Result                            Returned Result
getNumbers(10)  [100, 64, 36, 16, 4, 0, 4, 16, 36, 64, 100] [100, 64, 36, 16, 4, 0, 4, 16, 36, 64, 100] 
getNumbers(9)   [81, 49, 25, 9, 1, 1, 9, 25, 49, 81]        [81, 49, 25, 9, 1, 1, 9, 25, 49, 81]    
Private Test Cases  Passed                                  Failed  
getNumbers(0)   [0]                                         [0] 
getNumbers(1)   [1, 1]                                      [1, 1]

3 个答案:

答案 0 :(得分:0)

这是最简单的事情:

def getNumbers(num):
    x = -num
    y = list(range(x, num+1, 2))
    return [i**2 for i in y]

getNumbers(10)
[100, 64, 36, 16, 4, 0, 4, 16, 36, 64, 100]

答案 1 :(得分:0)

也请在下面找到一个版本

 def getNumbers(num): 
     n=list(range(num+1))
     num1=[]
     x=num
     for i in n:
      x=num**2
      num1.append(x)
      num-=2
     return num1 

答案 2 :(得分:0)

def getNumbers(num):
    return [i * i for i in range(-num, num + 1, 2)]

数字的平方始终为正。您需要以num + 1结束范围以将数字包括在结果中。范围是可迭代的,因此范围周围的列表是虚假的。