练习内容:空实心圆形 勾股定理
代码演示视频
完整代码和注释如下
def circle(r):#空心圆hollow_quarter_circle_rd=[[' 'for x in range(r*2+1)]for y in range(r+1)]#创建圆的右下角四分之一的列表hollow_half_circle_right=[]#创建圆的右半边的列表hollow_whole_circle=[]#创建整个圆的列表for y in range(r+1):#填充四分之一圆half_chord=round((r**2-y**2)**0.5)#half_chord 弦长的一半 利用勾股定理y^2+x^2=r^2hollow_quarter_circle_rd[y][half_chord*2]='o'#竖向填充hollow_quarter_circle_rd[half_chord][y*2]='o'#横向填充for y in range(r+1):#将圆的右下角四分之一沿x轴对称翻转填充到圆的右半边的列表内hollow_half_circle_right.append(hollow_quarter_circle_rd[-y-1])for y in range(r+1):#填充圆的右下角四分之一到圆的右半边的列表内hollow_half_circle_right.append(hollow_quarter_circle_rd[y])for y in range(r*2+2):#将圆的右半部分沿y轴对称翻转填充到整个圆的列表内hollow_whole_circle.append(hollow_half_circle_right[y])hollow_whole_circle[y]=hollow_whole_circle[y][::-1]#填充后每行列表翻转hollow_whole_circle[y]+=' '#填充最中间的一列for y in range(r*2+2):#将圆的右半部分填充到整个圆的列表hollow_whole_circle[y].extend(hollow_half_circle_right[y])for y in range(r*2+2):#打印出圆for x in range(r*4+3):print(hollow_whole_circle[y][x],end='')print()print()#实心圆quarter_circle_rd=[[' 'for x in range(r*2+1)]for y in range(r+1)]#创建圆的右下角四分之一的列表half_circle_right=[]#创建圆的右半边的列表half_circle_right_x_coordinate=[]#创建圆的右半边的x值列表whole_circle=[]#创建整个圆的列表for y in range(r+1):#填充四分之一圆half_chord=round((r**2-y**2)**0.5)#half_chord 弦长的一半 利用勾股定理y^2+x^2=r^2quarter_circle_rd[y][half_chord*2]='o'#竖向填充quarter_circle_rd[half_chord][y*2]='o'#横向填充for y in range(r+1):#将圆的右下角四分之一沿x轴对称翻转填充到圆的右半边的列表内half_circle_right.append(quarter_circle_rd[-y-1])for y in range(r+1):#填充圆的右下角四分之一到圆的右半边的列表内half_circle_right.append(quarter_circle_rd[y])for y in range(r*2+2):#获取圆的右半边的x值for x in range(r*2+1):if half_circle_right[y][x]=='o':half_circle_right_x_coordinate.append(x)break#对于每一行取到第一个值就退出x的循环for y in range(r*2+2):#填充内部for x in range(half_circle_right_x_coordinate[y]):half_circle_right[y][x]='o'for y in range(r*2+2):#填充两个符号中间的空格 o o→ooofor x in range(r*2+1-2):if half_circle_right[y][x]=='o' and half_circle_right[y][x+2]=='o':#如果有两个连着的ohalf_circle_right[y][x+1]='o'#两个o中间的空格变为ofor y in range(r*2+2):#将圆的右半部分沿y轴对称翻转填充到整个圆的列表内whole_circle.append(half_circle_right[y])whole_circle[y]=whole_circle[y][::-1]#填充后每行列表翻转whole_circle[y]+='o'#填充最中间的一列for y in range(r*2+2):#将圆的右半部分填充到整个圆的列表whole_circle[y].extend(half_circle_right[y])for y in range(r*2+2):#打印出圆for x in range(r*4+3):print(whole_circle[y][x],end='')print()
circle(20)