python跳出if语句代码_python – 更高效的代码(看似太多if语句)

我已经调查了这个,但我找不到任何帮助我的东西(道歉,如果类似的东西的答案可以帮助我).我正在编写一个货币转换器,它遭受了大量的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])

解决方法:

您始终可以使用词典进行查找:

lookup = {'C': {'C': ccint, 'S': ccint/10, 'E': ccint/50, 'G': ccint/100, 'P': ccint/1000},

'S': {'C': ccint*10, 'S': ccint, 'E': ccint/10, 'G': ccint/10, 'P': ccint/100},

'E': {'C': ccint*50, 'S': ccint*5, 'E': ccint, 'G': ccint/2, 'P': ccint/20},

'G': {'C': ccint*100, 'S': ccint*10, 'E': ccint*2, 'G': ccint, 'P': ccint/10},

'P': {'C': ccint*1000, 'S': ccint*100, 'E': ccint*20, 'G': ccint*10, 'P': ccint}

}

那么你所有的ifs大部分都包含在:

print(lookup[ccalpha[1]][ccalpha[3]])

但是可能包含其他字符吗?然后你需要引入一个后备:

try:

print(lookup[ccalpha[1]][ccalpha[3]])

except KeyError:

# Failed to find an entry for the characters:

print(ccalpha[1], ccalpha[3], "combination wasn't found")

如上所述,它不是最有效的方式,因为它每次都计算每次转换(即使是不必要的转换).拥有基线可能更有效,例如P并保存因子:

lookup = {'C': 1000,

'S': 100,

'E': 50,

'G': 10,

'P': 1,

}

# I hope I have them the right way around... :-)

print(ccint * lookup[ccalpha[3]] / lookup[ccalpha[1]])

标签:python,optimization,python-3-x,if-statement

来源: https://codeday.me/bug/20190716/1474735.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值