【发布时间】:2017-01-30 16:34:42
【问题描述】:
我对此进行了调查,但找不到任何对我有帮助的东西(如果有类似问题的答案可能对我有帮助,我深表歉意)。我正在编写一个货币转换器,它受到大量if 的影响,看起来效率不高,我也无法想象它的可读性非常好,所以我想知道在这种情况下如何编写更高效的代码:
prompt = input("Input") #For currency, inputs should be written like "C(NUMBER)(CURRENCY TO CONVERT FROM)(CURRENCY TO CONVERT TO)" example "C1CPSP"
if prompt[0] == "C": #Looks at first letter and sees if it's "C". C = Currency Conversion
#CP = Copper Piece, SP = Silver Piece, EP = Electrum Piece, GP = Gold Piece, PP = Platinum Piece
ccint = int(''.join(list(filter(str.isdigit, prompt)))) # Converts Prompt to integer(Return string joined by str.(Filters out parameter(Gets digits (?), from prompt))))
ccalpha = str(''.join(list(filter(str.isalpha, prompt)))) #Does the same thing as above expect with letters
if ccalpha[1] == "C": #C as in start of CP
acp = [ccint, ccint/10, ccint/50, ccint/100, ccint/1000] #Array of conversions. CP, SP, EP, GP, PP
if ccalpha[3] == "C": #C as in start of CP
print(acp[0]) #Prints out corresponding array conversion
if ccalpha[3] == "S": #S as in start of SP, ETC. ETC.
print(acp[1])
if ccalpha[3] == "E":
print(acp[2])
if ccalpha[3] == "G":
print(acp[3])
if ccalpha[3] == "P":
print(acp[4])
if ccalpha[1] == "S":
asp = [ccint*10, ccint, ccint/10, ccint/10, ccint/100]
if ccalpha[3] == "C":
print(asp[0])
if ccalpha[3] == "S":
print(asp[1])
if ccalpha[3] == "E":
print(asp[2])
if ccalpha[3] == "G":
print(asp[3])
if ccalpha[3] == "P":
print(asp[4])
if ccalpha[1] == "E":
aep = [ccint*50, ccint*5 ,ccint , ccint/2, ccint/20]
if ccalpha[3] == "C":
print(aep[0])
if ccalpha[3] == "S":
print(aep[1])
if ccalpha[3] == "E":
print(aep[2])
if ccalpha[3] == "G":
print(aep[3])
if ccalpha[3] == "P":
print(aep[4])
if ccalpha[1] == "G":
agp = [ccint*100, ccint*10, ccint*2, ccint, ccint/10]
if ccalpha[3] == "C":
print(agp[0])
if ccalpha[3] == "S":
print(agp[1])
if ccalpha[3] == "E":
print(agp[2])
if ccalpha[3] == "G":
print(agp[3])
if ccalpha[3] == "P":
print(agp[4])
if ccalpha[1] == "P":
app = [ccint*1000, ccint*100, ccint*20, ccint*10, ccint]
if ccalpha[3] == "C":
print(app[0])
if ccalpha[3] == "S":
print(app[1])
if ccalpha[3] == "E":
print(app[2])
if ccalpha[3] == "G":
print(app[3])
if ccalpha[3] == "P":
print(app[4])
【问题讨论】:
-
你熟悉字典吗?
-
我不后悔
-
你可以使用字典来代替if语句,但是对于像你使用过的较小的表达式,效率变得毫无意义,因为if语句对于小型表达式已经快了很多。但是字典确实提供了更好的可读性。提供更好可读性的另一件事是使用 for 循环或生成器,但字典提供更好的可读性和效率,因此它是更好的选择(Efficiency comparison of if statement and dictionary)(MSeifert 提供了所需的字典)
-
你也可以试试re模块中的正则表达式。
标签: python python-3.x if-statement optimization