পাইথন ২.7 ব্যবহারকারীর ইনপুট পাচ্ছে এবং উদ্ধৃতি ছাড়াই স্ট্রিং হিসাবে ম্যানিপুলেট করছে


144

আমি কোনও ব্যবহারকারীর কাছ থেকে একটি স্ট্রিং পেতে চাই এবং তারপরে এটি ব্যবহার করতে চাই।

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

ব্যবহারকারীকে উদ্ধৃতিতে তার প্রতিক্রিয়া টাইপ না করেই টেস্টভারের স্ট্রিং হওয়ার কোনও উপায় আছে কি? অর্থাত্ "হ্যালো" বনাম হ্যালো

হ্যালোতে ব্যবহারকারী টাইপ করলে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

NameError: নাম 'হ্যালো' সংজ্ঞায়িত করা হয়নি


ডকুমেন্টেশন দেখুন । অজগর হিসাবে 2.7 inputস্বয়ংক্রিয়ভাবে কল হয়eval()
0x45

উত্তর:


261

এর raw_input()পরিবর্তে ব্যবহার করুন input():

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

input()পাইথন কোড হিসাবে ইনপুটটিকে প্রকৃতপক্ষে মূল্যায়ন করে। আমি এটি ব্যবহার না করার পরামর্শ দিই। raw_input()ব্যবহারকারীর দ্বারা প্রবেশ করা ভার্ব্যাটিম স্ট্রিং প্রদান করে।


107
যদিও পাইথন 3 ব্যবহার করে যে কেউ এটি পড়ছেন , inputএখন এইভাবে কাজ করে এবং কাঁচা_পিন্ড চলে গেছে।
থমাস কে

3
আপনি কোন পরিস্থিতিতে ব্যবহারকারীকে নিজের কোডে অজগর কোডটি প্রবেশ করতে দিতে চান?
জেএফএ

1
@ জেএফএ: আমি মনে করি না যে input()এটি একটি কার্যকর কাজ, এবং আমি এটি ব্যবহার করার পরামর্শ দিই না।
সোভেন মারনাচ

11

ফাংশনটি inputঅজগর কোড হিসাবে কেবলমাত্র পড়া ডেটাও মূল্যায়ন করবে যা আপনি যা চান তা আসলে নয়।

জেনেরিক পদ্ধতির ব্যবহার হ'ল sys.stdinঅন্য ফাইলগুলির মতো ব্যবহারকারীর ইনপুট (থেকে ) treat চেষ্টা

import sys
sys.stdin.readline()

আপনি যদি এটি সংক্ষিপ্ত রাখতে চান তবে আপনি raw_inputযা ব্যবহার করতে পারেন তা একই inputতবে মূল্যায়ন বাদ দেয়।


2
এছাড়াও, যদি আপনি একটি ইন্টারেক্টিভ প্রোগ্রাম লিখছেন, আমদানি বিবেচনা করুন readline- এটি ব্যাশের অনুরূপ বৈশিষ্ট্যগুলি দেবে (ইতিহাসের বাইরে বাক্স, অটো-সমাপ্তির জন্য কিছু লেগওয়ার্ক প্রয়োজন হবে)
ফু বাহ

সাবাশ! আমি যুগ যুগ ধরে একই ফাংশনটি ব্যবহার করেছি এবং এটি কখনও ভালভাবে কাজ করেছে।
সিএফভি

11

আমরা raw_input()পাইথন 2 এ ফাংশন এবং পাইথন 3 এ ফাংশনটি ব্যবহার করতে পারি input()ডিফল্টরূপে ইনপুট ফাংশন স্ট্রিং বিন্যাসে একটি ইনপুট নেয়। অন্যান্য ডেটা টাইপের জন্য আপনাকে ব্যবহারকারীর ইনপুট কাস্ট করতে হবে।

পাইথন 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

পাইথন 3 এ আমরা ইনপুট () ফাংশনটি ব্যবহার করি যা কোনও ব্যবহারকারীর ইনপুট মান দেয়।

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

আপনি যদি কোনও স্ট্রিং, ইনট, ফ্লোট প্রবেশ করেন, তবে এটি স্ট্রিং ইনপুট হিসাবে গ্রহণ করবে

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

আপনি যদি ইন্ট কাস্টের জন্য একটি স্ট্রিং প্রবেশ করেন 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

যদি আপনি এওয়াল কাস্টের জন্য একটি স্ট্রিং প্রবেশ করেন তবে NameError: name ' ' is not defined সেই ত্রুটিটি পাইথন 2 এর জন্যও প্রযোজ্য।


5

আপনি যদি পাইথন ২.x এ কাঁচা_পিন্ডের পরিবর্তে ইনপুট ব্যবহার করতে চান তবে এই কৌশলটি কাজে আসবে

    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

ভবিষ্যতে যদি অজগর 3 এ যাওয়ার প্রয়োজন হয় সে ক্ষেত্রে নিরাপদে ব্যর্থ হওয়ার জন্য এটি আমার কাজ।

def _input(msg):
  return raw_input(msg)

-6

পাইথন সংস্করণ 3.4.2-তে সমস্যাটি সমাধান হয়েছে বলে মনে হচ্ছে।

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

ভাল কাজ করবে।


3
পাইথন ৩.x inputপাইথন ২.x এর সমতুল্য raw_input( ডকস.পিথথন.আর.৩.০/২০১৮ / হাটসনেউ / ৩.০ এইচটিএমএল# বিল্টিন দেখুন ); এটি 2.x সম্পর্কিত একটি সমস্যা is
jonrsharpe
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.