如何使用嵌套的for循环在python中打印出以下模式?

时间:2018-10-01 15:27:11

标签: python python-3.x

如何使用嵌套的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

9 个答案:

答案 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的答案,它使用了numpyscipy,但是由于您要描述的矩阵,我认为这是一个很好的问题。

您可能不打算这样做,但是您的输出与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