嵌套循环以创建模式

Nested Loops to create a pattern

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

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()

您只需要替换内循环中的 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 的最后一个参数是计数,其中 仅替换前 count 个出现的次数。 所以每次我们只替换一个字符。

如果你必须使用 stars 变量并替换上面的代码就可以工作,如果你只需要嵌套循环并创建模式,你可以从 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

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

您可以使用一种简单的方法获得相同的输出,因为 Python 支持对 returns 重复出现的字符串的字符串进行 * 运算符。

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

输出:

111111
11111
1111
111
11
1

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

没有嵌套循环:

  1. 通过范围方法和列表的反向方法创建计数列表。
  2. 迭代列表并打印计数的 1 倍数。

代码:

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

输出:

111111
11111
1111
111
11
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)

您可以给参数一个 符号示例 - '1','*')和 数字示例 - '5 for *****' 开头)

既然你请求的是嵌套循环,我想这只是一个训练练习,它的效率如何并不重要。
因此,让我提出一个带有 'proper' 内循环且没有反向范围的解决方案:

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