मैं Python 3 में raw_input का उपयोग कैसे करूं


553
import sys
print(sys.platform)
print(2**100)
raw_input()

मैं पायथन 3.1 का उपयोग कर रहा हूं और raw_inputडॉस पॉप-अप को "फ्रीज" नहीं कर सकता । मैं जो किताब पढ़ रहा हूं वह पायथन 2.5 के लिए है और मैं पायथन 3.1 का उपयोग कर रहा हूं

मुझे इसे ठीक करने के लिए क्या करना चाहिए?


1
hm, मुझे NameError मिल रहा है: नाम 'raw_input' परिभाषित नहीं है जब मैं आपके कोड का उपयोग करने का प्रयास कर रहा हूं। क्या आपको वही नहीं मिलता है?
साइलेंटगॉस्ट


9
पायथन 3 में बहुत कुछ बदल गया है, इसलिए शायद आपको 2.5 के लिए किताब (जो वास्तव में पुरानी है) का उपयोग करके इसे मास्टर करने की कोशिश नहीं करनी चाहिए।
निकल्स बी।

5
कच्चे_इनपुट का नाम बदलकर अजगर 3 में रखा गया
क्रिस्टन सम्मान

जब मैं Oauth2 लिंक का पालन करता हूं तो http 401 त्रुटि प्राप्त होती है
बिग इयान

जवाबों:


1011

पायथन 3 से शुरू होकर, raw_input()इसका नाम बदल दिया गया input()

से नया क्या है में अजगर 3.0, Builtins अनुभाग दूसरे मद।


56
मूल रूप से एक फंक्शन इनपुट () था, जो वर्तमान इवल (इनपुट ()) की तरह काम करता था। यह तब से बचा हुआ था जब पायथन कम सुरक्षा के प्रति सचेत था। परिवर्तन ने भाषा को सरल बनाया। गहरी व्याख्या के लिए "इसे आयात करें" भी देखें। क्या आप एक मृत भाषा को पसंद करेंगे जो विकसित होती है? आसपास बहुत सारे हैं।
मेवोप्लप

9
मैं अजगर सीख रहा हूँ के रूप में अच्छी तरह से और के बीच एक अंतर नहीं पाया input()और raw_input()a = input()उपयोगकर्ता इनपुट लेगा और इसे सही प्रकार में डालेगा। उदाहरण: यदि उपयोगकर्ता टाइप 5 है तो मान 5 aपूर्णांक है। a = raw_input()उपयोगकर्ता इनपुट लेगा और इसे स्ट्रिंग के रूप में डालेगा। उदाहरण: यदि उपयोगकर्ता टाइप 5 है तो मान aस्ट्रिंग '5' है और पूर्णांक नहीं है। सोचा कि यह खुद की तरह अजगर में newbies के लिए अच्छी जानकारी हो सकती है।
विष्णु नारंग

10
@ विष्णुनांग येप, जो पाइथन 2 में सही है। लेकिन पाइथन 3 में, यह व्यवहार बदल गया, और इनपुट करता है कि पाइथन में रॉ_न्यूट ने क्या किया।
बाल्फा

4
@balpha: अभी सत्यापित है। तुम सही हो। मेरे पास २. (है। (इसका उल्लेख करने के लिए उत्तर को संपादित नहीं किया जा सकता ...)
विष्णु नारंग

3
@ मयूप्लप अजगर 2 से 3 की ओर बढ़ना मतलब टूटना था। इसका मतलब यह नहीं है कि यह होना चाहिए था। एक भाषा मरने के बिना और फ़ंक्शन हस्ताक्षर को बदलने के बिना विकसित हो सकती है। यदि आपके पास कोई वैश्विक कार्य नहीं है तो यह मदद करता है। अन्य भाषाओं के कुछ संकेत के साथ शुरू करें। आदि कार्यों को हटाना टेबल से दूर नहीं है।
dlamblin

117

यह पायथन 3.x और 2.x में काम करता है:

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))

4
मुझे इस दृष्टिकोण के साथ एक गुंजाइश मुद्दा मिल रहा था । global inputकॉलिंग फ़ंक्शन के शीर्ष पर इसे ठीक करें ।
kevlar1818

1
यह मुझे थोड़ा साफ लगता है: import __builtin__; input = getattr(__builtin__, 'raw_input', input)
mbarkhau

3
पायथन 3 का कोई मॉड्यूल नाम नहीं है __builtin__
सेसम टिम्मरमैन

@mbarkhau: यह बहुत वैश्विक है। क्या होगा यदि आप एक पुस्तकालय कहते हैं जो इसकी उम्मीद नहीं करता है? __builtin__का नाम बदलकर builtinsपाइथन 3 कर दिया गया है। दोनों __builtins__सीपीथॉन में उपलब्ध हैं ।
jfs

3
getattr(__builtins__, 'raw_input', input)पायथन 2.7.2 में आयात होने पर डिफ़ॉल्ट लौटाता है।
सेस टिम्मरमैन

45

इसको संबोधित करने का एक विश्वसनीय तरीका है

from six.moves import input

छह एक मॉड्यूल है जो 2/3 सामान्य कोड आधार दर्द बिंदुओं में से कई पर पैच करता है।


1
अच्छा विचार ... और यदि आप करते हैं from six.moves import input as raw_input, तो आप raw_inputअपनी स्क्रिप्ट में रख सकते हैं और दोनों पायथन संस्करणों का उपयोग करके चला सकते हैं।
eddy85br

15

जैसा कि दूसरों ने संकेत दिया है, पायथन 3.0 में raw_inputफ़ंक्शन का नाम बदल दिया गया है input, और आप वास्तव में एक अधिक अप-टू-डेट पुस्तक द्वारा बेहतर सेवा करेंगे, लेकिन मैं यह बताना चाहता हूं कि आपकी स्क्रिप्ट का आउटपुट देखने के बेहतर तरीके हैं ।

आपके विवरण से, मुझे लगता है कि आप Windows का उपयोग कर रहे हैं, आपने एक .pyफ़ाइल सहेज ली है और फिर आप इसे चलाने के लिए उस पर डबल-क्लिक कर रहे हैं। आपके प्रोग्राम के समाप्त होते ही जो टर्मिनल विंडो बंद हो जाती है, इसलिए आप यह नहीं देख सकते कि आपके प्रोग्राम का परिणाम क्या था। इसे हल करने के लिए, आपकी पुस्तक raw_input/input उपयोगकर्ता को दर्ज करने तक प्रतीक्षा करने के लिए कथन करती है। हालाँकि, जैसा कि आपने देखा है, यदि कुछ गलत हो जाता है, जैसे कि आपके प्रोग्राम में कोई त्रुटि, तो उस स्टेटमेंट को निष्पादित नहीं किया जाएगा और विंडो बंद हो जाएगी बिना आप यह देख पाएंगे कि क्या गलत हुआ। आपको कमांड-प्रॉम्प्ट या IDLE का उपयोग करना आसान लग सकता है।

कमांड-प्रॉम्प्ट का उपयोग करें

जब आप उस फ़ोल्डर विंडो को देख रहे हों जिसमें आपका पायथन प्रोग्राम हो, तो शिफ़्ट को दबाए रखें और विंडो के व्हाइट बैकग्राउंड एरिया में कहीं भी राइट-क्लिक करें। मेनू जो पॉप अप करता है, उसमें एक प्रविष्टि "ओपन कमांड विंडो यहां" होनी चाहिए। (मुझे लगता है कि यह विंडोज विस्टा और विंडोज 7 पर काम करता है।) यह कमांड-प्रॉम्प्ट विंडो खोलेगा जो कुछ इस तरह दिखता है:

    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

    C:\Users\Weeble\My Python Program>_

अपना प्रोग्राम चलाने के लिए, निम्न टाइप करें (अपने स्क्रिप्ट नाम का प्रतिस्थापन):

    python myscript.py

... और एंटर दबाएं। (यदि आपको एक त्रुटि मिलती है कि "अजगर" एक मान्यता प्राप्त कमांड नहीं है, तो देखें http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 देखें ) जब आपका प्रोग्राम समाप्त हो रहा है, तो सफलतापूर्वक पूरा हुआ या नहीं, विंडो खुले रहेंगे और कमांड-प्रॉम्प्ट आपके लिए फिर से एक अन्य कमांड टाइप करने के लिए दिखाई देगा। यदि आप अपना प्रोग्राम फिर से चलाना चाहते हैं, तो आप अपने द्वारा दर्ज पिछली कमांड को वापस बुलाने के लिए ऊपर के तीर को दबा सकते हैं और हर बार फ़ाइल नाम टाइप करने के बजाय इसे फिर से चलाने के लिए एंटर दबा सकते हैं।

IDLE का उपयोग करें

IDLE एक साधारण प्रोग्राम एडिटर है जो पायथन के साथ स्थापित होता है। अन्य सुविधाओं के बीच यह एक विंडो में आपके प्रोग्राम चला सकता है। अपनी .pyफ़ाइल पर राइट-क्लिक करें और "IDLE में संपादित करें" चुनें। जब आपका कार्यक्रम संपादक में दिखाई देता है, तो F5 दबाएं या "रन" मेनू से "रन मॉड्यूल" चुनें। आपका प्रोग्राम एक विंडो में चलेगा जो आपके प्रोग्राम के समाप्त होने के बाद खुला रहता है, और जिसमें आप तुरंत चलाने के लिए पायथन कमांड दर्ज कर सकते हैं।


क्या Windows के साथ IDLE इंस्टॉल किया गया है? मेरे टर्मिनल में IDLE या निष्क्रिय भाग खाली आता है।
vgoff

1
IDLE को विंडोज पर पायथन के साथ स्थापित किया गया है। यह स्टार्ट मेनू में एक शॉर्टकट के रूप में और .py फ़ाइलों के लिए एक फ़ाइल एसोसिएशन के रूप में प्रकट होता है, लेकिन मुझे नहीं लगता कि डिफ़ॉल्ट रूप से आपके पथ में कोई 'निष्क्रिय' कमांड जोड़ा गया है। यदि आप इसे कमांड-लाइन से शुरू करना चाहते हैं, तो आप चला सकते हैंpythonw -m idlelib.idle
वेब्ले

इससे स्पष्ट हुआ। मैं केवल पैसा बनाने के लिए विंडोज को छूता हूं, ओएस के रूप में नहीं। मैं तब कहूंगा कि आपका "उपयोग आईडीएलई" अनुभाग फिर पक्षपाती है। आपको चयनात्मकता का उल्लेख करना चाहिए, शायद।
vgoff 9

3
मुझे यकीन नहीं कि मैं समझा हूँ। प्रश्न विंडोज-विशिष्ट था। यह एक "डॉस पॉपअप" के बारे में बात करता है। आइडल को पायथन के हिस्से के रूप में स्थापित किया गया है, लेकिन कुछ वितरक इसे अलग कर सकते हैं। उदाहरण के लिए, उबंटू में ऐसा लगता है कि आपको इसे एक अलग पैकेज के रूप में स्थापित करना होगा। प्रश्नकर्ता द्वारा पूछे गए प्रश्न की तुलना में उत्तर पहले से ही एक अलग दृष्टिकोण का सुझाव दे रहा है, इसलिए मैं इसके आगे कोई स्पर्शरेखा नहीं जोड़ूंगा। FWIW मैं घर पर लिनक्स का उपयोग करता हूं और केवल विंडोज का उपयोग करता हूं जहां मुझे काम करना है।
Weeble

DOS 1981 और 1995 के बीच आईबीएम पीसी संगत बाजार पर हावी होने वाले कई निकट संबंधी ऑपरेटिंग सिस्टम के लिए एक संक्षिप्त रूप है, या आंशिक रूप से DOS- आधारित Microsoft Windows 95, 98, और मिलेनियम संस्करण सहित 2000 तक।
vgoff

7

कोड को चलाने के Undefined nameदौरान टिमरमैन का समाधान बहुत अच्छा काम करता है, लेकिन अगर आप पाइफ़्लेक्स या इसी तरह के लिंटर का उपयोग करते समय त्रुटियों को प्राप्त नहीं करना चाहते हैं, तो आप इसके बजाय निम्नलिखित का उपयोग कर सकते हैं:

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass

हाँ, मैं अभी भी pylint में त्रुटियों की बहुत सारी हो रही है: Redefining built-in 'input' (redefined-builtin), Unable to import '__builtin__' (import-error), Invalid constant name "input" (invalid-name)
बबकेन वर्दयान

जब कोड शैली की बात आती है तो @BkenkenVardanyan pylint बेहद सख्त है। मैं सिफारिश करेंगे flake8या pyflakesऐसा नहीं करने के लिए के रूप में व्यर्थ चेतावनी के साथ अपने सभी दिन तक का समय लग।
jmagnusson

6

यहाँ मैंने अपनी स्क्रिप्ट में कोड का एक टुकड़ा रखा है जिसे मैं py2 / 3-agnostic वातावरण में नहीं चलाना चाहता:

# Thank you, python2-3 team, for making such a fantastic mess with
# input/raw_input :-)
real_raw_input = vars(__builtins__).get('raw_input',input)

अब आप real_raw_input का उपयोग कर सकते हैं। यह काफी महंगा है लेकिन छोटा और पठनीय है। कच्चे इनपुट का उपयोग करना आमतौर पर महंगा होता है (इनपुट की प्रतीक्षा में), इसलिए यह महत्वपूर्ण नहीं है।

सिद्धांत रूप में, आप real_raw_input के बजाय raw_input भी असाइन कर सकते हैं, लेकिन ऐसे मॉड्यूल हो सकते हैं जो raw_input के अस्तित्व की जांच करते हैं और तदनुसार व्यवहार करते हैं। यह सुरक्षित पक्ष पर बेहतर रहता है।


मैं इस मिल जब मैं इसे करने की कोशिश: inputcons = वार्स ( builtins ) .Get ( 'raw_input', इनपुट) लेखन त्रुटि: वार्स () तर्क होना आवश्यक है dict विशेषता

0

शायद सबसे अच्छा समाधान नहीं है, लेकिन इससे पहले कि मैं यहाँ आया मैंने बस अध्ययन से त्वरित विराम के बिना काम करने के लिए मक्खी पर यह बना दिया।

def raw_input(x):
  input(x)

फिर जब मैं raw_input('Enter your first name: ')उस स्क्रिप्ट पर चलता हूं, जिस पर मैं काम कर रहा था, तो यह उसे कैप्चर करता है जैसा वह करता है input()

ऐसा नहीं करने का एक कारण हो सकता है, कि मैं अभी तक नहीं आया हूँ!


7
सिर्फ क्यों नहीं raw_input = input?
टोनिपैडमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.