Python 2.7はユーザー入力を取得し、引用符なしの文字列として操作します


144

ユーザーから文字列を取得し、それを操作したい。

testVar = input("Ask user for something.")

ユーザーに自分の応答を引用符で入力せずにtestVarを文字列にする方法はありますか?つまり、「ハロー」対「ハロー」

ユーザーがHelloと入力すると、次のエラーが発生します。

NameError:名前「Hello」が定義されていません


ドキュメントを参照してください。Python 2.7以降はinput自動的に呼び出されますeval()
0x45

回答:


261

raw_input()代わりに使用input()

testVar = raw_input("Ask user for something.")

input()入力を実際にPythonコードとして評価します。絶対に使用しないことをお勧めします。 raw_input()ユーザーが入力した逐語的な文字列を返します。


107
Python 3を使用してこれを読んでいる人は誰でも、input今はこのように動作し、raw_inputはなくなりました。
トーマスK

3
ユーザーがPythonコードを自分のコードに挿入できるようにしたい状況は何ですか?
JFA

1
@JFA:input()便利な機能だとは思わないので、使用をお勧めしません。
Sven Marnach、2014年

11

この関数inputは、Pythonコードとして読み取ったデータも評価しますが、これは実際に必要なものではありません。

一般的なアプローチは、(からのsys.stdin)ユーザー入力を他のファイルと同様に扱うことです。試す

import sys
sys.stdin.readline()

短くしたい場合は、評価を省略してraw_input同じものを使用できますinput


2
また、インタラクティブなプログラムを作成している場合は、インポートを検討してください。readlineこれにより、bashと同様の機能が提供されます(履歴はすぐに使用でき、オートコンプリートにはいくつかのレッグワークが必要です)
Foo Bah

よくやった!私は同じ機能を長い間使用してきましたが、これまでにうまくいきました。
CFV 2018

11

raw_input()Python 2のinput()関数とPython 3 の関数を使用できます。デフォルトでは、入力関数は文字列形式の入力を受け取ります。他のデータ型の場合、ユーザー入力をキャストする必要があります。

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キャストの文字列を入力した場合 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キャストの文字列を入力した場合NameError: name ' ' is not defined これらのエラーはPython 2にも適用されます。


5

Python 2.xでraw_inputの代わりにinputを使用したい場合は、このトリックが便利です

    if hasattr(__builtins__, 'raw_input'):
      input=raw_input

その後、

testVar = input("Ask user for something.")

うまくいきます。



0

修正を加えた私のワーキングコード:

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

0

これは、将来python 3に移行する必要がある場合に備えて、フェールセーフにするための私の回避策です。

def _input(msg):
  return raw_input(msg)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.