заставить Python использовать любой символ ввода - PullRequest
0 голосов
/ 27 июня 2018

Я делаю код, который может переводить числа в клавиши пианино,

*** Извините за путаницу, я имел в виду, что идеальный вывод для "3.14159ABC265" это "E1 _ C1 F1 C1 G1 D2 _ _ _ D1 A2 G1", однако python выдаст ошибку, когда на входе будет #, \ или что-то еще

коды:

numbers = str(input('This code will convert numbers to piano keys, \nnow input any numbers here'))
keys    = str('')

while len(numbers)    ==  str(0):           
    G             =  str('_ ')          
    if numbers[0] == str(0): G='B1 '        
    if numbers[0] == str(1): G='C1 '        
    if numbers[0] == str(2): G='D1 '
    if numbers[0] == str(3): G='E1 '
    if numbers[0] == str(4): G='F1 '
    if numbers[0] == str(5): G='G1 '
    if numbers[0] == str(6): G='A2 '
    if numbers[0] == str(7): G='B2 '
    if numbers[0] == str(8): G='C2 '
    if numbers[0] == str(9): G='D2 '
    keys          += G              
    numbers       =  numbers[1:len(numbers)]    

print(keys)

Этот код уже работает, но не тогда, когда на входе есть \, # или что-то еще. Я искал некоторое время, но не нашел ответа.

Кстати, я думаю, что в python должна быть возможность отключить различия между числами и строками в коротком коде, подобном этому XD

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете использовать ord, чтобы превратить любые символы в числа (на основе ASCII-значений ), затем использовать деление и остаток, чтобы отобразить числа в клавиши и шкалы фортепиано, а затем использовать chr превратить номера клавиш в алфавиты. Вот пример из одной строки:

>>> ' '.join(map(lambda c: chr(ord('A') + int((ord(c) - ord(' ')) % 7)) + str(int((ord(c) - ord(' ')) / 7)), input()))
3.14159ABC265
'F2 A2 D2 G2 D2 A3 E3 F4 G4 A5 E2 B3 A3'
>>>
...