Python-简化";“石头剪刀”;逻辑条件
我在解决一个问题,它说: 在大爆炸理论中,谢尔顿和拉杰创造了一个新游戏:“石头剪刀蜥蜴斯波克” 游戏规则如下:Python-简化";“石头剪刀”;逻辑条件,python,optimization,Python,Optimization,我在解决一个问题,它说: 在大爆炸理论中,谢尔顿和拉杰创造了一个新游戏:“石头剪刀蜥蜴斯波克” 游戏规则如下: 剪刀剪纸 纸覆盖岩石 岩石压碎蜥蜴 蜥蜴毒害斯波克 斯波克打碎剪刀 剪刀斩首蜥蜴 蜥蜴吃纸 论文反驳了斯波克 斯波克使岩石汽化 石头压碎剪刀 如果谢尔顿获胜,他会说:“巴辛加!”;如果拉杰赢了,谢尔顿会宣布:“拉杰作弊了”;在平局中,他会要求一款新游戏:“再来一次!”。根据双方选择的选项,制作一个程序,打印谢尔顿对结果的反应 输入由一系列测试用例组成。第一行包含一个正整数T(T≤
- 剪刀剪纸李>
- 纸覆盖岩石李>
- 岩石压碎蜥蜴李>
- 蜥蜴毒害斯波克李>
- 斯波克打碎剪刀李>
- 剪刀斩首蜥蜴李>
- 蜥蜴吃纸李>
- 论文反驳了斯波克李>
- 斯波克使岩石汽化李>
- 石头压碎剪刀
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
但我觉得时间太长了。有什么办法可以减少它吗?首先,祝贺你尝试写这篇文章!第一次尝试时,你的逻辑很好 下一步是为规则创建一个数据结构,您可以用同样的方法进行查询。最好是一本
字典
:
options = {
'scissors': ('paper', 'lizard'),
'paper': ('rock', 'spock'),
'rock': ('lizard', 'scissors'),
'lizard': ('spock', 'paper'),
'spock': ('scissors', 'rock'),
}
然后您可以直接查询它,而不是重复大量的,如果
s:
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))
首先,祝贺你尝试写这篇文章!第一次尝试时,你的逻辑很好 下一步是为规则创建一个数据结构,您可以用同样的方法进行查询。最好是一本
字典
:
options = {
'scissors': ('paper', 'lizard'),
'paper': ('rock', 'spock'),
'rock': ('lizard', 'scissors'),
'lizard': ('spock', 'paper'),
'spock': ('scissors', 'rock'),
}
然后您可以直接查询它,而不是重复大量的,如果
s:
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))
试试这个,使用字典
T = int(input())
for i in range(T):
rules= {
"rock": {"rock":0, "paper":-1,"scissors":1,"lizard":1,"Spock":-1},
"paper": {"rock":1, "paper":0,"scissors":-1,"lizard":-1,"Spock":1},
"scissors": {"rock":-1, "paper":1,"scissors":0,"lizard":1,"Spock":-1},
"lizard": {"rock":1, "paper":-1,"scissors":1,"lizard":0,"Spock":-1},
"Spock": {"rock":1, "paper":-1,"scissors":1,"lizard":-1,"Spock":0}
}
Sheldon, Raj = input().split(' ')
Result = rules[Sheldon][Raj]
if(Result == 1):
print("Case #{0}: Bazinga!".format(i+1))
elif(Result == -1):
print("Case #{0}: Raj cheated!".format(i+1))
else:
print("Case #{0}: Again!".format(i+1))
试试这个,使用字典
T = int(input())
for i in range(T):
rules= {
"rock": {"rock":0, "paper":-1,"scissors":1,"lizard":1,"Spock":-1},
"paper": {"rock":1, "paper":0,"scissors":-1,"lizard":-1,"Spock":1},
"scissors": {"rock":-1, "paper":1,"scissors":0,"lizard":1,"Spock":-1},
"lizard": {"rock":1, "paper":-1,"scissors":1,"lizard":0,"Spock":-1},
"Spock": {"rock":1, "paper":-1,"scissors":1,"lizard":-1,"Spock":0}
}
Sheldon, Raj = input().split(' ')
Result = rules[Sheldon][Raj]
if(Result == 1):
print("Case #{0}: Bazinga!".format(i+1))
elif(Result == -1):
print("Case #{0}: Raj cheated!".format(i+1))
else:
print("Case #{0}: Again!".format(i+1))
您可以通过删除
Lose
并仅使用Win
来删除一半的案例。当您执行if(condition)var=True else var=False
时,您可以将其简化为var=(condition)
您还可以使用-1、0、1
来处理Lose、tie、Win,而不是三个单独的变量。和Raj==“paper”或Raj==“lizard”
可以Raj在{“paper”,“lizard”}
你可以使用字典:results={“剪刀”:{“paper”:true},…}
。然后找到赢家是这样的:Win=results[Sheldon][Raj]
你可以通过删除Lose
并只使用Win
来删除一半的案例。当你使用if(condition)var=True else var=False
时,你可以简化为var=(condition)
你也可以使用-1,0,1
用于输、平、赢,而不是三个单独的变量。和Raj==“paper”或Raj==“lizard”
可以Raj在{“paper”,“lizard”}
你可以使用字典:results={“剪刀”:{“paper”:true},…}
。然后找到获胜者是这样的:Win=results[Sheldon][Raj]
我认为choice[Sheldon]
读起来会更好。或者表示元组值的东西是defeats@cricket_007是的,也许是win_conditions[sheldon]:DI在beats[raj]X-D中有sheldon,或者是structs[raj]
(structs as in教他一个教训:D)我认为choice[sheldon]
读起来会更好。或者表示元组值的东西是defeats@cricket_007是的,可能是win_条件下的sheldon[sheldon]:DI在beats[raj]X-D中有sheldon,或者可能是结构中的sheldon[raj](在中的结构中给他上了一课:D)