Есть ли способ проверить и посмотреть, является ли ключ в моем словаре на python заглавными, и добавляет ли он что-то к нему? - PullRequest
0 голосов
/ 17 мая 2018

Итак, я пытаюсь создать программу, которая имеет словарь и преобразует строку в представление Брайля в 1 и 0. Моя проблема в том, что я не знаю, что делать, когда пользователь вводит заглавную букву. если они введут это письмо, я хочу добавить 000001 перед его буквенным представлением. как Боб будет выглядеть как "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))

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Обновите свой словарь

Лучшим подходом будет обновить ваш 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'
0 голосов
/ 17 мая 2018

Самый простой способ - добавить ключи в словарь для каждой заглавной буквы.Значения будут дополнены последовательностью «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
0 голосов
/ 17 мая 2018
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, чтобы проверить, является ли буква заглавной
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...