本文主要是介绍Python学习5:计算弓形的面积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
类型:数值运算
描述
如下图,AB 是圆的一条弦,ABC形成一个弓形,在两行中分别输入弦长AB和弓高CD的长度,计算并分两行依次输出该圆的半径和弓形ABC的面积,结果均严格保留小数点后2位
有效数字,应用三角函数和反三角函数时查阅math模块文档或利用自动补全完成。
提示:
从图中可知:
AD = AB / 2 OA2 = AD2 + OD2 OD = OC – CD = OA – CD
代入后可得
OA = (AD2 + CD2 ) / (2 * CD) sin(∠AOB / 2) = AD / OA
圆心角:
∠AOB = 2 * arcsin(AD / OA)
扇形AOB的面积为:
area_of_sector = ∠AOB / (2π) * π *OA2
三角形 △AOB
area_of_triangle = 1 / 2 * OA2 * sin(∠AOB)
弓形面积为扇形AOB面积减去三角形△AOB面积之差:
area_of_arch = area_of_sector - area_of_triangle
输入
分2行输入2个浮点数
输出
在两行内分别输出半径和弓形面积
示例
输入:
26.5
8
输出:
14.97
151.16
代码:
import math# 输入弦长度,浮点数#
#=======================================================
# 补充你的代码
AB=eval(input())# 输入弓高度,浮点数#
CD=eval(input())# 计算半弦长#
AD=AB/2# 计算半径#
OA=(AD**2+CD**2)/(2*CD)# 计算圆心角#
#=======================================================
AOB=2*math.asin(AD/OA)# 计算弓形所在扇形的面积#
#=======================================================
area_of_sector = AOB/(2*math.pi)*math.pi*OA**2# 计算三角形面积#
#=======================================================
area_of_triangle = 1 / 2 *OA**2*math.sin(AOB)# 计算弓形面积#
#=======================================================
area_of_arch = area_of_sector - area_of_triangle# 在两行中分别输出半径和弓形面积#
#=======================================================
print(f"{OA:.2f}")
print(f"{area_of_arch:.2f}")
这段代码实现了计算弓形的半径和面积。具体来说,它的实现过程如下:
- 使用 eval() 函数从用户输入中读取浮点数 AB 和 CD,分别表示弦长度和弓高度。
- 根据弦长度 AB 计算出半弦长 AD。
- 根据半弦长 AD 和弓高度 CD 计算出半径 OA。
- 根据半径 OA 和半弦长 AD 计算圆心角 AOB,该计算使用 arsin() 函数,需要先导入 math 模块。
- 基于弧形扇形的公式计算弓形所在扇形的面积,并将结果存储在变量 area_of_sector 中。
- 基于三角形面积公式计算由半径 OA、弦 AB 和圆心角 AOB 所构成的三角形面积,并将结果存储在变量 area_of_triangle 中。
- 弓形面积等于扇形面积减去三角形面积,将该结果存储在变量 area_of_arch 中。
- 使用 f-string 格式化输出半径和弓形面积,保留两位小数。
需要注意的是,该段代码的输入存在一些安全问题。使用 eval() 函数可以将字符串转换成 Python 表达式并执行,而这可能导致潜在的漏洞。建议使用其他输入方式,比如 float() 函数,来更加安全地从用户输入中读取数字。
拓展:除了输入方式的修改外,还有一些其他的优化可以考虑。
- 添加注释:代码中已经有一些注释,但是可以进一步补充,让代码更加易读易懂。比如可以在变量定义的前面添加注释,说明该变量的含义和用途。
- 将重复的计算提取出来:计算圆心角和弓形所在扇形的面积时,需要用到半径 OA,这个计算可以提取出来,避免重复计算,从而提高代码效率。
- 对最终结果进行有效性判断:计算弓形面积的时候,可能会出现负数或者非数值类型的情况,为了保证程序能够正常运行,可以对最终的结果进行有效性判断,如果计算得到的是非法值,则给出相应的提示信息
- 可改成这样:
import math# 从用户输入中读取弦长和弓高度
AB = float(input("请输入弦长:"))
CD = float(input("请输入弓高度:"))# 计算半弦长
AD = AB / 2# 计算半径
OA = (AD**2 + CD**2) / (2 * CD)# 计算圆心角
sin_AOB_half = AD/OA
if abs(sin_AOB_half) > 1:print("计算圆心角失败!请检查输入是否合法。")exit()
AOB = 2 * math.asin(sin_AOB_half)# 计算弓形所在扇形的面积
area_of_sector = AOB/(2*math.pi) * math.pi * OA**2# 计算三角形面积
area_of_triangle = 1/2 * OA**2 * math.sin(AOB)# 计算弓形面积
area_of_arch = area_of_sector - area_of_triangle
if area_of_arch < 0 or math.isnan(area_of_arch):print("计算弓形面积失败!请检查输入是否合法。")exit()# 输出半径和弓形面积
print(f"弧形半径为:{OA:.2f}")
print(f"弓形面积为:{area_of_arch:.2f}")
这篇关于Python学习5:计算弓形的面积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!