请帮我修复这个trinumber代码

时间:2014-05-05 18:33:43

标签: python

当用户输入数字时,该代码应该在表中输出许多trinumber。示例:用户输入4作为a,表运行在trinumber定义中运行n的所有变量1-4的公式,并将其输出到表中。当我运行它时,程序说它没有定义。

def TriNumber(n):
    t == ((n(n+1))/2) #trinumber formula
    return t

a = int(input("please input a number")) #user input for number of trinumbers to output
num = 1

for num in range(a):
    TriNumber(num)
    print(" n" "\t""\t""Tri Number")
    print("***""\t""\t""   *****")
    print(num, "\t""\t",(TriNumber(num)))
    num = num + 1

2 个答案:

答案 0 :(得分:1)

如果TriNumber等于公式,则t的第一行是请求,而不是将其值分配给t

另请注意,您可以只返回表达式;你根本不需要t

答案 1 :(得分:0)

我在这里看到几个问题:

  1. 当您想要为==分配值时,您正在使用双等号(t)。您应该使用单个等号(=)代替。或者,更好的是,将功能简化为:

    def triNumber(n):
        return (n(n+1))/2  # (sic; see #2)
    
  2. 我不认为公式的(n(n+1))部分正在按照您的意愿行事。我对trinumbers一无所知,但我猜你想要" n次(n加1)"?如果是这样,请确保使用*运算符。我认为(n * (n + 1)) / 2就是你想要的。 (否则,n(n+1)表示"调用n上的函数n + 1,"这将失败,因为您还没有定义名为{{1}的函数}。)

  3. 从实际的角度来看,n循环的第一行for实际上正在做任何事情。看起来你实际上要做的是打印一个从1到用户指定数字的trinumber值表。因此,程序的一般结构将是包含TriNumber(num)语句的for循环。

  4. 由于您在print个数字上使用for循环,因此您不需要每次都手动增加range。同样,您不需要在num循环之前指定num = 1。重要的是要注意,当你使用for时,默认的起点是0,而不是1.所以,如果你真的想要一个范围"从1到a,"那么你想要range

  5. 您对range(1, a)的使用有点不稳定,因为您在一个人可以使用的地方使用多个字符串。例如,print应为print("***""\t""\t"" *****")

  6. 我会从print("***\t\t *****")循环中取出前两个print语句,因为它们似乎是标题,所以我猜你只想让它们打印一次

  7. 函数名称通常以Python中的小写字母开头。

  8. 要打印数字,您必须先将它们转换为字符串,例如for

  9. 以下是我修改代码的方法:

    str(num)

    希望有所帮助!

    编辑:格式化最后一行的更好方法是:

    def triNumber(n):
        return (n * (n + 1)) / 2 #trinumber formula
    
    a = int(input("please input a number")) #user input for number of trinumbers to output
    
    print(" n\t\tTri Number")
    print("***\t\t   *****")
    
    for num in range(1, a):
        print(str(num) + "\t\t" + str(triNumber(num)))
    

    print("%d\t\t%d" % (num, triNumber(num))) 分别由%dnum的字符串版本替换。