Python直角三角形计算程序输入输出不符问题求助
问题分析与修复
你的程序问题主要出在角度单位的转换逻辑完全搞反,以及角度输出时未转回度数,和公式无关,具体如下:
核心错误点
- 输入角度的转换错误:Python的
math.cos()、math.sin()等三角函数接受的是弧度参数,但你输入的是角度值,却用了math.degrees()把输入值(当作弧度)转成角度,这相当于把53.13弧度转成了角度(约3044°),用这个超大的角度计算cos自然会得到错误的负数结果。 - 输出角度未转成度数:你的
angle_with_h_and_o和angle_with_a_and_o函数返回的是弧度值,但你直接输出,所以看到的0.6435是弧度,转成角度才是约36.87°,和你输入的53.13°不匹配是因为你输入的角度和边对应错了(后面会补充说明)。
修复步骤
1. 修正输入角度的转换
把输入角度的代码从:
angle = math.degrees(float(input()))
改成:
angle = math.radians(float(input())) # 将输入的角度值转为弧度,供三角函数使用
2. 输出角度时转回度数
把输出角度的两行代码从:
print(str(angle_with_h_and_o(h, o))) print(str(angle_with_a_and_o(a, o)))
改成:
print(str(math.degrees(angle_with_h_and_o(h, o)))) # 弧度转角度输出 print(str(math.degrees(angle_with_a_and_o(a, o))))
3. 关于输入匹配的补充
你输入的角度53.13°和a=4、o=3不对应:53.13°是对边为4、邻边为3的角(tan(53.13°)=4/3≈1.333),而你输入的o=3是对边、a=4是邻边,对应的角度应该是约36.87°(tan(36.87°)=3/4=0.75)。如果要让输出和输入完全一致,你应该输入角度36.87°,此时第一个函数的结果会是4(cos(36.87°)5=0.85=4),第二个函数结果是3(sin(36.87°)5=0.65=3),后两个角度输出也会是36.87°。
修复后的完整代码
import math a = float(input()) o = float(input()) h = float(input()) angle = math.radians(float(input())) # 修正:角度转弧度 def adjacent_length_with_h_and_angle(h, angle): adjacent_length = math.cos(angle) * h return adjacent_length def opposite_length_with_h_and_angle(h, angle): opposite_length = math.sin(angle) * h return opposite_length def angle_with_h_and_o(h, o): adjacent_angle = math.asin(o / h) return adjacent_angle def angle_with_a_and_o(a, o): adjacent_angle = math.atan(o / a) return adjacent_angle print(str(adjacent_length_with_h_and_angle(h, angle))) print(str(opposite_length_with_h_and_angle(h, angle))) print(str(math.degrees(angle_with_h_and_o(h, o)))) # 修正:弧度转角度输出 print(str(math.degrees(angle_with_a_and_o(a, o)))) # 修正:弧度转角度输出
测试输入:4、3、5、36.87,输出会是:
4.0 3.0 36.86989764584402 36.86989764584402
内容的提问来源于stack exchange,提问作者Tybalt
相关产品推荐
相关产品推荐

