Python 2.7 获取用户输入并作为不带引号的字符串进行操作
Posted
技术标签:
【中文标题】Python 2.7 获取用户输入并作为不带引号的字符串进行操作【英文标题】:Python 2.7 getting user input and manipulating as string without quotations 【发布时间】:2011-06-25 00:24:29 【问题描述】:我想从用户那里得到一个字符串,然后对其进行操作。
testVar = input("Ask user for something.")
有没有办法让 testVar 成为一个字符串,而无需我让用户用引号输入他的响应?即“你好”与你好
如果用户输入 Hello,我会收到以下错误:
NameError: name 'Hello' 未定义
【问题讨论】:
See documentation。从 python 2.7 开始,input
自动调用 eval()
【参考方案1】:
使用raw_input()
代替input()
:
testVar = raw_input("Ask user for something.")
input()
实际上将输入评估为 Python 代码。我建议永远不要使用它。 raw_input()
返回用户输入的逐字字符串。
【讨论】:
尽管对于使用 Python 3 阅读本文的任何人来说,input
现在都以这种方式工作,并且 raw_input 消失了。
你想让用户在你自己的代码中插入python代码的情况是什么?
@JFA:我觉得input()
不是一个有用的功能,不推荐使用。【参考方案2】:
函数input
还将评估它刚刚读取为python 代码的数据,这并不是您真正想要的。
一般的方法是将用户输入(来自sys.stdin
)视为任何其他文件。试试
import sys
sys.stdin.readline()
如果您想保持简短,可以使用raw_input
,它与input
相同,但省略了评估。
【讨论】:
另外,如果您正在编写交互式程序,请考虑导入readline
- 这将提供类似于 bash 的功能(开箱即用的历史记录,自动完成将需要一些工作)
干得好!我多年来一直使用相同的功能,并且一直运行良好。
这是 Python 2 和 3 兼容性的最佳答案。它适用于两个版本。最后当然也加上了行尾符(在Linux中是\n
),完全不干涉。在 Python 3 中,raw_input
函数被 input
函数取代,但出于兼容性原因,它是一个完全不同的函数!在 Python 3 中,input
函数也允许插入字符串,但在 Python 2 中,input
函数不允许插入字符串(只有 raw_input
函数允许插入字符串,这在 Python 中已经被移除3,不幸的是)。【参考方案3】:
testVar = raw_input("Ask user for something.")
【讨论】:
【参考方案4】:这个问题似乎在 Python 3.4.2 版中得到了解决。
testVar = input("Ask user for something.")
会正常工作。
【讨论】:
Python 3.xinput
等价于 Python 2.x raw_input
(参见docs.python.org/3.0/whatsnew/3.0.html#builtins);这是 2.x 特有的问题。【参考方案5】:
如果你想在 python 2.x 中使用 input 而不是 raw_input,那么这个技巧会派上用场
if hasattr(__builtins__, 'raw_input'):
input=raw_input
之后,
testVar = input("Ask user for something.")
会正常工作的。
【讨论】:
【参考方案6】:我的工作代码与修复:
import random
import math
print "Welcome to Sam's Math Test"
num1= random.randint(1, 10)
num2= random.randint(1, 10)
num3= random.randint(1, 10)
list=[num1, num2, num3]
maxNum= max(list)
minNum= min(list)
sqrtOne= math.sqrt(num1)
correct= False
while(correct == False):
guess1= input("Which number is the highest? "+ str(list) + ": ")
if maxNum == guess1:
print("Correct!")
correct = True
else:
print("Incorrect, try again")
correct= False
while(correct == False):
guess2= input("Which number is the lowest? " + str(list) +": ")
if minNum == guess2:
print("Correct!")
correct = True
else:
print("Incorrect, try again")
correct= False
while(correct == False):
guess3= raw_input("Is the square root of " + str(num1) + " greater than or equal to 2? (y/n): ")
if sqrtOne >= 2.0 and str(guess3) == "y":
print("Correct!")
correct = True
elif sqrtOne < 2.0 and str(guess3) == "n":
print("Correct!")
correct = True
else:
print("Incorrect, try again")
print("Thanks for playing!")
【讨论】:
【参考方案7】:这是我的工作,以防万一我将来需要迁移到 python 3。
def _input(msg):
return raw_input(msg)
【讨论】:
【参考方案8】:我们可以在 Python 2 中使用 raw_input()
函数,在 Python 3 中使用 input()
函数。
默认情况下,输入函数接受字符串格式的输入。对于其他数据类型,您必须转换用户输入。
在 Python 2 中,我们使用 raw_input()
函数。它等待用户输入一些输入并按下return
,我们需要通过转换为我们想要的数据类型将值存储在一个变量中。使用类型转换时要小心
x = raw_input("Enter a number: ") #String input
x = int(raw_input("Enter a number: ")) #integer input
x = float(raw_input("Enter a float number: ")) #float input
x = eval(raw_input("Enter a float number: ")) #eval input
在 Python 3 中,我们使用 input() 函数返回用户输入值。
x = input("Enter a number: ") #String input
如果你输入一个字符串,int,float,eval,它将作为字符串输入
x = int(input("Enter a number: ")) #integer input
如果您为 int cast ValueError: invalid literal for int() with base 10:
输入字符串
x = float(input("Enter a float number: ")) #float input
如果您输入一个字符串进行浮点转换ValueError: could not convert string to float
x = eval(input("Enter a float number: ")) #eval input
如果您输入一个字符串进行 eval cast NameError: name ' ' is not defined
这些错误也适用于 Python 2。
【讨论】:
以上是关于Python 2.7 获取用户输入并作为不带引号的字符串进行操作的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]
Discord bot c#获取用户信息(不带参数)并发回消息
Python 2.7_Second_try_爬取阳光电影网_获取电影下载地址并写入文件 20161207