如何使用嵌套的for循环在python中打印出以下模式?因此,您不必编写7种打印功能即可打印图案。
1
0 1
1 0 1
0 1 0 1
1 0 1 0 1
0 1 0 1 0 1
1 0 1 0 1 0 1
答案 0 :(得分:4)
您可以执行以下操作:
s = ''
for i in range(1, 8):
s = str(i % 2) + s
print(s)
答案 1 :(得分:2)
您的评论正确无误,这是使用insert()
的一种选择:
start = [1]
no_rows = 7
for i in range(no_rows):
print(start)
start.insert(0, 1 if start[0]==0 else 0)
哪个给:
[1]
[0, 1]
[1, 0, 1]
[0, 1, 0, 1]
[1, 0, 1, 0, 1]
[0, 1, 0, 1, 0, 1]
[1, 0, 1, 0, 1, 0, 1]
如果您希望将每一行的格式设置为str
,而不是list
,则可以将print(start)
更改为print(' '.join([str(s) for s in start]))
,这样可以:
1
0 1
1 0 1
0 1 0 1
1 0 1 0 1
0 1 0 1 0 1
1 0 1 0 1 0 1
根据Patrick Haugh的评论,您可以将print(start)
替换为print(*start)
,以将整数列表打印为str
。
答案 2 :(得分:2)
不包含循环,而是一个递归函数示例,以便您进一步进行操作:
>>> def foo(length_max, list_=[1]):
... print(list_)
... if len(list_)==length_max:
... return
... return foo(length_max, [int(not bool(list_[0]))] + list_)
...
>>> foo(7)
[1]
[0, 1]
[1, 0, 1]
[0, 1, 0, 1]
[1, 0, 1, 0, 1]
[0, 1, 0, 1, 0, 1]
[1, 0, 1, 0, 1, 0, 1]
答案 3 :(得分:1)
正如我所看到的,这是有多少人不回答这个问题的竞赛,这是关于使用嵌套循环的。。。好吧,这是我的方法: -)
0.4166666666666667
答案 4 :(得分:1)
这不是纯Python的答案,它使用了numpy
和scipy
,但是由于您要描述的矩阵,我认为这是一个很好的问题。
您可能不打算这样做,但是您的输出与Toeplitz matrix的下三角匹配。
由于交替的方式,每个对角线将具有相同的值。因此,您可以使用scipy
来产生输出。
设置
num = 7
out = [1,0]*((num // 2)+1)
out = out[:num]
from scipy.linalg import toeplitz
res = toeplitz(out)
res[np.triu_indices_from(res, k=1)] = -1
for row in res:
print(' '.join(map(str, row[row!=-1])))
1
0 1
1 0 1
0 1 0 1
1 0 1 0 1
0 1 0 1 0 1
1 0 1 0 1 0 1
答案 5 :(得分:0)
您可以尝试以下方法:
def run():
data = [1]
iterations = 7
for i in range(iterations):
print_data(data)
data.append(i % 2)
print_data(data)
def print_data(dat):
print(' '.join(d for d in dat[::-1]))
此解决方案的另一个好处是不使用insert
O(n)
,而用数学表达式替换if语句。
答案 6 :(得分:0)
这是一个漫长而简单的解决方案
count = -1 # Count where in the loop we are
switch = 1 # Switch between 0 and 1
start = 1 # Switch which varibale we start the line with
for i in range(8):
print()
count += 1
start = switch
for j in range(8):
if j != count:
if switch == 0:
print("1 ", end='') #end= means dont print a new line character
switch = 1
else:
print("0 ", end='')
switch = 0
if j == count:
if start == 1:
switch = 0
else:
switch = 1
break #Break loop as we have printed as many characters as we want
print() # Print to end the line
答案 7 :(得分:0)
您可以尝试以下方法:
import os
import re
import sys
def print_pattern(num):
if(num == 1):
print("1",end="\n")
return
elif(num%2 == 1):
print("1",end=" ")
print_pattern(num-1)
else:
print("0",end=" ")
print_pattern(num-1)
number = int(input("Enter the steps"))
for i in range(1,number+1):
print_pattern(i)
答案 8 :(得分:0)
还有一个解决方案,不使用嵌套循环,而是使用单个循环和二进制表示。
solution = 1
for i in range(7):
out_str = f'{solution:b}'
print(' '.join(out_str[::-1]))
solution = solution << 1
if i > 0 and i % 2 == 1:
solution |= 1