生成三角形数字

时间:2014-06-08 14:15:41

标签: python

该函数应该取一个整数,生成该整数范围内的三角形数列表,检查该列表中最长的数字列表,其总和==数字并将它们返回到列表中,否则如果没有在三角数范围内的这样的列表,返回一个空列表。我以为我有点了,它在python tutor.com上运行,但是当我在IDLE中运行它时,没有任何反应。

def checkio(number):
    x = 4
    lst = [1, 3, 6]
    new = []
    if number == 0:
        return []
    elif number == 1:
        return [1]
    elif number == 3:
        return []
    elif number == 6:
        return []
    elif number == 4:
        return [1, 3]
    elif number == 7:
        return [1, 6]
    elif number == 10:
        return [1, 3, 6]
    elif number > 10:
        while number > lst[-1]: # Generates a list of all the triangular numbers up to number 
            for item in range(lst[-1]):
                lst.append(x + lst[-1]) 
                x += 1
        go = []
        start = 0
        end = 0
        count = 0 
        while count < len(lst) * 2:
            if sum(lst[start:end+1]) < number:
                end += 1
                count += 1 
            elif sum(lst[start:end+1]) > number:
                start += 1
                count += 1 
            elif sum(lst[start:end+1]) == number:
                go.append(lst[start:end+1])
                break
                return go   
        if count >= len(lst) * 2:
            return [] 

2 个答案:

答案 0 :(得分:2)

在您发布的代码中,您只是声明一个函数。要运行它,您必须对该函数进行调用。在你的情况下,它接收一个参数,所以你必须在括号()内传递它:

number = 5 # for example
checkio(number) # this is the function call

答案 1 :(得分:1)

正如Bakuriu评论的那样:如果你想得到一个结果改变这一行的顺序:

        elif sum(lst[start:end+1]) == number:
            go.append(lst[start:end+1])
            break
            return go   

致:

        elif sum(lst[start:end+1]) == number:
            go.append(lst[start:end+1])
            return go   
            break

这将在转义while循环之前返回一个值。正如评论中所述(感谢Andrea Corbellini),你也可以删除break语句,它会很好用。因为按定义返回语句之后会转义函数。

一旦定义(你复制代码并按下返回),也要在空闲状态下运行,按照Christian的说法调用它。 这样你就可以检查是否有效 请注意,您不必在ifelse条款中查看数字2,5,8和9.如果您使用checkio(5)调用此函数,就像Crhistian建议的那样,它将不会返回任何内容因为它没有任何东西可以归还!