Python的一些小程序
初级:打印十行十列的*
#方式一
num = 0
while num < 100:
print("*",end=" ")
if (num+1) %10 == 0:
print()
num +=1
#方式二
for i in range(10):
for j in range(10):
print('*',end=" ")
print('')
效果:
补充:
-
range()方法
range函数定义:range(start , stop , step)
start:起始数字
stop:终止数字(不包括此数字)
step:间距
range就是形成了一个左闭右开区间[start , stop)
其中的step就是从当前数字(不包括当前数字)开始数,取第step
个数
如:
[1,2,3,4,5,6,7,8,9,10] 若step为2:
从1
开始,3
是第2个;
从3
开始,5
是第2个; -
print( [输出内容] , end=’’ )
print默认是以\n
为end,也就是默认换行。
如果设为end=‘’
将不换行。
进阶1:每隔一列换符号输出
最终效果:
代码如下
num = 0
while num < 100:
if num % 2 == 0:
print("*",end=" ")
else:
print("#",end=" ")
if (num+1) % 10 == 0:
print()
num += 1
思路:
- 要求两个符号交替打印,可以考虑奇偶列,通过mod2操作确定是奇数列还是偶数列。
- 每打印十个符号就要换行。
进阶2:每隔一行换符号输出
最终效果:
代码如下:
num = 0
while num < 100:
if num // 10 % 2 == 0:
char = '*'
else:
char = "#"
print(char,end=" ")
if (num + 1) % 10 == 0:
print()
num += 1
思路:
- 上一个例子是隔列换符号,考虑的是奇偶列;那么这个例子是隔行换符号,因此可以考虑奇偶行。如何判断奇偶行就成了问题。
第一行的下标为:0~9
第二行的下标为:10~19
第三行的下标为:20~29
…
对每行的下标进行除以10的操作就可以得到每行下标的十位
数字。
通过这个十位
数字,我们就可以继续mod2来判断是奇还是偶。 - 对于奇数行,使用一种符号打印;对于偶数行,使用另一种符号打印。
- 每打印十个符号记得换行。
小结一下
对于打印一个n×n的符号阵来说,可以有两种方法:
方法一:使用双重循环
方法二:使用单循环,但是需要对输出进行换行控制
抽象出两个计算方法:
判断是奇偶列:num % 2 == 0
判断是奇偶行:num // [每行的元素个数] % 2 == 0
拓展
打印三角形
- 打印“贴在边上的”三角形
这种三角形比较好理解,第一行打印一个,第二行打印两个…
# 打印三角形1
num = 1
while num < 15:
varNum = num
while varNum > 0:
print('*',end=" ")
varNum -= 1
print()
num += 1
思路:
使用两个循环,内层的控制打印符号数量,外层的控制打印的行数。
其中使用变量varNum
是为了打印符合行号的符号数。
效果如下:
- 打印“立在中间的”三角形
这种三角形有些麻烦。因为需要在输出符号前在符号的前面打出足够的空格数。
因此需要考虑行号与空格数 和 行号与符号数 之间的关系。
结合效果图来考虑:
- 符号数并不是单调增加,而是呈差值为2的等差数列,即:1,3,5…
- 将三角形看做以中间轴对称的图形,那么对称轴两边的空格数量相等,进而可以将三角形抽象在一个矩形中,每行需要打印的空格数为:(
最大符号数
-每行需要打印的符号数
) // 2 - 每次循环需要执行三个功能。第一步是打印空格,第二步是打印符号,第三步是换行。
首先来看第一个问题:每行的符号数是等差数列
假设下标从1开始:
第1行 ==> 1个符号
第2行 ==> 3个符号
第3行 ==> 5个符号
…
第n行 ==> n+(n-1)个符号
如此,就可以根据行号确定需要打印几个符号了。
然后再来看第二个问题:每行需要打印多少个空格
前面提到,可以将三角形抽象在一个大矩形中。
空格数 = (矩形长边符号数 - 每行要打印的符号数) // 2
而每行要打印的符号数上面已经推出,那么就需要计算出最长边的符号数。
换言之,最长边的符号数也就是第n个奇数是多少的问题.
通过查询相关内容,得到一个求第n个奇数的公式:n**2 - (n-1)**2
那么空格数也就解决了。
至于循环打印空格和符号,有了之前循环的铺垫相信也不难做到。
直接给出代码:
# 打印三角形2
num = 1
while num <= 15:
line_num = 15**2 - (15 - 1)**2 # 求第n个奇数
tokenNum = num + (num-1) # 计算每一行应出现的符号数
space_num = (line_num-tokenNum)//2 # 计算每一行应出现的空格数
while space_num > 0: #这个循环用于在输出符号前输出足够数量的空格
print(" ",end=" ")
space_num -= 1
while tokenNum > 0: # 这个循环用于输出符号
print("*",end=" ")
tokenNum -= 1
print() # 输出完一行后换行
num += 1
打印菱形
有了上面打印第二种三角形的经验,打印菱形其实可以看做打印两个三角形,一个正着打印,一个倒着打印。
菱形从中间分开,包括中间线及以上的部分用上面的方法打印三角形。
中间线以下的部分规律如下:空格增加,符号减少。
中间线以下的符号数可以参考中间线上的符号数,离中间线越远的,与中间线上符号数的差也就越大;相反的,空格数就会增加。
# 打印菱形
num = 1
while num < 15:
midLine = 15 // 2 # 计算中间线的行号
MaxNum = midLine**2 - (midLine-1)**2 # 计算中间线上需要多少个符号
if num > midLine:
# 倒着打印
tokenNum = MaxNum -2*(num - midLine) # 过了中间线就该用最大符号数去减 和离中间线的距离有关
space_num = (MaxNum - tokenNum) // 2 # 空格数与符号数有关,调整好符号数即可
while space_num>0:
print(' ',end=" ")
space_num -= 1
while tokenNum>0:
print('*',end=" ")
tokenNum -= 1
print()
else:
# 正着打印
tokenNum = num + (num - 1) # 计算当前行要打印多少个
space_num = (MaxNum - tokenNum) // 2 # 计算当前行要打印多少个空格
while space_num>0:
print(' ',end=" ")
space_num -= 1
while tokenNum>0:
print("*",end=" ")
tokenNum -= 1
print()
num += 1
效果图如下:
其实也可以将其抽象为在一个矩形内打印出的菱形。
矩形的最长边符号数就是中间线上的符号数。
中间线上面的符号数用行号去加:num + (num-1)
中间线下面的符号数用最大符号数去减:MaxNum - (num-midLine)*2
(这里乘2的原因是每次都会减少两个符号)
空格数与符号数的关系一直都是:(MaxNum - tokenNum) // 2
这样,就完成了。