编写一个打印金字塔的函数 - 两个参数

时间:2015-10-20 21:36:51

标签: python

我正在研究这个问题,内容如下:

问题:编写一个在屏幕上绘制金字塔的功能。该函数需要两个参数。首先是金字塔的高度。第二个参数是可选的:如果没有提供,则符号"#"应该用来绘制金字塔。否则,如果用户输入" *"例如,金字塔应由星号组成。

尝试:我写了这个程序:

def main():
    h = int(input("Please enter the height of the pyramid: "))
    symbol = str(input("Enter the desired symbol or press enter for standard (#): "))


def pyramid(h,symbol):
    if symbol == "" or symbol == "#":
        for i in range(h):
            pyr = print(" " * (h-i - 1) + "#" * (2 * i + 1))

        return pyr


    else:
        for i in range(h):
            pyr = print(" " * (h-i - 1) + symbol * (2 * i + 1))

        return pyr

    print()

main()

但是当我尝试调用它时,这种方法无法正常工作。有人可以指出我的错误吗?另外,我不确定如何处理'可选'功能的属性。我应该坚持我的方法还是有更好的方法来定义它?

1 个答案:

答案 0 :(得分:2)

你的逻辑很好,你可以尝试

def pyramid(h,symbol):
    if symbol == "" or symbol == "#":
        for i in range(h):
            print(" " * (h-i - 1) + "#" * (2 * i + 1))
    else:
        for i in range(h):
            print(" " * (h-i - 1) + symbol * (2 * i + 1))
    print()

pyramid(5, "#")
    #
   ###
  #####
 #######
#########

你的问题:

  • pyr = print(" " * (h-i - 1) + "#" * (2 * i + 1)) .... print函数返回None,然后pyr存储None

  • return pyr语句返回pyr变量内容并完成pyramid功能

  • pyramid函数不会调用never

改善代码

你可以删除不必要的if,

def pyramid(h,symbol="#"):
    for i in range(h):
        print(" " * (h-i - 1) + symbol * (2 * i + 1))
    print()

pyramid(5)

你可以返回一个str

def pyramid(h,symbol="#"):
    out = ""
    for i in range(h):
        out += (" " * (h-i - 1)) + (symbol * (2 * i + 1)) + "\n"
    return out

print(pyramid(5))

或,在线解决方案

def pyramid(h,symbol="#"):
    return "\n".join((" " * (h-i - 1)) + (symbol * (2 * i + 1)) for i in range(h))

print(pyramid(5))