特定字符模式Python

时间:2019-09-15 18:09:55

标签: python

我正在努力实现以下目标;

编写一个程序,该程序将产生以下给出整数输入n的输出。

结果应为以下内容;

n=1     n=2     n=3         n=4
+       A+B     AA+BB       AAA+BBB
        +E+     A+E+B       AA+E+BB
        C+D     +EEE+       A+EEE+B
                C+E+D       +EEEEE+
                CC+DD       C+EEE+D 
                            CC+E+DD
                            CCC+DDD

我在解决此问题时遇到问题。

当我输入2时,我目前正在获取以下内容,但无法使它看起来如上。

当前结果;

A+
B+
E+
C+
D

这是我的代码;

 def specific_pattern(n):
    addition = "+"
    alp = "A, B, E, C, D"
    # myList = ["A, B, C, D, E"]
    newList = []
    for j in range(0, n):
        for i in range(0, j):
            if n == 1:
                print(addition)
            else:
                letters = alp.split(", ")
                for letter in range(len(letters)):
                    newList.append(letters[letter]*j+addition)
                newchar = "".join(newList)
                print(newchar[:-1])

n = int(input("Enter a number: "))
specific_pattern(n)

1 个答案:

答案 0 :(得分:0)

您可以使用简单的迭代来创建所需菱形的顶部和底部:

def sequence(d):
   c, l = 0, 1
   while c < d - 1:
     if l%2:
       yield l
       c += 1
     l += 1

def make_pattern(d):
   t, b, r = f'{"A"*(d-1)}+{"B"*(d-1)}', f'{"C"*(d-1)}+{"D"*(d-1)}', list(sequence(d))
   body = '\n'.join(f'{"A"*((r[-1]-i)//2)}+{"E"*i}+{"B"*((r[-1]-i)//2)}' for i in r[:-1]) + \
     f'\n+{"E"*r[-1]}+\n'+'\n'.join(f'{"C"*((r[-1]-i)//2)}+{"E"*i}+{"D"*((r[-1]-i)//2)}' for i in r[:-1][::-1])
   return f'{t}\n{body}\n{b}'

def diamond(d):
  return {1:lambda _:'+', 2:lambda _:'A+B\n+E+\nC+D'}.get(d, make_pattern)(d)

print(diamond(3))
print('-'*5)
print(diamond(4))

输出:

AA+BB
A+E+B
+EEE+
C+E+D
CC+DD
-----
AAA+BBB
AA+E+BB
A+EEE+B
+EEEEE+
C+EEE+D
CC+E+DD
CCC+DDD