我得到“NameError:name'int\u to\u roman'is not defined”的原因是什么?如何解决此问题?

2024-09-29 23:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图向这个基本的罗马数字计算器添加一个类,但是当我试图从该类运行函数时,我得到了一个NameError。我不知道发生了什么事。你知道吗

我试着改变代码的顺序,但没有别的,因为我不知道错误的原因是什么。你知道吗

另外,我也不知道为什么,但是我不能把类(下面)部分放到代码块中。你知道吗

class Roman_Number():
    roman_numeral_table = [
    ("M", 1000), ("CM", 900), ("D", 500),
    ("CD", 400), ("C", 100),  ("XC", 90),
    ("L", 50),   ("XL", 40),  ("X", 10),
    ("IX", 9),   ("V", 5),    ("IV", 4),
    ("I", 1)
    ]


    r = input('If you want to go from Roman to Number, enter "1." If you want to go from Number to Roman, enter "2"')

    if r == 1:
        roman_to_int()
    else:
        int_to_roman()

    def int_to_roman():
        number = int(input('Provide Number: '))
        if number < 1 or number > 3999:
            print('Number must be inbetween 1 and 3999')
        else:
            print('Valid Number')

        roman_numerals = []
        for numeral, value in roman_numeral_table:
            while value <= number:
                number -= value
                roman_numerals.append(numeral)

        print(''.join(roman_numerals))

        def roman_to_int():
            pass

我希望它开始运行int\u to roman(),但我只是得到一个错误。你知道吗

我改变了顺序,现在我得到了一个“罗马数字表没有定义”。为什么我要和如何解决这个问题?你知道吗


Tags: to代码number顺序value错误tableint
3条回答

您会遇到这个错误,因为python按照语法的顺序执行它,所以您需要先定义一个函数,然后才能调用/引用它。试试这个:

def roman_to_int():
      pass

def int_to_roman():
      number = int(input('Provide Number: '))
      if number < 1 or number > 3999:
          print('Number must be inbetween 1 and 3999')
      else:
          print('Valid Number')


class Roman_Number():
    roman_numeral_table = [
    ("M", 1000), ("CM", 900), ("D", 500),
    ("CD", 400), ("C", 100),  ("XC", 90),
    ("L", 50),   ("XL", 40),  ("X", 10),
    ("IX", 9),   ("V", 5),    ("IV", 4),
    ("I", 1)
    ]

    r = input('If you want to go from Roman to Number, enter "1." If you want to go from Number to Roman, enter "2"')

    if r == 1:
        roman_to_int()
    else:
        int_to_roman()

        roman_numerals = []
        for numeral, value in roman_numeral_table:
            while value <= number:
                number -= value
                roman_numerals.append(numeral)

        print(''.join(roman_numerals))

Python是一种解释语言。因此,函数需要在第一次被调用之前定义。只需将def int_to_roman():块直接移动到罗马数字表定义下面,代码就可以正常工作了。你知道吗

像这样:

class Roman_Number():
    roman_numeral_table = [
    ("M", 1000), ("CM", 900), ("D", 500),
    ("CD", 400), ("C", 100),  ("XC", 90),
    ("L", 50),   ("XL", 40),  ("X", 10),
    ("IX", 9),   ("V", 5),    ("IV", 4),
    ("I", 1)
    ]

    def int_to_roman():
        number = int(input('Provide Number: '))
        if number < 1 or number > 3999:
            print('Number must be inbetween 1 and 3999')
        else:
            print('Valid Number')

        roman_numerals = []
        for numeral, value in roman_numeral_table:
            while value <= number:
                number -= value
                roman_numerals.append(numeral)

        print(''.join(roman_numerals))

        def roman_to_int():
            pass


    r = input('If you want to go from Roman to Number, enter "1." If you want to go from Number to Roman, enter "2"')

    if r == 1:
        roman_to_int()
    else:
        int_to_roman()

把你的代码改成这样应该行得通。Python要求您在调用函数之前定义它。你知道吗

    class Roman_Number():
        roman_numeral_table = [
        ("M", 1000), ("CM", 900), ("D", 500),
        ("CD", 400), ("C", 100),  ("XC", 90),
        ("L", 50),   ("XL", 40),  ("X", 10),
        ("IX", 9),   ("V", 5),    ("IV", 4),
        ("I", 1)
        ]


        r = input('If you want to go from Roman to Number, enter "1." If you want to go from Number to Roman, enter "2"')
        def int_to_roman():
            number = int(input('Provide Number: '))
            if number < 1 or number > 3999:
                print('Number must be inbetween 1 and 3999')
            else:
                print('Valid Number')

            roman_numerals = []
            for numeral, value in roman_numeral_table:
                while value <= number:
                    number -= value
                    roman_numerals.append(numeral)

            print(''.join(roman_numerals))

            def roman_to_int():
                pass

        if r == 1:
            roman_to_int()
        else:
            int_to_roman()

相关问题 更多 >

    热门问题