我有一个程序,可以将罗马数字转换为整数,反之亦然。我的问题是,我真的不知道如何创建一个函数来检查用户输入是否是有效的罗马数字。我现在的代码:
def checkIfRomanNumeral(numeral):
"""Controls that the userinput only contains valid roman numerals"""
numeral = numeral.upper()
validRomanNumerals = ["M", "D", "C", "L", "X", "V", "I", "(", ")"]
for letters in numeral:
if letters not in validRomanNumerals:
print("Sorry that is not a valid roman numeral")
return True
elif letters in validRomanNumerals:
romanToInt(numeral)
break
字符串
我认为现在的问题是,由于for循环的原因,该函数只检查输入(numeric)中的第一个字母。有人能帮助我让函数检查整个输入并打印(“对不起,这不是一个有效的罗马数字”),如果输入的任何字母不是罗马数字。validRomanNumerals列表中的括号用于转换大于4000的数字,所以它们必须在那里。
7条答案
按热度按时间8ehkhllq1#
编写从int到Romans的转换器是一个标准的面试问题。我曾经写过以下双向实现(
toString
--十进制到罗马;parse
--罗马到十进制)。该实现满足了罗马数表示的一些额外标准,这些标准不是强制性的,但通常遵循:字符串
0x6upsns2#
字符串
返回一个布尔值,无论给定的“numeric "是否是罗马数字。
kjthegm63#
除了已经指出的设计问题,我想回答这个问题为什么你的for循环没有遍历所有的数字
如果你的代码认为这些条目是有效的,那么循环进入
elif
子句,在那里它调用romanToInt(numeral)
,然后调用break
。说明:只要满足本例中的条件,循环将停止通过
i in list
字符串
irtuqstp4#
代替循环,你可以将输入和有效的文字都转换成集合,然后对它们进行子操作:
字符串
如果
numeral
有效,则返回True
,否则返回False
。(假设空字符串有效)t30tvxxf5#
有一种方法我建立的解决方案,你可以很容易地修改它,以您的需要,甚至得到的数字。我的程序是打印,如果从用户的字符串是一个有效的数字,但你可以很容易地改变它,以获得实际的值。
字符串
e37o9pze6#
我知道最初的海报是用Python写的,但我已经从上面引用了Oleg的答案,将其移植到PHP,并纠正了它的缺陷。
这段PHP代码应该正确地将罗马数字转换为数字,并且不应该允许转换无效的罗马数字。
字符串
kognpnkq7#
在
for
循环后调用romantoint
字符串