python - 如何返回多字典的键值?

标签 python python-3.x dictionary

我有这个代码

ones = {1 : "I", 2 : "II", 3 : "III", 4 : "IV", 5: "V", 6 : "VI",\
        7 : "VII", 8 : "VIII", 9 : "IX"}
tens = {10 : "X", 20 : "XL", 30 : "XXX", 40 : "XL", 50 : "L",\
        60 : "LX", 70 : "LXX", 80 : "LXXX", 90 : "XC"}
hun = {100 : "C", 200 : "CC", 300 : "CCC"}

ui = input('type a number from 1 to 303: ')
k = ui
print(ones[k])

我试图让用户输入一个从 1 到 399 的数字。

当我使用ones[ui]时,我得到了一个

KeyError '2'

2 是我输入的数字。所以,我将 ui 的输入传递给另一个名为 k 的变量,但我遇到了同样的问题。

在python的live环境下(idle),当我写ones[2]时,我得到的是"II"而不是上面的错误。

那么,到底是什么问题,我该如何解决呢?

最佳答案

那是因为你的输入是一个string,而不是一个int(使用python 3),所以你实际上是在做ones["2"] 失败了。

ui = int(input('type a number from 1 to 303: '))

会解决这个问题。

请注意,如果用户输入“303”,您也会收到一个键错误。所以最好为您的示例执行 print(ones[ui%10])(您还必须检查 !=0,因为罗马数字不支持它 :))

除了 20 : "XL", 应该是 20 : "XX",

我的修复建议完全实现了 number build(也适用于 python 2):

ones = {1 : "I", 2 : "II", 3 : "III", 4 : "IV", 5: "V", 6 : "VI",
        7 : "VII", 8 : "VIII", 9 : "IX",0:""}
tens = {10 : "X", 20 : "XX", 30 : "XXX", 40 : "XL", 50 : "L",
        60 : "LX", 70 : "LXX", 80 : "LXXX", 90 : "XC",0:""}
hun = {100 : "C", 200 : "CC", 300 : "CCC",0:""}

ui = int(input('type a number from 1 to 303: '))
if 0 < ui < 304:
    units = ui%10
    tenths = (ui-units)%100
    hundreds = (ui-tenths-units)

    string = "".join([d[v] for d,v in zip((hun,tens,ones),(hundreds,tenths,units))])
    print(string)

关于python - 如何返回多字典的键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897895/

相关文章:

python-3.x - 当模型包含 UDT 集时,Cassandra python 驱动程序 ORM 崩溃

java - 列表和 map 的通用集合?

将复杂的 json 转换为 csv 的 Python 程序,适合初学者

c++ - 我正在尝试创建一个使用指针算术返回一对的方法,但是它会出错?

python - 在 Pandas 中,如何在 DataFrame 中排在前十组数据?

python - Flask 应用程序在通过 nginx 代理时提供无处不在的 404

python - 在 NeoModel 中创建之前查看节点是否存在

python - 使用lxml库解析xliff文件

python - 为什么这些函数相同,但输出不同的值?

python-3.x - 如何使用 python 和 PIL 检测图像的特定边框细节并根据它进行裁剪?