即使if中的第一个命令为true,它也不打印我想要的内容,它只打印else命令

时间:2014-02-24 12:52:14

标签: python

numberchk=(int(input("Enter a Roman numeral or a Decimal numeral:" )))
def int2roman(number):
    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 number >= value:
            result += numeral
            number -= value
    return result
if numberchk==int:
    print(int2roman(int(numberchk)))

else:
    print("error")

4 个答案:

答案 0 :(得分:2)

请改用isinstance(numberchk, int),因为int是一种类型,但numberchk是该类型的实例。

由于int(input(...总是返回一个整数,所以你不必使用if-else来检查它。要在输入不是整数时抑制错误引发,请使用try-except作为@poke提及。

您还可以使用while-loopbreak重复请求用户输入,直到获得合法输入:

while True:
    try:
        numberchk=int(input("Enter a Roman numeral or a Decimal numeral:" ))
        break
    except ValueError:
        print('error')
print(int2roman(numberchk))

答案 1 :(得分:1)

if numberchk==int:

这将检查numberchk 类型int是否 。它将检查numberchk是否为整数(您可能想要这样做)。检查其类型的正确方法是:

if isinstance(numberchk, int):

然而,这也没有意义。获得numberchk的方式是在字符串上调用int()

numberchk=int(input(…))

所以numberchk 总是是一个int。但是,对不是数字的字符串调用int()可能会失败,因此您可能希望捕获该错误以确定输入是否为数字:

try:
    numberchk = int(input("Enter a Roman numeral or a Decimal numeral:"))
except ValueError:
    print('Entered value was not a number')

但是这将再次成为问题,因为 - 至少从您正在打印的消息判断 - 您还希望接受罗马数字,这些数字不能通过int转换为整数。所以你还应该编写一个带罗马数字并将其转换为int的函数。

答案 2 :(得分:0)

检查整数类型,而不是使用int匹配变量。

您可以使用isinstance方法检查变量的类型。

答案 3 :(得分:0)

尝试使用isdigit()功能。

在代码中替换此部分

if numberchk==int:

if numberchk.isdigit():