Python的“类型错误:“

问题描述 投票:0回答:1

我写了学校这个简单的Python程序,它需要一个罗马数字,并将其转换成数字阿拉伯人。 E.g:I = 1,X = 10等

将简单的数字时,该程序工作正常,但是当它需要的是需要扣除的数字转换,他就会出现问题。例如,当“IV”被给定为输入,程序应该打印4,而不是将其吐出的错误代码。

我试过设置输入作为一个int,然而这只是给了我一个新的错误代码。奇怪的是这个工作时,我递给它,但是当我后来下载了它回到我的机器并删除了评论,它打破了。此外,它基本上的教师代码复制粘贴,所以是的。

def omkodchiffer(c):
    if c == "I":
        return 1
    if c == "V":
        return 5
    if c == "X":
        return 10
    if c == "L":
        return 50
    if c == "C":
        return 100
    if c == "D":
        return 500
    if c == "M":
        return 1000


def omregn(t):
    arabertal = 0
    for i in range(0, len(t)):
        if i < len(t) - 1:
            if omkodchiffer(t[i]) < omkodchiffer(t[i + 1]):
                arabertal -= omkodchiffer(t[i])
                i += 1
            elif omkodchiffer(t[i]) >= omkodchiffer(t[i + 1]):
                arabertal += omkodchiffer(t[i])
                i += 1
        else:
            arabertal += omkodchiffer(t[i])
    return arabertal


omregnet = omregn(input("Indtast romertal her:").capitalize())
print(omregnet)

预期结果:当给出“IV”的程序来打印“4”。实际结果:错误代码印

python
1个回答
1
投票
omregnet = omregn(input("Indtast romertal her:").capitalize())

你不应该使用capitalize这里。 capitalize使得字符串资本的第一个字符,其余小写。例如,"IV".capitalize()变得"Iv"。这是一个问题,因为omkodchiffer不知道如何处理小写五,所以返回None,并且没有价值在你的条件语句,它不能比较理智的整数不等式的一个应用。

使用.upper()代替。

omregnet = omregn(input("Indtast romertal her:").upper())
© www.soinside.com 2019 - 2024. All rights reserved.