Python 缩短代码
有没有办法缩短这个代码?它工作得很好,但必须有办法让它看起来更好Python 缩短代码,python,performance,if-statement,optimization,Python,Performance,If Statement,Optimization,有没有办法缩短这个代码?它工作得很好,但必须有办法让它看起来更好 #d=69+12*log(2)*(f/440) #d is midi, f is frequency import math f=raw_input("Type the frequency to be converted to midi: ") d=69+(12*math.log(float(f)/440))/(math.log(2)) d=round(d) 上部是转换器,下部是需要缩短的区域 if d==127: pr
#d=69+12*log(2)*(f/440)
#d is midi, f is frequency
import math
f=raw_input("Type the frequency to be converted to midi: ")
d=69+(12*math.log(float(f)/440))/(math.log(2))
d=round(d)
上部是转换器,下部是需要缩短的区域
if d==127:
print("G")
elif d==126:
print("F#")
elif d==125:
print("F")
elif d==124:
print("E")
elif d==123:
print("D#")
elif d==122:
print("D")
elif d==121:
print("C#")
elif d==120:
print("C")
elif d==119:
print("B")
elif d==118:
print("A#")
elif d==117:
print("A")
elif d==116:
print("G#")
elif d==115:
print("G")
elif d==114:
print("F#")
elif d==113:
print("F")
elif d==112:
print("E")
elif d==111:
print("D#")
elif d==110:
print("D")
elif d==109:
print("C#")
elif d==108:
print("C")
elif d==107:
print("B")
elif d==106:
print("A#")
elif d==105:
print("A")
elif d==104:
print("G#")
elif d==103:
print("G")
elif d==102:
print("F#")
elif d==101:
print("F")
elif d==100:
print("E")
elif d==99:
print("D#")
elif d==98:
print("D")
elif d==97:
print("C#")
elif d==96:
print("C")
elif d==95:
print("B")
elif d==94:
print("A#")
elif d==93:
print("A")
elif d==92:
print("G#")
elif d==91:
print("G")
elif d==90:
print("F#")
elif d==89:
print("F")
elif d==88:
print("E")
elif d==87:
print("D#")
elif d==86:
print("D")
elif d==85:
print("C#")
elif d==84:
print("C")
elif d==83:
print("B")
elif d==82:
print("A#")
elif d==81:
print("A")
elif d==80:
print("G#")
elif d==79:
print("G")
elif d==78:
print("F#")
elif d==77:
print("F")
elif d==76:
print("E")
elif d==75:
print("D#")
elif d==74:
print("D")
elif d==73:
print("C#")
elif d==72:
print("C")
elif d==71:
print("B")
elif d==70:
print("A#")
elif d==69:
print("A")
elif d==68:
print("G#")
elif d==67:
print("G")
elif d==66:
print("F#")
elif d==65:
print("F")
elif d==64:
print("E")
elif d==63:
print("D#")
elif d==62:
print("D")
elif d==61:
print("C#")
elif d==60:
print("C")
elif d==59:
print("B")
elif d==58:
print("A#")
elif d==57:
print("A")
elif d==56:
print("G#")
elif d==55:
print("G")
elif d==54:
print("F#")
elif d==53:
print("F")
elif d==52:
print("E")
elif d==51:
print("D#")
elif d==50:
print("D")
elif d==49:
print("C#")
elif d==48:
print("C")
elif d==47:
print("B")
elif d==46:
print("A#")
elif d==45:
print("A")
elif d==44:
print("G#")
elif d==43:
print("G")
elif d==42:
print("F#")
elif d==41:
print("F")
elif d==40:
print("E")
elif d==39:
print("D#")
elif d==38:
print("D")
elif d==37:
print("C#")
elif d==36:
print("C")
elif d==35:
print("B")
elif d==34:
print("A#")
elif d==33:
print("A")
elif d==32:
print("G#")
elif d==31:
print("G")
elif d==30:
print("F#")
elif d==29:
print("F")
elif d==28:
print("E")
elif d==27:
print("D#")
elif d==26:
print("D")
elif d==25:
print("C#")
elif d==24:
print("C")
elif d==23:
print("B")
elif d==22:
print("A#")
elif d==21:
print("A")
elif d==20:
print("G#")
elif d==19:
print("G")
elif d==18:
print("F#")
elif d==17:
print("F")
elif d==16:
print("E")
elif d==15:
print("D#")
elif d==14:
print("D")
elif d==13:
print("C#")
elif d==12:
print("C")
elif d==11:
print("B")
elif d==10:
print("A#")
elif d==9:
print("A")
elif d==8:
print("G#")
elif d==7:
print("G")
elif d==6:
print("F#")
elif d==5:
print("F")
elif d==4:
print("E")
elif d==3:
print("D#")
elif d==2:
print("D")
elif d==1:
print("C#")
elif d==0:
print("C")
使用列表
notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G"]
print notes[d]
使用列表和模块化算法:
notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
print notes[d % len(notes)]
由于您正在检查0到127之间的整数,因此
列表
或元组
将是完美的,因为您只需通过索引即可访问它:
>>> l = ['C', 'C#', 'D', 'C', 'C#', 'D']
>>> d = 1
>>> print(l[d])
C#
除此之外,由于模式重复,您可以使用%
运算符进行除法并获得余数,这将允许您使用列表
或元组
的单个循环:
>>> l = ['C', 'C#', 'D']
>>> d = 5
>>> print(l[d%3])
D
在您的案例中使用d%12
而不是d%3
,因为这是您拥有的物品数量
由于您使用的是Python 2,根据raw_input()
的使用和round()
的行为判断,您需要将d
转换为一个带有d=int(round(d))
的整数,然后再将其用作索引
小心那些
print
语句,因为添加括号并不会将其转换为类似Python 3的print()
函数。如果您执行类似于print('hello','world')
的操作,您将得到('hello','world')
,而不是在Python 3中看到的'hello world'
(或在Python 2中导入了print()
函数)。首先要注意的是,这些值是循环的,它们每12步重复一次(八度音阶中半色调的数量)。您可以使用模数运算符%
找到周期内的位置。然后您只需执行12个测试
但这可以通过使用数组来简化,其中每个数组索引对应一个注释
notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
d_in_octave = d % 12;
print notes[d_in_octave]
使用映射,如数组或哈希表如果代码有效,您应该在stack exchange web的另一个站点(名为)上询问此问题。很抱歉@davejal我没有意识到我不允许提交有关代码格式的问题。感谢参考:Dthanks获得反馈,但每当我尝试使用此列表时,我都会收到一个o“类型错误:列表索引必须是整数,而不是浮点”的输出@SpencerChurchill:1)使用
int(index)
将索引
转换为整数,2)使用d%len(lst)
而不是硬编码长度(即d%3
),因为它会回来咬你(作为一个bug)如果您在其中添加/删除条目。@SpencerChurchill-抱歉;我看到了带有print
语句的括号,以为您在使用Python3,但没有注意到表示Python2的raw\u input()
。在Python2中,round()
返回一个float
,而在Python3中,当您四舍五入到小数点后零位时,它返回一个int
!非常感谢!程序从262行增加到8行!除息的