在Python中如何将磅转换成公斤

2024-03-29 12:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图找出如何根据输入输出磅或公斤,这是我的代码:

def conversion():
    amount = input("Please specify the amount: ")
    if type(amount) is int:
        print "derp"
    answer = raw_input("Please choose between converting FROM kilograms/pounds: ")
    if answer == "kilograms":
        return amount * 2.2 
    elif answer == "pounds":
        return amount / 1.45
    else:
        print "Please choose between kilograms and pounds."
        restart = raw_input("Try again? ")
        if restart == "yes":
            conversion()
            return 0
        elif restart == "y":
            conversion()
            return 0 
        else:
            print "Okay, bye."
            return
finalresult = conversion()
print "the final result is", finalresult

Tags: theanswerinputrawreturnifisamount
2条回答

更复杂但更灵活的版本:

units = {
    'kg':          ('weight', 1.),
    'kilo':        ('weight', 1.),
    'kilogram':    ('weight', 1.),
    'lb':          ('weight', 2.204),
    'pound':       ('weight', 2.204),
    'tonne':       ('weight', 0.001),
    'carat':       ('weight', 5000.),
    'gram':        ('weight', 1000.),
    'dram':        ('weight', 564.4),
    'ounce':       ('weight', 35.27),
    'grain':       ('weight', 15430.),
    'm':           ('distance', 1.),
    'meter':       ('distance', 1.),
    'kilometer':   ('distance', 0.001),
    'km':          ('distance', 0.001),
    'centimeter':  ('distance', 100.),
    'cm':          ('distance', 100.),
    'meter':       ('distance', 1.),
    'mile':        ('distance', 0.0006214),
    'chain':       ('distance', 0.04971),
    'furlong':     ('distance', 0.004971),
    'league':      ('distance', 0.0002071),
    'foot':        ('distance', 3.281),
    'feet':        ('distance', 3.281),        # irregular plural - must be explicitly specified!
    'inch':        ('distance', 39.37)
}

def getUnit(unit_name):
    if unit_name in units:
        return units[unit_name]
    # recognize regular plural forms
    elif unit_name.endswith('es') and unit_name[:-2] in units:
        return units[unit_name[:-2]]
    elif unit_name.endswith('s') and unit_name[:-1] in units:
        return units[unit_name[:-1]]
    # not found?
    else:
        raise ValueError("Unrecognized unit '{0}'".format(unit_name))

def convert(amt, from_unit, to_unit):
    typeA, numA = getUnit(from_unit)
    typeB, numB = getUnit(to_unit)

    if typeA==typeB:
        return amt * numB / numA
    else:
        raise ValueError("Units are of different types ('{0}' and '{1}')".format(typeA, typeB))

def conversion(s):
    """
    Do unit conversion

    Accepts a string of the form
        "(number) (unitA) [to] (unitB)"

    If unitA and unitB are of the same unit-type, returns the converted value.
    """
    s = s.strip().lower().split()
    if len(s) not in (3, 4):
        raise ValueError("Argument string has wrong number of words (should be three or four)")
    try:
        amt = float(s[0])
    except ValueError:
        raise ValueError("Argument string must start with a number")
    from_unit = s[1]
    to_unit   = s[-1]
    return convert(amt, from_unit, to_unit)

def tryAgain():
    s = raw_input('Try again (Y/n)? ').strip().lower()
    return 'yes'.startswith(s)

def main():
    while True:
        s = raw_input("Convert what? (ex: 10 meters to feet) ")
        try:
            print(": {0}".format(conversion(s)))
        except ValueError, v:
            print v
        if not tryAgain():
            break

if __name__=="__main__":
    main()

这可以解决“10吨到盎司”或“30毛到英尺”这样的问题。

建议进一步补充:

  1. 添加纳米作为距离单位(并进行测试)。

  2. 加短吨和石头作为重量单位(并进行测试)。

  3. 添加升、品脱和桶作为体积单位(并进行测试)。

当您想从Python中的函数返回多个数据项时,可以返回一个包含两个数据项的tuple

return (amount * 2.2, "pounds")

或者

return (amount / 2.2, "kilograms")

稍微修改您的函数:

def conversion():
    amount = input("Please specify the amount: ")
    if type(amount) is int:
        print "derp"
    answer = raw_input("Please choose between converting FROM kilograms/pounds: ")
    if answer == "kilograms":
        return (amount * 2.2, "pounds")
    elif answer == "pounds":
        return (amount / 2.2, "kilograms")
    else:
        print "Please choose between kilograms and pounds."
        restart = raw_input("Try again? ")
        if restart == "yes":
            conversion()
            return 0
        elif restart == "y":
            conversion()
            return 0 
        else:
            print "Okay, bye."
            return
finalresult = conversion()
print "the final result is: ", finalresult[0], finalresult[1]

请注意,我还修正了您的体重-公斤例行程序:

$ python /tmp/convert.py 
Please specify the amount: 10
derp
Please choose between converting FROM kilograms/pounds: kilograms
the final result is:  22.0 pounds
$ python /tmp/convert.py 
Please specify the amount: 22
derp
Please choose between converting FROM kilograms/pounds: pounds
the final result is:  10.0 kilograms

那些return 0调用仍然会把事情搞砸:)我希望您应该删除它们。进一步的改进是将接口代码与转换例程分离;您的函数应该更像这样:

def from_kilograms(kilos):
    return kilos * 2.2
def from_pounds(pounds):
    return pounds / 2.2
def conversation():
    while true:
        ans = raw_input("kg or lb: ")
        num = raw_input("mass: ")
        if ans == "kg"
           print from_kilograms(int(num)), " pounds"
        elsif ans == "lb"
           print from_pounds(int(num)), " kilograms"
        else
           print "bye!"
           return

这种分离使得在web服务器软件、GUI、ncurses CLI或普通的旧终端CLI中重用功能更加容易。

相关问题 更多 >