【问题标题】:How to convert a text string in an input function into an integer?如何将输入函数中的文本字符串转换为整数?
【发布时间】:2021-11-04 19:35:59
【问题描述】:

我正在尝试为石头、纸、剪刀游戏编写一个非常简单的程序。我产生一个随机整数,它是对手的移动,然后我以整数形式输入我自己的“猜测”。然后,我将这两个整数组合成一个列表,并根据结果矩阵测试这些坐标。

我已经将“rock”、“paper”和“scissors”转换成整数如下:

    guess = input("Enter your move: \"rock\", \"paper\", \"scissors\", or \"quit\": \n")
    if guess == "rock":
        guess = 0
    if guess == "paper":
        guess = 1
    if guess == "scissors":
        guess = 2
    if guess == "quit":
        break
    weapon = random.randint(0, 2)  # 0 is rock, 1 is paper, 2 is scissors
    outputGuess = (int(guess), int(weapon))

有没有办法摆脱所有的 if 语句?我尝试了以下方法,但它不起作用:

    guess = input("Enter your move: \"rock\", \"paper\", \"scissors\", or \"quit\": \n")
    "rock" = 0
    "paper" = 1
    "scissors" = 2
    weapon = random.randint(0, 2)  # 0 is rock, 1 is paper, 2 is scissors
    outputGuess = (int(guess), int(weapon))

谢谢!

【问题讨论】:

  • 您可以尝试使用枚举,然后在比较中解析它

标签: python input integer


【解决方案1】:

或者,您可以使用 1 行 if statement。语法是result if condition else result

guess = 0 if guess=='rock' else 1 if guess=='paper' else 2 if guess=='scissors' else break

它检查它是否是rock,否则检查它是否是paper,否则检查它是否是scissors,否则是break,因为它不是猜测

【讨论】:

    【解决方案2】:

    已经有两个很好的答案可以解决这个问题,但这是我的解决方案。您可以将字符串放入名为options 的列表中,然后获取guess 的索引。

    guess = input("Enter your move: \"rock\", \"paper\", \"scissors\", or \"quit\": \n")
    options = ["rock", "paper", "scissors"]
    if guess in options:
        guess = options.index(guess)
    else:
        break
    
    weapon = random.randint(0, 2)  # 0 is rock, 1 is paper, 2 is scissors
    outputGuess = (guess, weapon)
    

    我删除了outputGuess 行中的int(),因为randint()index() 函数都返回一个整数。

    【讨论】:

      【解决方案3】:

      正如@SharathNS 建议的那样,您可以尝试探索枚举的使用,以便将所有内容都定义在一个地方,您可以更好地控制可能的选项。

      from enum import Enum
      import random
      
      
      class GameOption(Enum):
          rock = 0
          paper = 1
          scissors = 2
      
      GAME_OPTION_KEYS = [option.name for option in GameOption]
      GAME_OPTION_VALUES = [option.value for option in GameOption]
      
      while (guess := input(f"Enter your move: {GAME_OPTION_KEYS}, or \"quit\": \n")) != "quit":
          weapon = random.choice(GAME_OPTION_VALUES)
          outputGuess = (GameOption[guess], "vs", GameOption(weapon))
          print(outputGuess)
      

      输出

      $ python3 script.py 
      Enter your move: ['rock', 'paper', 'scissors'], or "quit": 
      paper
      (<GameOption.paper: 1>, 'vs', <GameOption.scissors: 2>)
      Enter your move: ['rock', 'paper', 'scissors'], or "quit": 
      paper
      (<GameOption.paper: 1>, 'vs', <GameOption.paper: 1>)
      Enter your move: ['rock', 'paper', 'scissors'], or "quit": 
      rock
      (<GameOption.rock: 0>, 'vs', <GameOption.scissors: 2>)
      Enter your move: ['rock', 'paper', 'scissors'], or "quit": 
      scissors
      (<GameOption.scissors: 2>, 'vs', <GameOption.rock: 0>)
      Enter your move: ['rock', 'paper', 'scissors'], or "quit": 
      rock
      (<GameOption.rock: 0>, 'vs', <GameOption.paper: 1>)
      Enter your move: ['rock', 'paper', 'scissors'], or "quit": 
      quit
      

      【讨论】:

        【解决方案4】:

        您可以使用 dict 将其翻译成对应的整数。

        guess = input("Enter your move: \"rock\", \"paper\", \"scissors\", or \"quit\": \n")
        
        guesses = {'rock':0, 'paper':1, 'scissors':2}
        weapon = random.randint(0, 2)
        output = (guesses[guess], weapon)
        

        你不需要改变武器的类型,因为它已经是一个整数了。

        【讨论】:

          猜你喜欢
          • 2021-02-18
          • 2011-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多