python - 让python利用任何符号的输入
问题描述
我正在制作一个可以将数字转换为钢琴键的代码,
***对不起,我的意思是理想的输出"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
解决方案
您可以使用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'
>>>
推荐阅读
- javascript - React JS useState 获取值为 true 的键
- mysql - 使用nodejs在mysql中使用三元运算符更新具有单个ENDPOINT的表单
- reactjs - 在 i18n 中设置默认语言
- python - 如何过滤具有多个布尔条件的数据框
- python-3.x - 应用程序与 buildpack 不兼容:https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz 在 heroku 服务器上部署项目
- swift - 将数据从 Alamofire 函数传递到 swift 操场中的全局变量中
- sql - 如何计算只有一种产品/所有产品的客户
- sql - 在两个日期之间搜索不返回通知的最后日期
- amazon-s3 - Kinesis firehose 写入 S3 但访问被拒绝
- javascript - 尝试将其属性之一分配给新变量时,用户对象返回未定义