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.x input 等价于 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

python基础一

python:解析js中常见的 不带引号的key的 json

如何在python中转储不带引号的json