有没有办法检查我的python词典中的一个键是否是capital,以及它是否是append?

2024-10-03 11:14:51 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我试图创建一个程序,该程序有一个字典,并将字符串转换为1和0的盲文表示形式。我的问题是,当用户输入大写字母时,我不知道该怎么办。如果他们输入那个字母,我想在它的字母表示之前加上000001。就像鲍勃看起来像“0000011100000101010110000”

这就是我目前所拥有的

myDict = {'a' : '100000','b': '110000','c': '100100','d': '100110','e': '100010','f': '110100','g': '110110','h':'110010','i': '010100','j':'010110','k': '101000','l': '111000','m':'101100','n': '101110','o': '101010','p': '111100','q': '111110','r': '111010','s':'011100', 't': '011110','u': '101001','v': '111001','w': '010111','x': '101101','y': '101111','z': '101011'}
def braille(string, brailleDict):
    return ''.join(brailleDict[char] for char in string)
print(braille('bob', myDict))

Tags: 字符串用户程序stringreturn字典def字母
3条回答
myDict = {'a' : '100000','b': '110000','c': '100100','d': '100110','e': '100010','f': '110100','g': '110110','h':'110010','i': '010100','j':'010110','k': '101000','l': '111000','m':'101100','n': '101110','o': '101010','p': '111100','q': '111110','r': '111010','s':'011100', 't': '011110','u': '101001','v': '111001','w': '010111','x': '101101','y': '101111','z': '101011'}
def braille(string, brailleDict):
    return ''.join("000001{0}".format(brailleDict[char.lower()]) if char.isupper() else brailleDict[char] for char in string)

print(braille('bob', myDict))
print(braille('Bob', myDict))

输出:

110000101010110000
000001110000101010110000
  • str.isupper检查字母是否大写

最简单的方法是为每个大写字母在字典中添加关键字。这些值将在“shift”序列的前面。对braille函数没有其他更改,只需更新字典,就可以添加标点符号、数字等其他符号。你知道吗

braille_dict = {'a' : '100000','b': '110000','c': '100100','d': '100110','e': '100010','f': '110100','g': '110110','h':'110010','i': '010100','j':'010110','k': '101000','l': '111000','m':'101100','n': '101110','o': '101010','p': '111100','q': '111110','r': '111010','s':'011100', 't': '011110','u': '101001','v': '111001','w': '010111','x': '101101','y': '101111','z': '101011'}

# add upper case versions of letters   
shift = '000001'
braille_dict.update({k.upper(): '{}{}'.format(shift, braille_dict[k]) for k in braille_dict})

def braille(string, braille_dict):
    return ''.join(braille_dict[char] for char in string)

for s in 'bob', 'Bob', 'BOB', 'Sausage':
    print('{}: {}'.format(s, braille(s, braille_dict)))

输出

bob: 110000101010110000
Bob: 000001110000101010110000
BOB: 000001110000000001101010000001110000
Sausage: 000001011100100000101001011100100000110110100010

更新你的词典

最好的方法是更新你的brailleDict来说明大写字母。你最初的解决方案就会奏效。你知道吗

尽管如此,这允许您使用str.translate方法,这可以说是一个更好的解决方案。你知道吗

brailleDict = {'a' : '100000', 'b': '110000', ...}

# Add the capital letter Braille representations to your dict
brailleDict.update({char.upper(): '000001' + code for char, code in brailleDict.items()})

# Create a translation dict to be used by `str.translate`
brailleTranslation = str.maketrans(brailleDict)

print('bob'.translate(brailleTranslation)) # '110000101010110000'
print('Bob'.translate(brailleTranslation)) # '000001110000101010110000'

缺点是str.translate会使它无法识别的字符保持不变。您可以使用str.isalpha检查字符串是否可翻译,如果不可翻译,则生成ValueError,或者更新翻译表以删除未知字符。你知道吗

from collections import defaultdict

...

brailleTranslation = defaultdict(lambda: None, str.maketrans(brailleDict))

print('#bob'.translate(brailleTranslation)) # still prints '110000101010110000'

如果用所有盲文字符填充dict,则可以在上述函数中检查s.isprintable()。你知道吗

使用str.upper

或者,可以使用str.isupper检查字符串是否由大写字符组成。你知道吗

brailleDict = {'a' : '100000', 'b': '110000', ...}

def braille(string):
    return ''.join(('000001' if char.isupper() else '')
                   + brailleDict[char.lower()] for char in string)

print(braille('bob')) # '110000101010110000'
print(braille('Bob')) # '000001110000101010110000'

相关问题 更多 >