2016-09-15 4 views
1

Так что я делаю это задание для школы. Я должен создать викторину, подобную игре, которая предложит пользователю добавить римские цифры вместе и ввести их ответ. Затем он проверит ответ пользователя с правильным ответом и сообщит пользователю, правильно ли он или нет.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, чтобы изменить римские цифры на целые числа, чтобы они могли быть добавлены вместе.

ответ

0

Вы не используете целое число, определенное для себя. Попробуйте добавить объявление после

r_string = r_string.upper() 

Добавить

r_integer = self.__integer 

Таким образом, у вас есть локальная копия работать.

Однако вам нужно перегрузить метод целочисленного который отвечает в this post

+0

, если я это сделаю, я получаю ошибку. Объект «RomanNumeral» не имеет атрибута «_RomanNumeral__integer». Я думаю, что если я могу перегрузить метод __int__, это может устранить эти проблемы. Но я не знаю, как перегружать метод __int_ – Brock

+0

Мой плохой. Теперь я вижу, что вы условно применяете целочисленное значение строки, только если бы это было случайно. –

+0

Перегружает ли int для вас? –

0

Ваша ошибка говорит

local variable 'r_integer' referenced before assignment 

Это означает, что вы пытались использовать переменную, прежде чем вы определили его. Определите r_integer до 0 (или некоторого другого номера) до цикла while, и ваша проблема должна быть исправлена.

0

Вам необходимо инициализировать r_integer перед циклом while. К вашему коду добавлен код #####

#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] 
+0

Я не думаю, что перепроведении весь код надо, просто направить его туда, где поместить код. –

+0

Когда я это делаю, вывод состоит из 10 строк того, что когда-либо инициализировало r_integer на + 1 (т. Е. Если я установил r_integer = 0, тогда вывод будет строками I, если я установил его в 2, тогда выход будет десять строк III) – Brock

Смежные вопросы