
1、1065. 字符图形1-星号矩形

先打印一个
*,print('*')然后再循环
n次打印*,for j in range(n)将循环的
n个*放在同一行,print('*', end='')再将 1 行循环
n次,for i in range(n)每打印完一行
*,换行,print()
n = int(input())
for i in range(n):
for j in range(n):
print('*', end='')
print()
其实我们可以用一个 for 来表示上面的嵌套循环:
n = int(input())
for i in range(1, n + 1):
print('*' * n)
这样,循环次数就从 n*n 次变成了 n 次,效率更高。
2、1066. 字符图形2-星号直角

先循环
n次打印行数,for i in range(n)发现每的
*个数与行数相等,但是行数是从1开始的,所以我们让 i 从1开始,for i in range(1, n+1)然后发现每一行的
*个数与行数相等,所以每一次的内部循环应该循环i次,for j in range(i)将循环的
i个*放在同一行,print('*', end='')每打印完一行
*,换行,print()
n = int(input())
for i in range(1,n+1):
for j in range(i):
print("*",end="")
print()
或者可以找到规律后用一个 for 循环和一个字符串乘法来实现:
n = int(input())
for i in range(1, n+1):
print("*" * i)
3、1782. 字符图形2-星号倒直角

先循环
n次打印行数,for i in range(n)现在发现每一行的个数与行数相反,所以我们可以直接让 i 从 n 开始递减到 1,
for i in range(n, 0, -1)然后现在发现每一行的
*个数与行数相等,所以每一次的内部循环应该循环i次,for j in range(i)将循环的
i个*放在同一行,print('*', end='')每打印完一行
*,换行,print()
n = int(input())
for i in range(n,0,-1):
for j in range(i):
print("*",end="")
print()
或者可以找到规律后用一个 for 循环和一个字符串乘法来实现:
n = int(input())
for i in range(n):
print("*" * (n - i))
4、1783. 数字直角(1)

先循环
n次打印行数,有了前面的经验,直接让 i 从 1 开始,for i in range(1, n+1)发现每一行都有
i个i,然后再循环i次打印i,for j in range(i)将循环的
i个i放在同一行,print(i, end='')每打印完一行
i,换行,print()
n = int(input())
for i in range(1,n+1):
for j in range(i):
print(i,end="")
print()
或者可以找到规律后用一个 for 循环和一个字符串来实现:
n = int(input())
for i in range(1, n+1):
print(str(i) * i)
5、1784. 数字直角(2)

先循环
n次打印行数,for i in range(1, n+1)发现每一行的数字个数与行数相同,然后再循环
i次打印数字,for j in range(i)不难看出每一行打印的是从
1到i的数字,所以我们内部循环打印j就行,print(j, end='')但是这样每一行打印出来的数字是从
0开始的,所以需要让 j 从1开始,for j in range(1, i+1)每打印完一行数字,换行,
print()
n = int(input())
for i in range(1,n+1):
for j in range(1,i+1):
print(j,end="")
print()
6、1785. 数字直角(3)

先循环
n次打印行数,for i in range(1, n+1)现在发现每一行的个数与行数相反,所以我们可以直接让 i 从 n 开始递减到 1,
for i in range(n, 0, -1)然后发现每一行的数字个数与
i相同,然后再循环i次打印数字,for j in range(i)不难看出每一行打印的是从
1到i的数字,所以我们内部循环打印j就行,print(j, end='')但是这样每一行打印出来的数字是从
0开始的,所以需要让 j 从1开始,for j in range(1, i+1)每打印完一行数字,换行,
print()
n = int(input())
for i in range(n,0,-1):
for j in range(1,i+1):
print(j,end="")
print()
7、1786. 数字直角(4)

来,自己说
n = int(input())
for i in range(n,0,-1):
for j in range(i):
print(i,end="")
print()
或者找规律
n = int(input())
for i in range(n,0,-1):
print(str(i) * i)
8、1067. 字符图形3-平行四边形

n * n个*就不说了,两层 for 循环发现每一行前面都有空格,空格的个数与行数有关,第一行没有空格,第二行有一个空格,第三行有两个空格,所以空格的个数与行数差 1
每一行的空格数与行数差 1,所以直接让 i 从 0 开始,
for i in range(n)然后每一行打印
i个空格,print(' ' * i, end='')不能改变 j 的循环,因为 j 的循环是打印
*的,所以空格的循环必须在 j 的循环之前
n = int(input())
for i in range(n):
print(' ' * i, end="")
for j in range(n):
print("*",end="")
print()
或者可以找到规律后用一个 for 循环和一个字符串乘法来实现:
n = int(input())
for i in range(n):
print(' ' * i + '*' * n)
9、1068. 字符图形4-星号正三角

先循环
n次打印行数,for i in range(1, n+1)发现每一行的
" "和*个数与n和行数i有关第一行一共有
n个字符,第二行一共有n + 1个字符,所以现在直接让 i 从 0 开始,for i in range(n)不难看出,第
i行一共有n + i个字符,所以内部循环应该循环n + i次,for j in range(n + i)发现每一行前面都有空格,空格的个数与行数有关,第一行有
n - 1个空格,第二行有n - 2个空格,第三行有n - 3个空格,所以空格的个数与行数差 1因为我们设置的 i 是从 0 开始的,所以空格的个数是
n - 1 - i然后内部循环的时候,j 从 0 开始,如果 j 小于空格的个数,就打印空格,否则打印
*,if j < spaces: print(' ', end='') else: print('*', end='')每打印完一行,换行,
print()
n = int(input())
for i in range(n):
spaces = n - 1 - i
for j in range(n + i):
if j < spaces:
print(' ', end='')
else:
print('*', end='')
print()
这层嵌套不好理解的话,那你直接从 1 开始吧
i 从 1 开始,
for i in range(1, n + 1)发现每一行的
" "和*个数与n和行数i有关

n = int(input())
for i in range(1, n + 1):
spaces = n - i
for j in range(1, n + i):
if j <= spaces:
print(' ', end='')
else:
print('*', end='')
print()
或者你上来就一眼看出规律
n = int(input())
for i in range(1,n+1):
spaces = ' ' * (n - i)
stars = '*' * (2 * i - 1)
print(spaces + stars)
当然此题有多种解法,找到规律很重要
10、1069. 字符图形5-星号梯形

先循环
n次打印行数,for i in range(1, n+1)发现每一行的
" "和*个数与n和行数i有关
" "的个数为n - i,*的个数为2 * i + 1内部循环应该循环
spaces + stars次,for j in range(1, spaces + stars + 1)如果 j 小于等于空格的位数,就打印空格,否则打印
*,if j <= spaces: print(' ', end='') else: print('*', end='')每打印完一行,换行,
print()
n = int(input())
for i in range(1,n+1):
spaces = n - i
stars = 2 * i + 1
for j in range(1,spaces + stars + 1):
if j <= spaces:
print(" ", end="")
else:
print("*", end="")
print()
或者一层循环
n = int(input())
for i in range(1,n+1):
spaces = ' ' * (n - i)
stars = '*' * (2 * i +1)
print(spaces + stars)
11、1070. 字符图形6-星号倒三角

n = int(input())
for i in range(n,0,-1):
spaces = n - i
stars = 2 * i - 1
for j in range(1,spaces + stars + 1):
if j <= spaces:
print(" ", end="")
else:
print("*", end="")
print()
或者一层循环
n = int(input())
for i in range(n):
spaces = ' ' * i
stars = '*' * (2 * (n - i) - 1)
print(spaces + stars)
12、1071. 字符图形7-星号菱形

最笨的方法,就是来两遍
n = int(input())
for i in range(1,n+1):
spaces = n - i + 1
stars = 2 * i - 1
for j in range(1, spaces + stars + 1):
if j <= spaces:
print(" ",end="")
else:
print("*",end="")
print()
print("*" * (2 * n + 1))
for i in range(n,0,-1):
spaces = n - i + 1
stars = 2 * i - 1
for j in range(1, spaces + stars + 1):
if j <= spaces:
print(" ",end="")
else:
print("*",end="")
print()
或者你能发现这个规律:
- 总行数
2*n+1 - 对第
k行- 先算它到中间行的距离
d = abs(k - (n + 1)) - 这一行前面需要
d个空格,后面需要2*(n-d)+1个星号
- 先算它到中间行的距离
- 用字符串乘法一次性拼出整行,然后
print()即可
n = int(input())
for k in range(1, 2 * n + 2):
d = abs(k - (n + 1))
print(' ' * d + '*' * (2 * (n - d) + 1))
13、1072. 字符图形8-数字三角

先循环
n次打印行数,for i in range(1, n + 1)发现每一行的
" "和数字个数与n和行数i有关
" "的个数为n - i,数字的个数为2 * i - 1直接循环
n - i次打印空格,for j in range(n - i): print(' ', end='')又因为数字是从
1开始的,所以我们再开一层循环,让 k 从1开始,for k in range(1, 2 * i - 1 + 1)最后每打印完一行,换行,
print()
n = int(input())
for i in range(1, n + 1):
for j in range(n - i):
print(" ", end="")
for k in range(1, i * 2 - 1 + 1):
print(k, end="")
print()
14、1422. 数字矩形(1)

懒得说,自己说
n = int(input())
for i in range(1, n + 1):
for j in range(1, n + 1):
print(i, end='')
print()
或者
n = int(input())
for i in range(1, n + 1):
print(str(i) * n)
15、1363. 数字矩形(2)

懒得说,自己说
n = int(input())
for i in range(1, n + 1):
for j in range(1, n + 1):
print(j, end='')
print()
16、1491. 数字三角

懒得说,自己说
n = int(input())
for i in range(n,0,-1):
spaces = n - i
for k in range(spaces):
print(" ", end="")
for j in range(1, i + 1):
print(j, end='')
print()
17、1787. 字符图形-数字正三角(2)

懒得说,自己说
n = int(input())
for i in range(1, n + 1):
spaces = n - i
for k in range(spaces):
print(" ", end="")
for j in range(1, 2 * i):
print(j, end='')
print()
18、1788. 字符图形-数字正三角(3)

不就是那些换来换去嘛,自己说
n = int(input())
for i in range(n,0,-1):
spaces = n - i
for j in range(spaces):
print(" ", end="")
for k in range(1,2 * i):
print(str(i), end="")
print()
或者一层循环
n = int(input())
for i in range(n,0,-1):
spaces = ' ' * (n - i)
print(spaces + str(i) * (2 * i - 1))
19、1492. 空心正方形

只有最外层一圈有
*,里面都是空格先循环
n次打印行数,for i in range(1, n + 1)然后再循环
n次打印*或空格,for j in range(1, n + 1)如果是第一行或最后一行,或者是第一列或最后一列,就打印
*,否则打印空格
n = int(input())
for i in range(1,n+1):
for j in range(1,n+1):
if i == 1 or i == n or j == 1 or j == n:
print("*",end="")
else:
print(" ",end="")
print()
或者
n = int(input())
for i in range(1,n+1):
if i == 1 or i == n:
print("*" * n)
else:
print("*"," " * (n - 2),"*",sep="")
20、1493. 放大的Z

循环 n 次打印行数,
for i in range(1, n + 1)然后再循环 n 次打印
*或空格,for j in range(1, n + 1)当外部循环到了第一行或最后一行时,打印 n 个
*每一行空格的个数为
n - i,当内部循环到了第n - i + 1列时,打印*
n = int(input())
for i in range(1, n + 1):
for j in range(1, n + 1):
if i == 1 or i == n or j == n - i + 1:
print('*', end='')
else:
print(' ', end='')
print()
或者一层循环:
n = int(input())
for i in range(1, n + 1):
if i == 1 or i == n:
print('*' * n)
else:
print(' ' * (n - i) + '*')
21、1494. 奇特的三角

先循环
n次打印行数,for i in range(1, n + 1)每一行的列数为
2 * n - 1,所以内部循环应该循环2 * n - 1次,for j in range(1, 2 * n)如果 j 在
n - i + 1和n + i - 1之间(包括等于),就打印@,否则打印*
n = int(input())
for i in range(1, n + 1):
for j in range(1, 2 * n):
if n - i + 1 <= j <= n + i - 1:
print("@", end="")
else:
print("*", end="")
print()
或者更简单的:
n = int(input())
for i in range(1, n + 1):
stars = '*' * (n - i)
ats = '@' * (2 * i - 1)
print(stars + ats + stars)
22、1073. 沙漏

n = int(input()) // 2
for i in range(n, 0, -1):
print(' ' * (n - i) + "*" * (2 * i + 1))
print(" " * n + "*")
for i in range(1, n + 1):
print(' ' * (n - i) + "*" * (2 * i + 1))
23、1219. 放大的箭头

n = int(input())
for i in range(n // 2 + 1):
print(' ' * i, end='')
print('*' * n)
for i in range(n // 2 - 1, -1, -1):
print(' ' * i, end='')
print('*' * n)
24、1008. 字符图形9-数字正三角

n = int(input())
for i in range(1,n+1):
print(" " * (n - i) + str(i) * (2 * i - 1))
25、1006. 打印星号三角形

和之前的一道题很像
n = int(input())
for i in range(1, n + 1):
spaces = ' ' * (n - i)
stars = '*' * (2 * i - 1)
print((spaces + stars + spaces)*3)