পাইথনে ব্যবহারকারীর ইনপুট পাওয়ার জন্য কি আরও ছোট উপায় আছে?


17

এটি কোনও চ্যালেঞ্জ নয়। আমি ভাবছি কিনা 19 বাইটের কমের সাথে পাইথন (2 বা 3) এর দুটি পৃথক ভেরিয়েবলের ব্যবহারকারীর ইনপুট পাওয়া সম্ভব কিনা? এগুলি আমি পেতে পারি এমন সংক্ষিপ্ততম:

a,b=input(),input()
a=input();b=input() (newline replaced with semicolon for readability)
i=input;a,b=i(),i()

এটি করার কোনও ছোট উপায় আছে?


2
যদি আপনি দুটিরও বেশি ইনপুট গ্রহণ করেন তবে তৃতীয়টি সম্ভবত সেরা হবে।
সুপারজেডি ২৪

1
আমি কমান্ড লাইন যুক্তি যুক্ত করতে যাচ্ছিলাম a,b=sys.argv[1:2]বা যা কিছু আছে তারপরে তবে আপনার একটি import sys(ডান?) দরকার
অ্যালেক্স এ।

পাইথন 3 এ a,b=input().split()অন্য 19 বাইট সমাধান হবে, যদিও কোনও উন্নতি হবে না। নোট করুন যে এর অর্থ a এবং b টি স্ট্রিং এবং ইনপুটটি একবারে একটি স্পেস দ্বারা বিভক্ত হয়ে প্রবেশ করানো হয়।
ম্যাটি

এটি সাহায্য করে কিনা তা নিশ্চিত নয় তবে কয়েকটি ভাষায় আপনি 2 ভেরিয়েবলের পরিবর্তে 2 নম্বর পেতে ভেক্টর ব্যবহার করতে পারেন। দুটি স্বেচ্ছাচারী ভেরিয়েবলের জন্য আরও জটিল ধারক ব্যবহার করা যেতে পারে।
ডেনিস জাহেরউদ্দিন

a,b=input()পি 2
অলিভার নি

উত্তর:


11

যদি ব্যবহারকারীকে অনুরোধ জানানো কোনও ব্যাপার না, তবে এটি eval3 বা ততোধিকের তুলনায় কিছুটা কম is

a,b,c=map(input,[1]*3)
a,b,c=map(input,'111')

অনুরোধটি ঠিক না থাকলেও এটিও খাটো:

a,b,c=map(input,['']*3)

দুঃখের বিষয়, xnor এর ধারণাটি 2 ইনপুটগুলির জন্য কোনও কিছুই সংরক্ষণ করে না কারণ এটি এখনও দীর্ঘ (19 বাইট)। তবে আপনার যদি ইতিমধ্যে উপযুক্ত দৈর্ঘ্যের সাথে কিছু স্ট্রিং (বা উপযুক্ত পুনরাবৃত্তযোগ্য) থাকে (কারণ যাদু?) তবে এটি সংক্ষিপ্ত হতে পারে।

xnor কেবল পাইথন 2 এ 3 ইনপুটগুলির জন্য একটি যাদু স্ট্রিংয়ের উদাহরণ পেয়েছে:

a,b,c=map(input,`.5`)

এটির জন্য প্রম্পটগুলি গুরুত্বপূর্ণ না হওয়া প্রয়োজন।

এই কৌশলটি 1eXস্বরলিপিটি ব্যবহার করে (x + 3 ইনপুট পেয়ে) বিপুল সংখ্যক ইনপুটগুলির জন্য বাইটগুলি সংরক্ষণ করতে সহায়তা করে :

 a,b,c,d,e,f=map(input,`1e3`)

ব্যাখ্যা:

পাইথনের mapফাংশনটি ফাংশনটি সম্পাদন করে যা এটি পুনরাবৃত্তিযোগ্য প্রতিটি উপাদানগুলিতে এটি পাস করা হয় এবং এই কলগুলির ফলাফল সম্বলিত তালিকা (বা মানচিত্র অবজেক্ট) প্রদান করে। প্রথম উদাহরণের জন্য, মানচিত্রটি পচে যেতে পারে:

[input(1), input(1), input(1)]

2
এরকম map(input,'xxx')3 Vars, 2 জন্য ভালো, এবং 4+ জন্য খারাপ জন্য সমান দৈর্ঘ্যের হয়।
xnor

3
যদি কোনও সুযোগে আপনাকে ঠিক 22 টি ইনপুট নেওয়া দরকার তবে map(input,`id`)তা খাটো :-)। একইভাবে, map(input,`.1`)19 ইনপুট জন্য।
xnor

3
প্রকৃতপক্ষে, a,b,c=map(input,`.5`)3 ইনপুটগুলির জন্য একটি চর সংরক্ষণ করে না, যেহেতু .5হিসাবে প্রতিনিধিত্ব করা হয় 0.5
xnor

হা এটা ভালো. কুল কৌশল!
ডিজেএমসিএমহেম


4

মনে রাখবেন যে প্রশ্নটি ইনপুট প্রকারটি নির্দিষ্ট না করে বা একটি সম্পূর্ণ প্রোগ্রামের প্রয়োজন না হলে আপনি প্রয়োজনীয়তা কেটে ফাংশন আর্গুমেন্ট হিসাবে ইনপুট নিতে পারেন input()যেখানে এটি বিকল্প নয়, নিম্নলিখিত কিছু ক্ষেত্রে সহায়তা করতে পারে।


আপনি যদি ভেরিয়েবলগুলিতে একক অক্ষর চান aএবং b, আপনি ব্যবহার করতে পারেন

a,b=input()

2 টি অক্ষরের স্ট্রিং প্রবেশ করার পরে প্রথম চরিত্রটি বরাদ্দ করা হবে aএবং দ্বিতীয় অক্ষর নির্ধারিত হবে b। (স্ট্রিংয়ের 2 বা তার বেশি অক্ষরের চেয়ে কম ত্রুটি ঘটবে))

আপনার যদি ভেরিয়েবলের জন্য একক অক্ষরের বেশি প্রয়োজন হয় তবে এই পদ্ধতির কাজ হবে না। এটি এখনও স্ট্রিং হিসাবে 2 একক সংখ্যা সংখ্যা লিখতে ব্যবহৃত হতে পারে। যদি 9 এর চেয়ে বেশি সংখ্যার প্রয়োজন হয় তবে সম্ভাব্য ইনপুট অক্ষরের পুরো পরিসরটি সংখ্যা হিসাবে ব্যাখ্যা করা যেতে পারে।

নোট করুন যে এটি 2 টিরও বেশি ভেরিয়েবলের জন্যও কাজ করে:

a,b,c,d,e,f,g,h=input()

এটি কাজ করে কারণ পাইথনে একটি স্ট্রিং হ'ল অক্ষরের ক্রম এবং এটি যে কোনও জায়গায় সিকোয়েন্স আশা করা যায় ব্যবহার করা যেতে পারে।

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