如何将输入函数中的文本字符串转换为整数?
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
我正在尝试为剪刀石头布游戏编写一个非常简单的程序。我产生一个随机整数,这是对手的举动,然后我以整数形式输入我自己的“猜测”。然后,我将这两个整数组合成一个列表,并根据结果矩阵测试这些坐标。
我已经将“石头”、“布”和“剪刀”转换成整数如下:
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