Python 3.5.2 罗马数字问答

Python 3.5.2 Roman Numeral Quiz

所以我正在为学校做这个作业。我必须创建一个类似游戏的测验,提示用户将罗马数字加在一起并输入他们的答案。然后它会检查用户的答案是否正确,并告诉用户他们是对还是错。

到目前为止我有这个:

class RomanNumeral:
    index = 0
    while index < len(integer_list) - 1:
        #if a lower number is first, it should be subtracted, like IX, 
        #the one should be subtracted, but the 10 added
        if integer_list[index] < integer_list[index + 1]:
            r_integer -= integer_list[index]
        else:
            r_integer += integer_list[index]
        index += 1
    #Always add the last number
    r_integer += integer_list[index]
    #Store r_integer as an instance data item
    self.__integer = r_integer
    return

def main():
        roman1 = RomanNumeral('random')
        roman2 = RomanNumeral('random')
        correct_answer = roman1 + roman2
main()

但是当我 运行 它时,我得到这个错误:

r_integer += integer_list[index]
UnboundLocalError: local variable 'r_integer' referenced before assignment

关于如何解决这个问题有什么建议吗?

此外,我需要帮助重载 int 方法以将罗马数字更改为整数,以便将它们相加。

你的错误说

local variable 'r_integer' referenced before assignment

这意味着您在定义变量之前尝试使用它。在 while 循环之前将 r_integer 定义为 0(或其他数字),您的问题应该得到解决。

您需要在 while 循环之前初始化 r_integer。添加到您的代码下面的 ##### 注释

    #Add if the number is greater than the one that follows, otherwise
    #subtract r_integer = 0
    #Stands for roman integer or the integer equivalent of the roman string
    index = 0
    ##### Initialize r_integer before the while loop
    r_integer = 0 
    while index < len(integer_list) - 1:
        #if a lower number is first, it should be subtracted, like IX, 
        #the one should be subtracted, but the 10 added
        if integer_list[index] < integer_list[index + 1]:
            r_integer -= integer_list[index]
        else:
            r_integer += integer_list[index]
        index += 1
    #Always add the last number
    r_integer += integer_list[index]

您没有使用为自己定义的整数。尝试在

之后添加声明
 r_string = r_string.upper()

添加

r_integer = self.__integer

这样您就可以使用本地副本。

但是您确实需要重载 this post

中回答的整数方法

这是我的解决方案:

class Solution:
def romanToInt(self, s):
    """
    :type s: str
    :rtype: int
    """
    array_representation = []
    for i in range(len(s)):
        array_representation.append(s[i]);
    total = 0
    i = 0
    print(array_representation)
    while (i < len(array_representation)):

        if (i < len(array_representation) - 1 and val(array_representation[i + 1]) > val(array_representation[i])):
            total += (val(array_representation[i + 1]) - val(array_representation[i]))
            i = i + 2;
        else:
            total += val(array_representation[i]);
            i = i + 1;

    return total;

这是我用的辅助函数

def val(value):
if (value == "I"):
    return 1
if (value == "V"):
    return 5
if (value == "X"):
    return 10;
if (value == "L"):
    return 50;
if (value == "C"):
    return 100;
if (value == "D"):
    return 500;
if (value == "M"):
    return 1000;