嵌套循环以创建模式
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 倍数。
代码:
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)
如何使用嵌套循环创建以下模式?
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 倍数。
代码:
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)