任意空实心圆形打印|Python练习系列[8]

练习内容:空实心圆形 勾股定理

代码演示视频

完整代码和注释如下

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^2
		hollow_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^2
		quarter_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→ooo
		for x in range(r*2+1-2):
			if half_circle_right[y][x]=='o' and half_circle_right[y][x+2]=='o':#如果有两个连着的o
				half_circle_right[y][x+1]='o'#两个o中间的空格变为o
	for 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值