我正在开展一个项目,我需要将数值更改为字母字符,目前,我有这个:
if finposb == "2":
finposb = "a"
if finposb == "3":
finposb = "b"
if finposb == "4":
finposb = "c"
if finposb == "5":
finposb = "d"
if finposb == "6":
finposb = "e"
if finposb == "7":
finposb = "f"
if finposb == "8":
finposb = "g"
if finposb == "9":
finposb = "h"
我想知道是否有办法将其缩短为更短的代码行,谢谢!
答案 0 :(得分:7)
<stdio.h>
这应该有用,不需要字典。如果你想要它更短:
letters='abcdefghijklmnopqrstuvwxyz'
finposb=letters[int(finposb)-2]
答案 1 :(得分:7)
您不需要任何中间数据结构;使用finposb
的ASCII值(或Python 3中的Unicode代码点)。
# ord("a") - ord("2") == 47
finposb = chr(ord(finposb) + 47)
如果您没有像这样的好的隐式规则,则可以使用string.maketrans
制作转换表,并string.translate
将该表应用于您的输入。
>>> tbl = string.maketrans("23456789", "abcdefgh")
>>> string.translate("2", tbl)
'a'
如果第一个参数没有出现在翻译表中, translate
将充当身份函数:
>>> string.translate("z", tbl)
'z'
答案 2 :(得分:3)
使用字典:
finposb='abcdefghijklmnopqrstuvwxyz'[int(finposb)-2]
答案 3 :(得分:3)
在这种情况下,dictionary可能是您正在寻找的。 p>
finposb = {
"2": "a",
...
"9": "h"
}
>>> print(finposb["2"])
a
字典的一个优点是您可以将多个键映射到相同的值,例如,如果您希望"2"
和2
都映射到"a"
,您可以说< / p>
finposb["2"] = "a" # string
finposb[2] = "a" # numeric
此外,从钥匙中获取价值有两种合理的方式(例如&#34; 2&#34;到&#34; a&#34;)。
finposb[key] # raise KeyError if key is not in the dictionary
finposb.get(key, None) # default to None if the key is missing
第一个是方便的,因为它会抛出一个有用的错误并且可以确定密钥不在你的字典中,而第二个有许多其他便利,例如如果密钥丢失则能够自己返回。
finposb.get(key, key) # returns key if key does not map to a value
经典地,这种类型的表用于查找字符集,例如ASCII,其中可以以紧凑的方式存储许多字符(除了作为数字,您如何表达对计算机的信件? ?)以后由程序解释。
这种更现代的形式称为unicode,它可以用来描述超出&#34;普通&#34;以外的大量不同角色。拉丁字母。
答案 4 :(得分:2)
>>> pool = {"2": "a", "3": "b", "4": "c", "5": "d", "6": "e", "7": "f", "8": "g", "9": "h"}
>>> finposb = '2' # get any digit here
>>> if str(finposb) in pool.keys():
finposb = pool[str(finposb)]
>>> finposb
'a'
如果在字典中使用数字作为字符串,则在整个片段中将其表示为字符串。
答案 5 :(得分:2)
答案 6 :(得分:2)
import string
finposb = string.ascii_lowercase[int(finposb)-2]
答案 7 :(得分:1)
使用此
import string
finposb.translate(string.maketrans("".join([str(i) for i in range(2,10)]), "abcdefgh"))
或更简单
import string
finposb.translate(string.maketrans("23456789", "abcdefgh"))
答案 8 :(得分:0)
我会像这样使用字典理解:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
finposd = {letter:alphabet.index(letter) + 2 for letter in alphabet}