如何将输入函数中的文本字符串转换为整数?

How to convert a text string in an input function into an integer?

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

我已经将“石头”、“布”和“剪刀”转换成整数如下:

    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))

谢谢!

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

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)

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

或者,您可以使用 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 因为它是 none猜测

已经有两个很好的答案可以解决这个问题,但这是我的解决方案。您可以将字符串放入名为 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() 函数都是 return 整数。

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

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