Python 使用if命令时出现罗马/十进制计算器错误

Python 使用if命令时出现罗马/十进制计算器错误,python,Python,它只打印if中的第二个命令,如果输入为十进制,则不打印第一个命令。我检查了两个分开的代码,它们工作得很好。我只想打印十进制,如果是罗马,如果是十进制 roman_to_decimal = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, \ 'D': 500, 'M': 1000 } def int2roman(numberdec): numerals={1:"I", 4:"IV"

它只打印if中的第二个命令,如果输入为十进制,则不打印第一个命令。我检查了两个分开的代码,它们工作得很好。我只想打印十进制,如果是罗马,如果是十进制

roman_to_decimal = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, \
                         'D': 500, 'M': 1000 }
    def int2roman(numberdec):
        numerals={1:"I", 4:"IV", 5:"V", 9: "IX", 10:"X", 40:"XL", 50:"L",
                  90:"XC", 100:"C", 400:"CD", 500:"D", 900:"CM", 1000:"M"}
        result=""
        for value, numeral in sorted(numerals.items(), reverse=True):
            while numberdec >= value:
                result += numeral
                numberdec -= value
        return result


numberchk=(input("Enter a Roman numeral or a Decimal numeral:" ))
  ##here is the problem i get         
if  numberchk==int :
        print (int2roman(int(numberchk)))
        sys.exit()
else :
    roman=numberchk

converted = True
number = 0

for n in range(0, len(roman)-1):
    this_char = roman[n]
    next_char = roman[n+1]
    if (this_char in roman_to_decimal) and \
       (next_char in roman_to_decimal):

        this_number = roman_to_decimal[this_char]
        next_number =  roman_to_decimal[next_char]

        if this_number < next_number:
            number -= this_number
        else:
            number += this_number



if converted:
    ##  add last roman numeral
    number += roman_to_decimal[roman[len(roman)-1]]

    print ("\nThe roman numeral", roman, "is equal to",number)
roman_to_decimal={'I':1,'V':5,'X':10,'L':50,'C':100\
'D':500,'M':1000}
def int2roman(编号DC):
数字={1:“I”,4:“IV”,5:“V”,9:“IX”,10:“X”,40:“XL”,50:“L”,
90:“XC”、100:“C”、400:“CD”、500:“D”、900:“CM”、1000:“M”}
result=“”
对于值,排序中的数字(numbers.items(),reverse=True):
当numberdec>=值时:
结果+=数字
numberdec-=值
返回结果
numberchk=(输入(“输入罗马数字或十进制数字:”)
##这就是我遇到的问题
如果numberchk==int:
打印(int2roman(int(numberchk)))
sys.exit()
其他:
罗马=数字
已转换=真
数字=0
对于范围(0,len(roman)-1中的n:
这个字母=罗马字母[n]
下一个字符=罗马[n+1]
如果(该字符为罗马字符到十进制字符)和\
(下一个字符为罗马到十进制):
这个数字=罗马到十进制[这个字符]
下一个字符数=罗马到十进制[下一个字符]
如果此\u编号<下一个\u编号:
编号-=此编号
其他:
数字+=这个数字
如果转换:
##加上最后一个罗马数字
数字+=从罗马字母到十进制字母[罗马字母(罗马)-1]]
打印(“\n罗马数字”,罗马“等于”,数字)
您的线路

if  numberchk==int :
似乎不正确。你应该使用

try:
  decval = int(numberchk)
  romanval = int2roman(decval)
  #Continue with other processing here
except ValueError:
  # Verify that it is a legal roman numeral
  romanval = numberchk
  decval = roman2int(numberchk)


# Continue with your processing

print ("\nThe roman numeral", romanval, "is equal to", decval)
if为false的原因可以在以下代码中找到

a = 3
b = ( a == int)
c = type (a)
d = type(int)
print a, b, c, d
输出: 3,False,(类型“int”)(类型“type”)

这是因为您正在尝试测试这些值。如果您真的想如图所示进行测试,那么应该

type(a) == int:

但是,在您的代码中,类型(numberchk)将返回“str”,因为您尚未转换它。这就是为什么必须使用try:except:方法。

会出现什么错误?什么是完全回溯?
numberchk==int
从来都不是真的。你想在那里测试什么?你想测试
numberchk
是否可能是一个数字吗?实际上,在if命令中,我签入mumberchk==int it,只打印else命令,不管输入是什么,如果输入它的十进制数,而不是罗马数,它就会得到我error@devnull:
input()
在Python 3中总是返回字符串,因此OP想知道字符串值是否包含十进制数。我想我找到的傻瓜在这里会更有帮助。