嵌套循环以创建模式

时间:2015-05-11 08:32:36

标签: python loops nested

我如何使用嵌套循环创建以下模式?

111111
11111
1111
111
11
1

到目前为止,我有这个,我似乎被卡住了。

def main():
stars = "******"
for x in range (1,7):
    print(stars)

    for y in range (1,1):
        stars = stars.replace("*"," ")
main()

6 个答案:

答案 0 :(得分:1)

你需要在内循环中只替换一颗星:

stars = "******"
for x in range(6): 
    stars = stars.replace("*","1")
    print(stars)
    for y in range(1): # need range(1) to loop exactly once
        stars = stars.replace("1","",1) 

输出:

111111
11111
1111
111
11
1

如果你真的想要明星:

stars = "******"
for x in range(6):
    print(stars)
    for y in range(1):
        stars = stars.replace("*","",1)

输出:

******
*****
****
***
**
*

str.replace的最后一个arg是count,其中<​​em>只替换了第一次计数。所以每次我们只替换一个字符。

如果你必须使用星号变量并替换,那么上面的代码将起作用,如果你只需要嵌套循环并创建模式,你可以从5循环并在内部使用end=""打印一次循环:

for x in range(5, -1, -1):
    print("1" * x, end="")
    for y in range(1):
        print("1")

同样的输出:

111111
11111
1111
111
11
1

答案 1 :(得分:1)

def main(symbol, number):
    for x in reversed(range(number)):
        s = ""
        for y in range(x+1):
            s += symbol
        print s

main("1", 6)

您可以为参数提供一个符号示例 - &#39; 1&#39;,&#39; *&#39; )和编号示例 - &#39; 5代表*****&#39; 开头)

答案 2 :(得分:0)

您正在使用替换方法替换字符串中的所有星号,这意味着您将在线打印一行开头。您可以使用substring方法获得更好的结果。

答案 3 :(得分:0)

使用嵌套循环检查 Padraic Cunningham 的答案。

没有嵌套循环:

  1. 按范围方法和列表的反向方法创建计数列表。
  2. 迭代列表并打印1次计数。
  3. 代码:

    counters = range(1, 7)
    counters.reverse()
    for i in counters:
        print "1"*i
    

    输出:

    111111
    11111
    1111
    111
    11
    1
    

答案 4 :(得分:0)

由于你要求一个嵌套循环,我想这只是一个训练练习,它的效率并不重要。
因此,让我提出一个适当的解决方案&#39;内环并且没有反转范围:

def triangle(x, c='1'):
    for i in range(x):
        line = ''
        for _ in range(i, x):
            line += c
        print(line)

答案 5 :(得分:-1)

您可以使用一种简单的方法获得相同的输出,因为Python在Strings上支持*运算符,它返回一个重复出现的字符串。

character = "1"   #You can change it to "*"
for i in range(6, 0, -1):
    print character*i

输出:

111111
11111
1111
111
11
1
相关问题