Enz*_*nzo 1 python optimization
我正在解决一个问题,它说:
在Big Bang Theory中,Sheldon和Raj创造了一款新游戏:"rock-paper-scissors-lizard-Spock".
游戏规则是:
- 剪刀剪纸;
- 纸覆盖岩石;
- 岩石碾碎蜥蜴;
- 蜥蜴毒药斯波克;
- Spock砸碎剪刀;
- 剪刀斩首蜥蜴;
- 蜥蜴吃纸;
- 论文反驳了斯波克;
- Spock蒸发岩石;
- 岩石压碎剪刀.
在Sheldon获胜的情况下,他会说:"Bazinga!"; 如果Raj赢了,Sheldon会宣称:"Raj被骗了"; 在关系中,他会要求一个新游戏:"再次!".考虑到两者选择的选项,制作一个程序,打印谢尔顿对结果的反应.
输入包含一系列测试用例.第一行包含正整数T(T≤100),表示测试用例的数量.每个测试用例由输入行表示,分别包含Sheldon和Raj的选项,用空格分隔.
我对这个问题的代码是
T = int(input())
for i in range(T):
Sheldon, Raj = input().split(' ')
if(Sheldon == "scissors" and (Raj == "paper" or Raj == "lizard")):
Win = True
elif(Sheldon == "lizard" and (Raj == "paper" or Raj == "Spock")):
Win = True
elif(Sheldon == "Spock" and (Raj == "rock" or Raj == "scissors")):
Win = True
elif(Sheldon == "paper" and (Raj == "rock" or Raj == "Spock")):
Win = True
elif(Sheldon == "rock" and (Raj == "scissors" or Raj == "lizard")):
Win = True
elif(Raj == "scissors" and (Sheldon == "paper" or Sheldon == "lizard")):
Lose = True
elif(Raj == "lizard" and (Sheldon == "paper" or Sheldon == "Spock")):
Lose = True
elif(Raj == "Spock" and (Sheldon == "rock" or Sheldon == "scissors")):
Lose = True
elif(Raj == "paper" and (Sheldon == "rock" or Sheldon == "Spock")):
Lose = True
elif(Raj == "rock" and (Sheldon == "scissors" or Sheldon == "lizard")):
Lose = True
elif(Sheldon == Raj):
Tie = True
if(Win == True):
print("Case #{0}: Bazinga!".format(i+1))
elif(Lose == True):
print("Case #{0}: Raj cheated!".format(i+1))
elif(Tie == True):
print("Case #{0}: Again!".format(i+1))
Win = Lose = Tie = False
Run Code Online (Sandbox Code Playgroud)
但我觉得它太久了.有没有办法减少它?
首先,祝贺你试着写这篇文章!第一次尝试你的逻辑非常好.
下一步是制作一个数据结构,您可以按照相同的方式查询规则.一个很好的契合是dictionary:
options = {
'scissors': ('paper', 'lizard'),
'paper': ('rock', 'spock'),
'rock': ('lizard', 'scissors'),
'lizard': ('spock', 'paper'),
'spock': ('scissors', 'rock'),
}
Run Code Online (Sandbox Code Playgroud)
然后你可以查询它而不是重复大量的ifs:
if raj == sheldon:
print("Case #{0}: Again!".format(i+1))
elif raj in options[sheldon]:
print("Case #{0}: Bazinga!".format(i+1))
else:
print("Case #{0}: Raj cheated!".format(i+1))
Run Code Online (Sandbox Code Playgroud)