2016-03-04 149 views
-5

我试图创建一个由文字'o'组成的“文字三角形”。这是我写的代码:如何获得O的三角形

base = 6 
print("Part Two: Triangle with o's") 
for r in range(base, 0, -1): 
    for c in range(r): 
     print(' ', end='') 
    print('o', sep='') 

我写的代码输出这样的:

 o 
    o 
    o 
    o 
    o 
o 

,但我想要的输出是这样的:

 o 
    oo 
    ooo 
    oooo 
ooooo 
oooooo 

可能有人请帮我鉴定我做错了什么?

+6

也许你应该将你的代码复制粘贴到问题中,而不是向我们展示它的图片。 –

+0

请将您的图片内容作为您的帖子中的代码提交 – phenxd

+0

您的老师是否允许您在网上寻求帮助?因为他们有很多工具可以帮助找到试图欺骗的学生。 – JDB

回答

-1

这里有一个函数来做到这一点:

def text_triangle(base, char): 
    return '\n'.join(' ' * (base-i) + char * i for i in range(1, base+1)) 

print(text_triangle(6, 'o')) 

不打算举行的事实,你刚刚张贴的截图反对你,因为这个问题有很多事情要做的格式,这是很难在降价来表示。

编辑

你得到的每行空格正确的号码(好样的!)。您的代码存在的问题是,您只需在每行上放置一个'o',而不是用'o'填充行的其余部分。

base = 6 
for r in range(base-1, -1, -1): 
    for blank in range(0, r): 
     print(' ', end='') 
    for o in range(r, base): 
     print('o', end='') 
    print() 

要做到这一点,我们可以只写另一个嵌套的循环,其中最后嵌套的循环不放过,在r,并且去,直到行,base结束拾取。最后,我们需要调用print(),在主for循环的底部没有参数来获取换行符。我希望这比我以前的快速回答更具解释力。

上述内容符合老师的要求,但远不是最好的解决方案。如果让我来回答这个问题,没有任何限制(即使用嵌套的for循环),我可能会做这样的事情:

base = 6 
for r in range(base): 
    print('{:>{}}'.format('o' * (r+1), base)) 

该解决方案使用str.format()format specification mini-language右对齐'o'的。

+0

下决心是否愿意解释我的回答有什么问题?它以相当有效的方式产生了OP所需的确切输出。 – pzp

+4

也许是因为你正在回答看起来像是*“为我做作业”的问题*通过提供代码转储来解答问题的原因,以及代码在问题中出了什么问题。提问者将如何学习从这个回答编程? – AdrianHHH

+0

答案必须严格使用for循环。而且我实际上希望被引导向正确的方向而不是仅仅得到答案。 – CWeech