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;
所以我正在为学校做这个作业。我必须创建一个类似游戏的测验,提示用户将罗马数字加在一起并输入他们的答案。然后它会检查用户的答案是否正确,并告诉用户他们是对还是错。
到目前为止我有这个:
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;