如果没有if和elif语句,我怎么写这段代码?



我想让我的代码更复杂,我该怎么做呢?

if "valorant" in command:
subprocess.call(["taskkill","/F","/IM","VALORANT-Win64-Shipping.exe"])
elif "comp" in command:
os.system("shutdown /s /t 1")
elif "steam" in command:
subprocess.call(["taskkill","/F","/IM","steam.exe"])
elif "discord" in command:
subprocess.call(["taskkill","/F","/IM","Discord.exe"])
elif "cyberpunk" in command:
subprocess.call(["taskkill","/F","/IM","Cyberpunk2077.exe"])

您可以将所有要执行的命令与关键字一起放在字典中。

commands = {
"valorant": lambda: subprocess.call(["taskkill","/F","/IM","VALORANT-Win64-Shipping.exe"]),
"comp": lambda: os.system("shutdown /s /t 1"),
"stream": lambda: subprocess.call(["taskkill","/F","/IM","steam.exe"]),
"discord": lambda: subprocess.call(["taskkill","/F","/IM","Discord.exe"]),
"cyberpunk": lambda: subprocess.call(["taskkill","/F","/IM","Cyberpunk2077.exe"])
}
for k, f in commands.items():
if k in command:
f()
break

正如@jthulhu在问题的评论3中提到的,Python 3.10+支持"开关";语句。我是它的粉丝,所以我想把它加入其中。

def match_example(command):
match command:
case 'valorant':
kill_valorant();
case 'comp':
shutdown_computer()
case 'steam':
kill_steam()
case 'discord':
kill_discord()
case 'cyberpunk':
kill_cyberpunk()
case _:
kill_everything_in_sight()

如果command是一个令牌列表,例如' ['kill', 'something'],你可以使用解构…

def match_example(command):
match command:
case ['kill', 'valorant']:
kill_valorant();
case ['kill', 'comp']:
shutdown_computer()
case ['kill', 'steam']:
kill_steam()
case ['kill', 'discord']:
kill_discord()
case ['kill', 'cyberpunk']:
kill_cyberpunk()
case ['kill', _]:
kill_everything_in_sight()

如果您使用的in是真正的字符串搜索,则需要高级使用match,这不是我的指尖

…后来…

下面是一个使用in string条件匹配/大小写的例子…

from dataclasses import dataclass
@dataclass
class InString(str):
string: str
def __eq__(self, item):
return item in self.string
def advanced_match_example(command):
match InString(command):
case 'valorant':
kill_valorant();
case 'comp':
shutdown_computer()
case 'steam':
kill_steam()
case 'discord':
kill_discord()
case 'cyberpunk':
kill_cyberpunk()
case _:
kill_everything_in_sight()

你可以这样做:

import subprocess
def kill_valorant():
subprocess.call(["taskkill","/F","/IM","VALORANT-Win64-Shipping.exe"])
def shutdown_computer():
subprocess.call(["shutdown", "/s", "/t", "1"])
def kill_steam():
subprocess.call(["taskkill","/F","/IM","steam.exe"])
def kill_discord():
subprocess.call(["taskkill","/F","/IM","Discord.exe"])
def kill_cyberpunk():
subprocess.call(["taskkill","/F","/IM","Cyberpunk2077.exe"])
commands = {
"valorant": kill_valorant,
"comp": shutdown_computer,
"steam": kill_steam,
"discord": kill_discord,
"cyberpunk": kill_cyberpunk
}
def execute_command(command):
# Get the function associated with the command and call it
func = commands.get(command, lambda: "Invalid command")
func()

最新更新