Python 升程坡度计算器,输出英尺和英寸

Python 升程坡度计算器,输出英尺和英寸,python,Python,我正试图写一个上升超过运行计算器,可以作为一个建设计算器的功能。我正在接收以英尺和英寸为单位的输入,并将以英尺和英寸为单位的坡度输出到最接近的1/16 我现在拥有的可以以英寸为单位进行输入,将其转换为十进制,并以相同的格式输出斜率 import sys while (1): print ("Enter the rise and run in inches to calculate slope.") a = (input("First measurement is: "))

我正试图写一个上升超过运行计算器,可以作为一个建设计算器的功能。我正在接收以英尺和英寸为单位的输入,并将以英尺和英寸为单位的坡度输出到最接近的1/16

我现在拥有的可以以英寸为单位进行输入,将其转换为十进制,并以相同的格式输出斜率

import sys
while (1):
    print ("Enter the rise and run in inches to calculate slope.")
    a = (input("First measurement is:  "))
    if (a == "stop"):
         print ("goodbye")
         sys.exit()
    a=  float (a)**2  
    b = float (input("second measurement is:  "))**2
    c = (float (a) + float (b))**(1/2)
    print ("Slope is:", c,("inches"))

以下是解决方案的起始代码。它所做的是计算坡度,然后旋转。我想你是在尝试以某种方式使用毕达哥拉斯定理,但是通过做deltaY/deltaX或rise/run可以做得更简单

舍入是通过将当前值乘以16,舍入到最接近的整数,然后再除以16来完成的。这之所以有效,是因为分数如何转换成小数。如果你乘得到一个整数,那么你知道你得到的是1/16的倍数。如果没有,你需要绕道而行。取整的方法是取最接近的1/16值。这通常是通过查看要舍入的数字位于哪两个值之间来完成的。如果它是较高数字的一半,则四舍五入到该数字,否则四舍五入到较低的数字。这就实现了这个原理,但它并没有检查它在哪两个之间,而是只检查分子的本质

例如,如果您有5/32,则该数字介于2/16和3/16之间。5/32*16是5/2或2.5。2.5更接近3,因此我们将该值四舍五入。然后我们将答案除以16得到3/16作为最终结果

还有一件事,您似乎正在使用sys.exit来完成函数的结尾。通过使用break简单地中断while循环,可以更容易地实现这一点

最后一件事,如果底部测量值为0,程序现在处于的状态不会检查垂直线。我不确定这是否是一项要求,但您可能需要检查一下。此外,我假设先输入上升,然后输入运行,使a=上升,b=运行

import math

def round1_16th(n):
    n *= 16
    n = round(n)
    return n/16

while (1): 
    print ("Enter the rise and run in inches to calculate slope.") 
    a = (input("First measurement is: ")) 
    if (a == "stop"): 
        print ("goodbye") 
        break
    a= float (a)
    b = float (input("second measurement is: "))
    hyp = math.sqrt(a*a + b*b)
    hypInt = int(hyp)
    hypDec = hyp - hypInt
    numerator = round(hypDec*16)
    if hypInt == 0:
        hypInt = ""
    print ("Slope is:", round1_16th(hyp),"or",hypInt,str(numerator)+"/16th")

我不懂的是如何用小数分隔数字,并将斜率输出为整数和分数。例如,rise12 over run 15=19.20937或19 3/16th十进制值的整数值很容易获得,只需使用intval转换即可。数字的整数值是整数部分+小数部分。如果重新排列,小数部分是整个十进制数-整数部分。例如,19.20937=19+0.20937。这意味着0.20937=19.20937-19。你能舍入的只是小数部分,得到3/16。这有意义吗?四舍五入后,你知道小数部分的值是1/16的倍数,这意味着你可以乘以16得到分子的值。另外,如果你想把分数降到最低,你可以除以最大公分母或gcd。你可以在这里看到gcd是如何工作的:你能举例说明它是如何实现的吗?如何将返回19.20937分为19。和0.20937?从那里,我相信我可以将它四舍五入到1/16,并以分数的形式输出到19 3/16英寸。编辑后的解决方案已经实现。问题是它不检查坡度是否小于0。例如,对于上升=12和运行=15,它输出0 13/16。减少的事情仍然适用。