提问人:Japs6901 提问时间:7/5/2023 最后编辑:DataJanitorJaps6901 更新时间:7/5/2023 访问量:67
避免嵌套 If Else 语句中的重复
Avoiding repetition in nested If Else statements
问:
我正在尝试通过 / 管理命令行语句。下面的代码有效,但感觉很长。尤其是每个嵌套/级别中的重复语句。有没有办法简单地留下任何内部级别并服从外部语句来整理代码?调用了两个函数,以及 。我没有包括这些,因为我真的只是想整理主要功能。我知道这个函数应该全部缩进,但这就是它从我的文件中粘贴的方式。if
else
else
if
else
else
rndm()
spcfc()
def main()
def main():
if len(sys.argv) == 1:
txt = input("Input: ")
rndm(txt)
if len(sys.argv) == 3:
if sys.argv[1] == "-f" or sys.argv[1] == "--font":
if sys.argv[2] in figlet.getFonts():
txt = input("Input: ")
spcfc(txt)
else:
print("Invalid usage")
sys.exit
else:
print("Invalid usage")
sys.exit
else:
print("Invalid usage")
sys.exit
答:
3赞
Zero
7/5/2023
#1
您可以使用逻辑组合嵌套的 s。if
and
import sys
def main():
if len(sys.argv) == 1:
txt = input("Input: ")
rndm(txt)
if (len(sys.argv) == 3) and (sys.argv[1] == "-f" or sys.argv[1] == "--font") and (sys.argv[2] in figlet.getFonts()):
txt = input("Input: ")
spcfc(txt)
else:
print("Invalid usage")
sys.exit()
此外,正如您在此处看到的,不再需要嵌套的 else 重复。
评论
0赞
Japs6901
7/6/2023
谢谢。我想过逻辑,但不确定是否可以使用括号进行分组。这极大地简化了我的代码。
1赞
Julien
7/5/2023
#2
请参阅@deceze的评论,但除此之外(以及概念也适用于您还没有免费解决方案的情况)您可以做这样的事情吗?
def main():
if len(sys.argv) == 1:
txt = input("Input: ")
rndm(txt)
if len(sys.argv) == 3:
if sys.argv[1] == "-f" or sys.argv[1] == "--font":
if sys.argv[2] in figlet.getFonts():
txt = input("Input: ")
spcfc(txt)
return
print("Invalid usage")
sys.exit()
请注意,使用这种方法的一个好处是它也可以与更复杂的分支一起使用......
评论
0赞
Japs6901
7/6/2023
谢谢。这很有效。我不知道使用“return”语句,除非从函数返回某些内容。请问,您的退货声明在这里到底是做什么的?我假设它只是默认为函数的第 1 级并打印无效用法 txt?
1赞
Julien
7/6/2023
return
只是在到达函数的任何地方结束函数执行。它不会跳出块(例如,像一个),它真的退出了函数(但不是整个程序,就像)。当返回“nothing”时,默认情况下实际上会返回 a(您可以忽略)。因此,如果所有 pass 都被调用,然后函数停止(返回)。但除此之外,执行只是跳过失败的检查,永远不会看到任何检查,因此最终会到达指令。break
exit()
None
if
spcfc(txt)
if
return
print("Invalid usage")
评论
argparse
sys.exit
if
else
sys.exit
sys.exit()