在python中的石头,磅和盎司盎司

时间:2013-09-11 13:30:44

标签: python python-3.x

基本上我已经从大学获得了作业,用户必须输入x盎司的数量,然后将其全部转换并以石头,磅和剩余的盎司打印到屏幕上。我已经坚持了将近一个星期。以下是我迄今为止设法完成的代码:

inp = int(input("Enter your weight in ounces: "))

stones = int(inp / 224)
inp1 = int(inp - (stones * 14))
pounds = int(inp1 % 16)

print(stones ,"Stones", pounds, "Pounds")

石头的位置很完美,但我想知道你如何得到剩余的盎司并将它们转换为磅然后剩余的盎司?

2 个答案:

答案 0 :(得分:1)

更好的方法是先将盎司换成磅,然后将磅换成石头。

def convert(total_ounces):
    ounces = total_ounces % 16
    total_pounds = total_ounces//16      # 1 pound = 16 ounces
    pounds = total_pounds % 14
    stones = total_pounds//14            # 1 stone = 14 pounds
    print stones, " stones ", pounds, "pounds", ounces, " ounces"


>>> convert (110)
    0  stones  6 pounds 14  ounces

>>> convert (500)
    2  stones  3 pounds 4  ounces

您的代码存在问题:

inp = int(input("Enter your weight in ounces: "))

stones = int(inp / 224)                    # Here you get the maximum no of stones. You 
                                           # should better be using inp // 224 rather 
                                           # that int(inp / 224).
inp1 = int(inp - (stones * 14))            # Firstly, since both inp and stones*14 would      
                                           # be int so there is no need for using int(). 
                                           # and what I think you are trying to do here  
                                           # is finding the remaining no of ounces, so 
                                           # you should be doing something like
                                           # inp1 = inp - stones * 14 * 16
pounds = int(inp1 % 16)                    # again here there is no need of using int. 
                                           # And inp1 % 16 should return the number of 
                                           # ounces not pounds. Pounds should be inp1 // 16 .


print(stones ,"Stones", pounds, "Pounds")

答案 1 :(得分:0)

你和你的很近。这有效:

inp = float(input("Enter your weight in ounces: "))

stones = inp / 224
pounds = stones * 14

print('{:.2f} Ounces is {:.2f} Stones or {:.2f} Pounds'.format(inp, stones, pounds))

但是,由于石头传统上用有理数表示,而不是小数,因此可以使用标准Python库中的Fractions模块:

import fractions

inp = int(input("Enter your weight in ounces: "))

if inp>=14*16:
    stones, f=inp // 224, fractions.Fraction(inp%224, inp)
    pounds, oz = inp // 16, inp%16
    outs=str(stones)
    if abs(f)>.01:
        outs+=' and {}/{}'.format(f.numerator, f.denominator)

    outs+=' Stone'   
    outs+=' or {} Pounds'.format(pounds)
    if oz>=1:
        outs+=' {} ounces'.format(oz)    
    print(outs)

else:
    f=fractions.Fraction(inp, 224)
    pounds, oz = inp // 16, inp%16

    print('{}/{} Stone or {} Pounds {} ounces'.format(
          f.numerator, f.denominator, pounds, oz))

示例输入,输出:

Enter your weight in ounces: 1622
7 and 27/811 Stone or 101 Pounds 6 ounces

Enter your weight in ounces: 17
17/224 Stone or 1 Pounds 1 ounces

Enter your weight in ounces: 2240
10 Stone or 140 Pounds

Enter your weight in ounces: 3450
15 and 3/115 Stone or 215 Pounds 10 ounces

或者您可以traditional British方式按N Stone XX (pounds)打印石头重量:

inp = int(input("Enter your weight in ounces: "))
print('{} Stone {}'.format(inp//224, inp%224//16))

打印哪些:

Enter your weight in ounces: 2528
11 Stone 4