আমি কীভাবে সংখ্যা হিসাবে ইনপুট পড়তে পারি?


261

নীচের কোডগুলিতে আর্টগুলির পরিবর্তে xএবং yস্ট্রিংগুলি কেন ?

(দ্রষ্টব্য: পাইথন 2.x ব্যবহারে raw_input()। ইন পাইথন 3.x ব্যবহার input()raw_input()নাম পালটে করা হয়েছে input()পাইথন 3.x মধ্যে)

play = True

while play:

    x = input("Enter a number: ")
    y = input("Enter a number: ")

    print(x + y)
    print(x - y)
    print(x * y)
    print(x / y)
    print(x % y)

    if input("Play again? ") == "no":
        play = False

উত্তর:


313

TLDR

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

পাইথন 2.x

ব্যবহারকারীর ইনপুট পেতে দুটি ফাংশন ছিল, বলা হয় inputএবং raw_input। তাদের মধ্যে পার্থক্যটি raw_inputহ'ল, স্ট্রিং আকারে ডেটা মূল্যায়িত করে না এবং যেমনটি ফিরিয়ে দেয়। তবে, inputআপনি যা প্রবেশ করেছেন তা মূল্যায়ন করবে এবং মূল্যায়নের ফলাফল ফিরে আসবে। উদাহরণ স্বরূপ,

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

তথ্য 5 + 17মূল্যায়ন করা হয় এবং ফলাফল হয় 22। যখন এটি প্রকাশের মূল্যায়ন করে 5 + 17, এটি সনাক্ত করে যে আপনি দুটি সংখ্যা যুক্ত করছেন এবং ফলস্বরূপ একই intধরণের হবে। সুতরাং, ধরণের রূপান্তরটি নিখরচায় করা হয় এবং 22ফল হিসাবে ফিরে আসে inputএবং dataভেরিয়েবলে সংরক্ষণ করা হয়। আপনি কল দিয়ে রচিত inputহিসাবে ভাবতে পারেন ।raw_inputeval

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

দ্রষ্টব্য:input পাইথন ২.x ব্যবহার করার সময় আপনার সতর্ক হওয়া উচিত। আমি উত্তর দিয়েছিলাম যে এটি ব্যবহার করার সময় কারও কেন সাবধানতা অবলম্বন করা উচিত ।

কিন্তু, raw_inputইনপুটটি মূল্যায়ন করে না এবং স্ট্রিং হিসাবে এটির মতো ফিরে আসে।

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)

পাইথন 3.x

পাইথন ৩.x inputএবং পাইথন ২.x এর raw_inputমত এবং raw_inputএটি পাইথন ৩.x এ উপলব্ধ নয়

>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)

সমাধান

আপনার প্রশ্নের উত্তর দেওয়ার জন্য, যেহেতু পাইথন 3.x মূল্যায়ন করে না এবং ডাটা টাইপ রূপান্তর করে, আপনি স্পষ্টভাবে রূপান্তর করতে হবে intসঙ্গে, গুলি int, ভালো

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

আপনি যে কোনও বেসের সংখ্যা গ্রহণ করতে পারেন এবং intএটিকে সরাসরি ফাংশন দিয়ে বেস -10 এ রূপান্তর করতে পারেন

>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365

দ্বিতীয় প্যারামিটারটি প্রবেশ করানো সংখ্যার ভিত্তি কী তা বলে এবং তারপরে অভ্যন্তরীণভাবে এটি বোঝে এবং রূপান্তর করে। প্রবেশ করা ডেটা ভুল হলে এটি একটি নিক্ষেপ করবে ValueError

>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'

একটি ভগ্নাংশ উপাদান থাকতে পারে এমন মানগুলির জন্য, floatধরণটি এর চেয়ে ভাল হবে int:

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

তা ছাড়া আপনার প্রোগ্রামটি এইভাবে কিছুটা পরিবর্তন করা যেতে পারে

while True:
    ...
    ...
    if input("Play again? ") == "no":
        break

আপনি এবং playব্যবহার করে পরিবর্তনশীল থেকে মুক্তি পেতে পারেন ।breakwhile True


অন্য কোনও উপায় আছে, যেমন কোনও ফাংশন বা এমন কিছুর জন্য যাতে আমাদের 3.x এ INT তে রূপান্তর করার দরকার নেই ??
শ্রেয়ান মেহতা

@ শ্রায়ান মেহেতা evalকাজ করবে তবে আপনার পক্ষে চাপের কারণ না থাকলে এটির জন্য যাবেন না।
thefourtheye

2
@ থেফোর্তে অন্তত তার ast.literal_evalজন্য ব্যবহার করুন । এটির নিরাপত্তার উদ্বেগ নেই eval
দর্শকদের

4
আমি এই প্রশ্নোত্তরটিকে ডুপ টার্গেট হিসাবে ব্যবহার করি তবে সম্ভবত আপনি পাইথন 3 সমাধানের সাথে একটি টিডিএলআর যুক্ত করতে পারেন, অর্থাৎ int(input()... শীর্ষে? পাইথন 2 এটা জীবনের শেষ শেষের কাছাকাছি হয় এবং পাইথন 3 তথ্য খুব আইএমও সমাহিত করা হয়েছে
Chris_Rands

ভেরিয়েবল হিসাবে প্লে অপসারণের সর্বশেষ বিটটি ভেরিয়েবল প্লেটি কোডটিকে আরও বোধগম্য করে তোলে বলে সুবিধাজনক নয়। এবং কারণ ছাড়াই কোডটি কীভাবে পরিবর্তিত হতে পারে তার জন্য পরামর্শ দেওয়া ভাল অনুশীলন নয়। অন্যথায়, এটি একটি দুর্দান্ত উত্তর :)
OuuGiii

44

পাইথন ৩.x এ, raw_inputনাম পরিবর্তন inputকরে পাইথন ২.x inputসরানো হয়েছিল।

এর অর্থ এই যে, ঠিক raw_input, inputপাইথন 3.x সবসময় স্ট্রিং অবজেক্ট ফেরৎ।

সমস্যাটি সমাধান করার জন্য, আপনাকে অবশ্যই স্পষ্টভাবে ইনপুটগুলিকে পূর্ণসংখ্যায় প্রবেশের মাধ্যমে তৈরি করতে হবে int:

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

27

একক লাইনে একাধিক পূর্ণসংখ্যার জন্য mapআরও ভাল।

arr = map(int, raw_input().split())

যদি নম্বরটি ইতিমধ্যে জানা থাকে তবে (2 সংখ্যার মতো), আপনি ব্যবহার করতে পারেন

num1, num2 = map(int, raw_input().split())

16

input()(পাইথন 3) এবং raw_input()(পাইথন 2) সর্বদা স্ট্রিংগুলি ফেরত দেয়। ফলাফলকে সুস্পষ্টভাবে পূর্ণসংখ্যায় রূপান্তর করুন int()

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

11

একাধিক প্রশ্নের একক লাইনে বেশ কয়েকটি পূর্ণসংখ্যার ইনপুট প্রয়োজন। সবচেয়ে ভাল উপায় হ'ল এক পংক্তির সম্পূর্ণ স্ট্রিং ইনপুট করা এবং তারপরে এটিকে পূর্ণসংখ্যায় ভাগ করা। এখানে পাইথন 3 সংস্করণ রয়েছে:

a = []
p = input()
p = p.split()      
for i in p:
    a.append(int(i))

এছাড়াও একটি তালিকা বোধগম্যতা ব্যবহার করা যেতে পারে

p = input().split("whatever the seperator is")

এবং স্ট্রিং থেকে ইনপগুলিতে সমস্ত ইনপুট রূপান্তর করতে আমরা নিম্নলিখিতটি করি

x = [int(i) for i in p]
print(x, end=' ')

একটি সরল রেখায় তালিকা উপাদান মুদ্রণ করা উচিত।


6

পূর্ণসংখ্যায় রূপান্তর করুন:

my_number = int(input("enter the number"))

একইভাবে ভাসমান পয়েন্ট সংখ্যাগুলির জন্য:

my_decimalnumber = float(input("enter the number"))

4
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

লুপটির জন্য 'এন' সংখ্যাটি চলবে। দ্বিতীয় 'এন' অ্যারের দৈর্ঘ্য। শেষ বিবৃতিটি একটি তালিকাতে পূর্ণসংখ্যার মানচিত্র করে এবং স্থান পৃথক আকারে ইনপুট নেয়। আপনি লুপের শেষে অ্যারেটিও ফিরিয়ে দিতে পারেন।


3

আমি কোডচিফটিতে একটি সমস্যার সমাধান করার সময় পূর্ণসংখ্যার ইনপুট নেওয়ার ক্ষেত্রে একটি সমস্যার মুখোমুখি হয়েছিলাম , যেখানে দুটি সংখ্যক - স্থান দ্বারা পৃথক করা - একটি লাইন থেকে পড়তে হবে।

যদিও int(input())একটি একক পূর্ণসংখ্যার জন্য যথেষ্ট, আমি দুটি পূর্ণসংখ্যার ইনপুট দেওয়ার সরাসরি উপায় খুঁজে পাইনি। আমি এটি চেষ্টা করেছি:

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
    if num[i] == ' ':
        break

num1 = int(num[:i])
num2 = int(num[i+1:])

এখন আমি সংখ্যা 1 এবং num2 পূর্ণসংখ্যা হিসাবে ব্যবহার করি। আশাকরি এটা সাহায্য করবে.


এটি খুব আকর্ষণীয় দেখায়। যাইহোক, লুপটি বের iহয়ে গেলে ধ্বংস হয় না for?

@hosch250যখন একটি লুপটি প্রস্থান করা হয়, তখন সূচক ভেরিয়েবলের মান (এখানে, i) থেকে যায়। আমি এই টুকরোটি চেষ্টা করে দেখেছি এবং এটি সঠিকভাবে কাজ করে।
অরবিন্দ

1
এই ধরণের ইনপুট কারসাজির জন্য, আপনি num1, num2 = map(int, input().split())যদি জানেন যে আপনি কতগুলি পূর্ণসংখ্যার মুখোমুখি হবেন বা nums = list(map(int, input().split()))যদি আপনি না পান তবে can
301_ মোভেড_পরেমেটলি

3
def dbz():
    try:
        r = raw_input("Enter number:")
        if r.isdigit():
            i = int(raw_input("Enter divident:"))
            d = int(r)/i
            print "O/p is -:",d
        else:
            print "Not a number"
    except Exception ,e:
        print "Program halted incorrect data entered",type(e)
dbz()

Or 

num = input("Enter Number:")#"input" will accept only numbers

2

যদিও আপনার উদাহরণে, int(input(...))কোনো ক্ষেত্রে কৌতুক আছে, python-futureএর builtins.inputমূল্য বিবেচনা যে তোলে যেহেতু উভয় পাইথন 2 এবং 3 নিশ্চিত আপনার কোড কাজ এবং এর অক্ষম Python2 ডিফল্ট আচরণ input"চালাক" ইনপুট ডাটা টাইপ সম্পর্কে হতে চেষ্টা ( builtins.inputমূলত শুধু মত আচরণ করে raw_input)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.