Abd*_*aia 1 python dictionary python-3.x
我有这个代码
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])
Run Code Online (Sandbox Code Playgroud)
我试图让用户输入1到399之间的数字.
当我用的时候ones[ui],我得到了一个
KeyError'2'
2是我输入的数字.所以,我将输入传递ui给另一个名为的变量k,但是我遇到了同样的问题.
在python的实时环境中(空闲),当我写的时候ones[2],我得到的"II"不是上面的错误.
那么,究竟是什么问题,我该如何解决呢?
那是因为你的输入是a string,而不是int(使用python 3),所以你实际上做的ones["2"]是失败的.
ui = int(input('type a number from 1 to 303: '))
Run Code Online (Sandbox Code Playgroud)
会解决这个问题.
请注意,如果用户输入"303",您还会收到一个关键错误.所以print(ones[ui%10])你的例子更好(你也必须检查!= 0,因为罗马数字不支持它:))
除了20 : "XL",应该20 : "XX",
我的修复提议完全实现了数字构建(也适用于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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |