问题描述
我无法将整数转换为罗马数字,因为它有一个带方括号的整数输出(我很确定它是一个列表,但我想要的是一个整数),我找不到解决为什么我在 'rom' 值上有 'None' 的原因。 我用的是python3。
roman.py
#!/usr/bin/env python3
import sys
def numToRom(number):
rom = ["","I","III","IV","V","VI","VII","VIII","IX"]
if number in range(0,9):
result = rom[number]
return result
num = sys.argv[1:]
rom = numToRom(num)
print(num," is ",rom)
$ ./roman.py 2
旧输出:
['2'] is None
所需的输出:
2 is II
解决方法
您的问题源于您将一个包含字符的列表传递给您的函数。该函数需要一个整数 (if number in range(0,9)
),因此您需要将其转换为正确的整数。
import sys
def numToRom(number):
if type(number) is list: # If you know your number might be a list with only one str(value)
number = int(number[0])
rom = ["","I","III","IV","V","VI","VII","VIII","IX"]
if number in range(0,9):
result = rom[number]
return result
如果 number
的形式为 ['{some digit}]
,这将特别适用于您的用例。如果你想变得更漂亮,你可以使用递归返回一个列表,其中包含列表中每个数字的罗马数字,如下所示:
def numToRom(number):
if type(number) is list:
rom = []
for value in number:
rom.append(numToRom(int(value)))
return rom
else:
rom = ["","IX"]
if number in range(0,9):
result = rom[number]
return result
>>> num = ['2','3','5']
>>> numToRom(num)
['2','5'] is ['III','IV','VI']
请注意,即使输入列表中的值不是字符,而是普通整数,此函数也能工作。
>>> num = [2,3,5]
>>> rom = numToRom(num)
[2,5] is ['III','VI']
,
- pip 安装罗马
import roman
print(roman.toRoman(int(input())))