Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 缩短代码_Python_Performance_If Statement_Optimization - Fatal编程技术网

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行!除息的