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

2024-09-29 23:15:29 发布

您现在位置: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")

Tags: ornumberinputvaluedefresultintdecimal
3条回答

尝试使用isdigit()函数。你知道吗

替换代码中的此部分

if numberchk==int:

if numberchk.isdigit():

改用isinstance(numberchk, int),因为int是一个类型,而numberchk是该类型的实例。你知道吗

因为int(input(...总是尽可能长地返回整数,所以不必使用if-else检查它。要在输入不是整数时抑制错误引发,请使用@poke中提到的try-except。你知道吗

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

while True:
    try:
        numberchk=int(input("Enter a Roman numeral or a Decimal numeral:" ))
        break
    except ValueError:
        print('error')
print(int2roman(numberchk))
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

相关问题 更多 >

    热门问题