python-3.x - 如何将整数转换为罗马数字?
问题描述
我很难将整数转换为罗马数字,因为有一个带方括号的整数输出(我很确定这是一个列表,但我想要的是一个整数),我找不到解决方案为什么我'在'rom'值上'没有'。我正在使用python3。
罗马书
#!/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 = ["", "I", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
if number in range(0, 9):
result = rom[number]
return result
>>> num = ['2', '3', '5']
>>> numToRom(num)
['2', '3', '5'] is ['III', 'IV', 'VI']
请注意,即使输入列表中的值不是字符,而是普通整数,此函数也有效。
>>> num = [2, 3, 5]
>>> rom = numToRom(num)
[2, 3, 5] is ['III', 'IV', 'VI']
推荐阅读
- function - Haskell 中的 $ 是什么,以及如何将函数应用于函数
- xamarin.forms - ListView 未正确显示标签
- fortran - PGI 编译器使用 fortran 类型绑定过程创建错误
- java - 在调用 JAX-RS Rest API 方法时出现 404 Not Found
- c++ - C++ cout 和 endl 无法在终端上正确打印
- java - IClientConfig 参数的用途是什么?
- json - PostgreSQL 9.5:将 json_agg 结果组合成单个 json 对象
- python - 在python中并行执行'N'个函数
- excel - 基于单元格值隐藏行非常慢
- javascript - 编译和缩小时让 child_process.fork() 在电子中工作