python 实战31 大大的叉

大大的叉
题目内容:

打印出n阶的“叉”,这个叉图案由字符‘+’和‘X’构成,n越大,这个图案也就越大

输入格式:

一个正整数n,1<=n<=20

输出格式:

一个n阶叉图案

输入样例:

1

输出样例:

X

输入样例:

3

输出样例

X+++X
+X+X+
++X++
+X+X+
X+++X

输入样例:

7

输出样例:

X+++++++++++X
+X+++++++++X+
++X+++++++X++
+++X+++++X+++
++++X+++X++++
+++++X+X+++++
++++++X++++++
+++++X+X+++++
++++X+++X++++
+++X+++++X+++
++X+++++++X++
+X+++++++++X+
X+++++++++++X


My answer

思路一:先从例子里找规律。。

X+++X        # 0个+, 1个X, 3个+,1个X,0个+
+X+X+        # 1个+, 1个X, 1个+,1个X,0个+
++X++        # 2个+, 1个X,2个+
+X+X+        #
X+++X        #

最中间的那一行,给一条命令打出来,第一、二行跟四、五行对称,我只要打出上半部分,下半部分倒着过来打就好了

n = int(input())

for i in range(n - 1):
    print('+' * i + 'X' + "+" * (2 * (n - i) - 3) + 'X' + '+' * i)

print('X'.center(2 * n - 1, '+'))

for j in range(n-2,-1,-1):
    print('+' * j + 'X' + "+" * (2 * (n - j) - 3) + 'X' + '+' * j)

思路二:老师的解法:为方便理解,直接取值为3

n = int(input()) - 1                        # n=2
lst = ['X'] * (2 * n + 1)                   # lst = ['x','x','x','x','x']
for i in range(n):                          # 循环2次,打出前两行
    s = '+' * i + 'X' + '+' * (n - i - 1)   # 打出每一行的前半部分
    s = s + '+' + s[::-1]                   # 把 s 倒过来合并字符串
    lst[i] = lst[-1 - i] = s                # 循环替换lst[i]的值
lst[n] = "+" * n + 'X' + '+' * n			# 把中间一行,即第2行进行修改
for l in lst:
    print(l)								# 遍历lst里的元素,输出

我的方法非常老实,就是一个个把需要的字符串打印出来,老师的方法用了列表,利用了图案的对称,列表的方法,就 lst[i] = lst[-1 - i] = s, 这个就看出我跟老师的差距了 ╮(╯_╰)╭

猜你喜欢

转载自blog.csdn.net/byakki/article/details/86607895