【问题标题】:make python utilize any symbol's input让python利用任何符号的输入
【发布时间】:2018-12-05 20:27:29
【问题描述】:

我正在制作一个可以将数字转换为钢琴键的代码,

***抱歉,我的意思是"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

【问题讨论】:

    标签: python python-3.x input symbols


    【解决方案1】:

    你可以用ord把任意字符变成数字(基于ASCII values),然后用除法和余数把数字映射成钢琴键号和音阶,再用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'
    >>>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2023-03-12
      • 1970-01-01
      • 2022-08-03
      相关资源
      最近更新 更多