Python 2.7 kullanıcı girişi almak ve tırnak olmadan dize olarak manipüle


144

Bir kullanıcıdan bir dize almak ve sonra onu manipüle etmek istiyorum.

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

TestVar'ın, kullanıcının yanıtını tırnak işaretleri içine almasına gerek kalmadan bir dize olmasının bir yolu var mı? yani "Merhaba" - Merhaba

Kullanıcı Merhaba yazıyorsa, aşağıdaki hatayı alıyorum:

NameError: 'Merhaba' adı tanımlanmadı


Belgelere bakın . Python 2.7'den itibaren inputotomatik olarak eval()
çağrılır

Yanıtlar:


261

Şunun raw_input()yerine kullanın input():

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

input()girişi Python kodu olarak değerlendirir. Hiç kullanmamanızı öneririm raw_input()kullanıcı tarafından girilen kelimesi kelimesine döner.


107
Python 3 kullanarak bunu okuyan herkes için , inputşimdi bu şekilde çalışıyor ve raw_input gitti.
Thomas K

3
Kullanıcının kendi kodunuza python kodu eklemesine izin vermek istediğiniz durum nedir?
JFA

1
@JFA: input()Yararlı bir işlev olduğunu düşünmüyorum ve bunu kullanmanızı önermiyorum.
Sven Marnach

11

Bu fonksiyon inputaynı zamanda okuduğu verileri gerçekten istediğiniz gibi olmayan python kodu olarak değerlendirir.

Genel yaklaşım, kullanıcı girişini ( sys.stdindiğer) herhangi bir dosya gibi ele almak olacaktır . Deneyin

import sys
sys.stdin.readline()

Kısa tutmak istiyorsanız , değerlendirmeyi atlayanla raw_inputaynı olanı kullanabilirsiniz input.


2
Ayrıca, etkileşimli bir program yazıyorsanız, içe aktarmayı düşünün readline- bu bash'a benzer özellikler verecektir (kutudan çıktığı gibi, otomatik tamamlama bazı ayak işleri gerektirecektir)
Foo Bah

Aferin! Aynı işlevi çağlar boyunca kullandım ve şimdiye kadar iyi çalıştı.
CFV

11

Biz kullanabilirsiniz raw_input()Python 2'de fonksiyonu ve input()giriş fonksiyonu dize biçiminde bir giriş alır Varsayılan olarak Python 3'te işlevi. Diğer veri türleri için kullanıcı girişini yayınlamanız gerekir.

Python 2'de raw_input()fonksiyonu kullanıyoruz. Kullanıcının bazı girdi yazıp beklemesini bekler ve returnarzu veri türümüz olarak döküm yaparak değeri bir değişkende saklamamız gerekir. Tip döküm kullanırken dikkatli olun

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'te kullanıcı giriş değeri döndüren input () işlevini kullanıyoruz.

x = input("Enter a number: ") #String input

Bir dize girerseniz, int, float, eval dize girişi olarak alacaktır

x = int(input("Enter a number: ")) #integer input

İnt cast için bir dize girerseniz ValueError: invalid literal for int() with base 10:

x = float(input("Enter a float number: ")) #float input

Float cast için bir dize girerseniz ValueError: could not convert string to float

x = eval(input("Enter a float number: ")) #eval input

Eval cast için bir dize girerseniz NameError: name ' ' is not defined Bu hata Python 2 için de geçerlidir.


5

Eğer python 2.x içinde raw_input yerine girdi kullanmak istiyorsanız, bu hile işe yarayacaktır

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

Daha sonra,

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

gayet iyi çalışacak.



0

Düzeltmelerle Çalışma kodum:

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

Gelecekte python 3'e taşınmanız gerekirse, bu benim güvenli çalışma başarısızlık.

def _input(msg):
  return raw_input(msg)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.