我多次使用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语句。你还可以从这里进一步清理
注意:我还没有测试过这个代码示例