Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-简化";“石头剪刀”;逻辑条件_Python_Optimization - Fatal编程技术网

Python-简化";“石头剪刀”;逻辑条件

Python-简化";“石头剪刀”;逻辑条件,python,optimization,Python,Optimization,我在解决一个问题,它说: 在大爆炸理论中,谢尔顿和拉杰创造了一个新游戏:“石头剪刀蜥蜴斯波克” 游戏规则如下: 剪刀剪纸 纸覆盖岩石 岩石压碎蜥蜴 蜥蜴毒害斯波克 斯波克打碎剪刀 剪刀斩首蜥蜴 蜥蜴吃纸 论文反驳了斯波克 斯波克使岩石汽化 石头压碎剪刀 如果谢尔顿获胜,他会说:“巴辛加!”;如果拉杰赢了,谢尔顿会宣布:“拉杰作弊了”;在平局中,他会要求一款新游戏:“再来一次!”。根据双方选择的选项,制作一个程序,打印谢尔顿对结果的反应 输入由一系列测试用例组成。第一行包含一个正整数T(T≤

我在解决一个问题,它说:

在大爆炸理论中,谢尔顿和拉杰创造了一个新游戏:“石头剪刀蜥蜴斯波克”

游戏规则如下:

  • 剪刀剪纸
  • 纸覆盖岩石
  • 岩石压碎蜥蜴
  • 蜥蜴毒害斯波克
  • 斯波克打碎剪刀
  • 剪刀斩首蜥蜴
  • 蜥蜴吃纸
  • 论文反驳了斯波克
  • 斯波克使岩石汽化
  • 石头压碎剪刀
如果谢尔顿获胜,他会说:“巴辛加!”;如果拉杰赢了,谢尔顿会宣布:“拉杰作弊了”;在平局中,他会要求一款新游戏:“再来一次!”。根据双方选择的选项,制作一个程序,打印谢尔顿对结果的反应

输入由一系列测试用例组成。第一行包含一个正整数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

但我觉得时间太长了。有什么办法可以减少它吗?

首先,祝贺你尝试写这篇文章!第一次尝试时,你的逻辑很好

下一步是为规则创建一个数据结构,您可以用同样的方法进行查询。最好是一本
字典

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)