所以我正在尝试创建一个包含字典的程序,并将字符串转换为1&0和0的盲文表示。我的问题是当用户输入大写字母时我不知道该怎么做。如果他们输入那封信,我想在其信件代表之前追加000001。像Bob看起来像" 000001110000101010110000"
这是我到目前为止所拥有的
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))
答案 0 :(得分:3)
最好的方法是将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'
答案 1 :(得分:0)
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
检查字母是否为大写答案 2 :(得分:0)
最简单的方法是为每个大写字母添加字典键。这些值将以“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