【问题标题】:Combination of logic statements in python (and, or)python中逻辑语句的组合(and, or)
【发布时间】:2018-03-17 01:39:43
【问题描述】:

我目前正在 tkinter 中制作石头剪刀布射击游戏,并正在尝试编写一个确定谁获胜的函数。 1 = 石头,2 = 纸,3 = 剪刀。脚本不打印任何内容,除非 comp == 2 和 choice == 1。

def Winning():
    if (((comp == 2) and (choice == 1)) or ((comp == 3) and (choice == 2)) or
        ((comp == 1) and (choice == 3))):
        messagebox.showinfo("Info", "YOU LOSE!!!")
    if (((choice == 2) and (comp == 1)) or ((choice == 3) and (comp == 2)) 
      or ((choice == 1) and (comp == 3))):
        messagebox.showinfo("Info", "YOU WIN!!!")
    else:
        messagebox.showinfo("Info", "DRAW!!!")

【问题讨论】:

    标签: python tkinter logic


    【解决方案1】:

    我认为你这样做是错误的。假设我们必须使用数字输入,我会这样做:

    ROCK, PAPER, SCISSORS = range(1, 4)
    
    roshambo = {
        ROCK: SCISSORS,
        PAPER: ROCK,
        SCISSORS: PAPER
    }
    
    def Winning(comp, choice):
        if comp == choice:
            messagebox.showinfo("Info", "DRAW!!!")
        elif comp == roshambo[choice]:
            messagebox.showinfo("Info", "YOU WIN!!!")
        else:
            messagebox.showinfo("Info", "YOU LOSE!!!")
    

    这使您的逻辑清晰并简化了代码。而且,它更容易扩展问题:

    ROCK, PAPER, SCISSORS, LIZARD, SPOCK = range(1, 6)
    
    roshambo = {
        ROCK: [LIZARD, SCISSORS],
        PAPER: [ROCK, SPOCK],
        SCISSORS: [PAPER, LIZARD],
        LIZARD: [SPOCK, PAPER],
        SPOCK: [SCISSORS, ROCK]
    }
    
    def Winning(comp, choice):
        if comp == choice:
            messagebox.showinfo("Info", "DRAW!!!")
        elif comp in roshambo[choice]:
            messagebox.showinfo("Info", "YOU WIN!!!")
        else:
            messagebox.showinfo("Info", "YOU LOSE!!!")
    

    字典是你的朋友,没有它们就不要编程!

    【讨论】:

      【解决方案2】:

      你在哪里获得compchoice

      这样的事情会起作用:

      from tkinter import messagebox
      
      rock=1
      paper=2
      scissors=3
      
      
      def Winning(comp, choice):
          if (((comp == 2) and (choice == 1)) or ((comp == 3) and (choice == 2)) or((comp == 1) and (choice == 3))):
              messagebox.showinfo("Info", "YOU LOSE!!!")
          if (((choice == 2) and (comp == 1)) or ((choice == 3) and (comp == 2)) or((choice == 1) and (comp == 3))):
              messagebox.showinfo("Info", "YOU WIN!!!")
          else:
              messagebox.showinfo("Info", "DRAW!!!")
      
      
      Winning(rock, paper)
      

      这是你想要的吗?

      【讨论】:

      • 你的函数def Winning():def Winning(comp, choice):没有任何参数
      猜你喜欢
      • 2013-05-16
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多