我可以使用其他东西来缩短代码,而不是在python中使用多个IF吗



我多次使用IF,但每个IF之间几乎没有变化,有没有其他方法可以对其进行编码,以压缩代码的行数,使其看起来更整洁?

def StringAll():
global print1, print2, print3
print1,print2,print3 = str(Number1), str(Number2), str(answer)
return
def MathStuff():
global MATH, answer
try: MATH = int(input("1 for +, 2 for -, 3 for *, 4 for/"))
except ValueError:
print("Only input number")
MathStuff()
if MATH == 1:
answer = Number1 + Number2
StringAll()
print(print1 + " + " + print2 + " = " + print3)
elif MATH == 2:
answer = Number1 - Number2
StringAll()
print(print1 + " - " + print2 + " = " + print3)
elif MATH == 3:
answer = Number1 * Number2
StringAll()
print(print1 + " * " + print2 + " = " + print3)
elif MATH == 4:
answer = Number1 / Number2
StringAll()
print(print1 + " / " + print2 + " = " + print3)
else:
print("You can only input number 1-4")
MathStuff()

减少行意味着我们不仅可以减少if else,还可以优化其他可能不必要的行,例如

VERSION 1(将StringAll重命名为Display(

Number1 = float(input('Enter a number 1'))
Number2 = float(input('Enter a number 2'))
def Display(operator, ans):
print(Number1, operator, Number2, '=', ans)
return
def MathStuff():
global MATH, answer
try: MATH = int(input("1 for +, 2 for -, 3 for *, 4 for/"))
except ValueError:
print("Only input number")
MathStuff()
if MATH == 1:
Display('+', Number1 + Number2)
elif MATH == 2:
Display('-', Number1 - Number2)
elif MATH == 3:
Display('*', Number1 * Number2)
elif MATH == 4:
Display('/', Number1 / Number2)
else:
print("You can only input number 1-4")
MathStuff()

由于我们消除了许多变量,因此减少了许多行

版本2(甚至进一步删除显示功能本身(

Number1 = float(input('Enter a number 1'))
Number2 = float(input('Enter a number 2'))
def MathStuff():
global MATH, answer
try: MATH = int(input("1 for +, 2 for -, 3 for *, 4 for/"))
except ValueError:
print("Only input number")
MathStuff()

if MATH == 1:
print(Number1, '+', Number2, '=', Number1 + Number2)
elif MATH == 2:
print(Number1, '-', Number2, '=', Number1 - Number2)
elif MATH == 3:
print(Number1, '*', Number2, '=', Number1 * Number2)
elif MATH == 4:
print(Number1, '/', Number2, '=', Number1 / Number2)
else:
print("You can only input number 1-4")
MathStuff()

或者为了最终的优化,我们甚至可以删除这些,如果不是的话,我们可以使用更短的方法

版本3(使用eval(

Number1 = input('Enter a number 1')
Number2 = input('Enter a number 2')
mapping = { 1: '+', 2: '-', 3: '*', 4: '/'}
def MathStuff():
global MATH, answer
try: MATH = int(input("1 for +, 2 for -, 3 for *, 4 for/"))
except ValueError:
print("Only input number")
MathStuff()
if MATH >= 1 and MATH <= 4:
ans = eval(Number1 + mapping[MATH] + Number2)
print(Number1, mapping[MATH], Number2, '=', ans)
else:
print("You can only input number 1-4")
MathStuff()
MathStuff()

没有测试代码,但这是在修复了一个小错误后给你的一个提示,以防出现问题,你可以实现几行优化。

如果您使用的是最新的python版本(3.10(,则可以使用match case语句
先看一看,然后开始。

你的功能可能看起来像这样:

def MathStuff():
global MATH, answer
try: MATH = int(input("1 for +, 2 for -, 3 for *, 4 for/"))
except ValueError:
print("Only input number")
MathStuff()
match MATH:
case 1:
answer = Number1 + Number2
StringAll()
print(print1 + " + " + print2 + " = " + print3)
case 2:
answer = Number1 - Number2
StringAll()
print(print1 + " - " + print2 + " = " + print3)
case 3:
answer = Number1 * Number2
StringAll()
print(print1 + " * " + print2 + " = " + print3)
case 4:
answer = Number1 / Number2
StringAll()
print(print1 + " / " + print2 + " = " + print3)
case _:
print("You can only input number 1-4")
MathStuff()

当然,这只是清理此代码的多种方法之一(正如其他人已经指出的那样(,但至少您将去掉many-if语句。你还可以从这里进一步清理
注意:我还没有测试过这个代码示例

最新更新