Python 3.5.2罗马数字测验

时间:2016-09-15 00:16:54

标签: python roman-numerals

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

到目前为止,我有这个:

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 方法,将罗马数字更改为整数,以便将它们加在一起。

4 个答案:

答案 0 :(得分:0)

您的错误说

local variable 'r_integer' referenced before assignment

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

答案 1 :(得分:0)

您需要在r_integer循环之前初始化while。添加到##### comment

下面的代码中
    #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]

答案 2 :(得分:0)

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

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

添加

r_integer = self.__integer

这样你就可以使用本地副本了。

但是你需要重载this post

中回答的整数方法

答案 3 :(得分:0)

这是我的解决方法:

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;