如何减少类似的if语句python?

时间:2017-05-27 15:31:40

标签: python

我正在开展一个项目,我需要将数值更改为字母字符,目前,我有这个:

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"

我想知道是否有办法将其缩短为更短的代码行,谢谢!

9 个答案:

答案 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可能是您正在寻找的。

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)

您可以滥用内置的 chr() 并获取:

finposb = chr(int(finposb)+95)

不对其进行硬编码。

答案 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}
相关问题