我正在研究这个问题,内容如下:
问题:编写一个在屏幕上绘制金字塔的功能。该函数需要两个参数。首先是金字塔的高度。第二个参数是可选的:如果没有提供,则符号"#"应该用来绘制金字塔。否则,如果用户输入" *"例如,金字塔应由星号组成。
尝试:我写了这个程序:
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()
但是当我尝试调用它时,这种方法无法正常工作。有人可以指出我的错误吗?另外,我不确定如何处理'可选'功能的属性。我应该坚持我的方法还是有更好的方法来定义它?
答案 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))