关于python:即使if中的第一个命令为true,它也不会打印我想要的,它只打印else命令

Even if the first command in if is true it doesn't print what i want , it only print the else command

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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")


使用isinstance(numberchk, int),因为int是一个类型,但numberchk是该类型的实例。

由于int(input(...总是尽可能地返回一个整数,因此不必使用if else来检查它。若输入不是整数,则要抑制错误引发,请使用try-except,如@poke所述。

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

1
2
3
4
5
6
7
while True:
    try:
        numberchk=int(input("Enter a Roman numeral or a Decimal numeral:" ))
        break
    except ValueError:
        print('error')
print(int2roman(numberchk))


1
if numberchk==int:

这将检查numberchk是否等于int类型。它不会检查numberchk是否是整数(您可能希望这样做)。检查其类型的正确方法是:

1
if isinstance(numberchk, int):

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

1
numberchk=int(input())

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

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

但这又将是一个问题,因为至少从您打印的消息来看,您还希望接受罗马数字,这些数字不能通过int转换为整数。所以你也应该写一个函数,它接受一个罗马数字,并把它转换成一个int。


尝试使用isdigit()函数。

在代码上替换此部件

1
if numberchk==int:

具有

1
if numberchk.isdigit():

检查整数类型而不是与int匹配的变量。

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