在python中制作转换程序可与最新版本的python配合使用

在python中制作转换程序可与最新版本的python配合使用,python,Python,几年前,我在这里发现了一个长度和重量转换程序。我的一位朋友最近启动了一个项目,他需要这段代码,但该项目要求他使用最新版本的Python。我答应他我会尽我所能帮助他,但由于多年没有用python编写代码,我真的做不了多少。我希望你们能帮忙。无论何时运行它,都会出现以下两个错误: Traceback (most recent call last): File "C:\Users\Tiberius\Documents\Konvertering.py", line 75, in <module&g

几年前,我在这里发现了一个长度和重量转换程序。我的一位朋友最近启动了一个项目,他需要这段代码,但该项目要求他使用最新版本的Python。我答应他我会尽我所能帮助他,但由于多年没有用python编写代码,我真的做不了多少。我希望你们能帮忙。无论何时运行它,都会出现以下两个错误:

Traceback (most recent call last):
File "C:\Users\Tiberius\Documents\Konvertering.py", line 75, in <module>
main()
File "C:\Users\Tiberius\Documents\Konvertering.py", line 66, in main
s = raw_input("konverter hvad? (ex: 10 meter til fod) ")
NameError: global name 'raw_input' is not defined

raw_input()
在Python3中被重命名为
input()
2to3
工具可以帮助将Python2代码转换为Python3。

首先在其上运行2to3,然后开始逐个修复剩余的问题


完整参考:

它看起来像是从某个

units = {'kg':          ('vægt', 1.),
'kilo':        ('vægt', 1.),
'kilogram':    ('vægt', 1.),
'lbs':          ('vægt', 2.204),
'pund':       ('vægt', 2.204),
'ton':       ('vægt', 0.001),
'gram':        ('vægt', 1000.),
'ounce':       ('vægt', 35.27),
'm':           ('afstand', 1.),
'meter':       ('afstand', 1.),
'kilometer':   ('afstand', 0.001),
'km':          ('afstand', 0.001),
'centimeter':  ('afstand', 100.),
'cm':          ('afstand', 100.),
'meter':       ('afstand', 1.),
'mil':        ('afstand', 0.0006214),
'furlong':     ('afstand', 0.004971),
'league':      ('afstand', 0.0002071),
'fod':        ('afstand', 3.281),
'fod':        ('afstand', 3.281),
'tomme':        ('afstand', 39.37)}

def getUnit(unit_name):
    if unit_name in units:
        return units[unit_name]
    else:
        raise ValueError("ikke genkendt enhed '{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("enheder er af forskellige kategori ('{0}' and '{1}')".format(typeA, typeB))

def conversion(s):
    """
    Fortag enhedskonvertering

    Der accepteres en string i forment
    "(tal) (enhedA) [til] (enhedB)"

    Hvis enhed A og enhed B er af den samme type, vend tilbage med svaret .
    """
    s = s.strip().lower().split()
    if len(s) not in (3, 4):
        raise ValueError("Argument string har et forkert antal ord (skal være mellem tre eller fire)")
    try:
        amt = float(s[0])
    except ValueError:
        raise ValueError("argument string skal starte med et tal")
    from_unit = s[1]
    to_unit   = s[-1]
    return convert(amt, from_unit, to_unit)

def tryAgain():
    s = raw_input('prøv igen? (Y/n)? ').strip().lower()
    return 'yes'.startswith(s)

def main():
    while True:
        s = raw_input("konverter hvad? (ex: 10 meter til fod) ")
        try:
            print(": {0}".format(conversion(s)))
        except ValueError as v:
            print (v)
        if not tryAgain():
            break

if __name__=="__main__":
    main()