এক লাইনে একাধিক বিবৃতি কীভাবে রাখবেন?


143

এই প্রশ্নটি ঠিক কী বিবেচনা করা উচিত তা আমি নিশ্চিত নই, যদি কিছুটা অপ্রয়োজনীয় হয় তবে কোডিং গল্ফটি উপযুক্ত বলে মনে হচ্ছে appropriate

অজগর সম্পর্কে আমি কিছুটা উপলব্ধি জানি কিন্তু এগুলি 'পড়া' খুব কঠিন বলে মনে হচ্ছে। আমি এটি যেভাবে দেখছি, একটি উপলব্ধি নিম্নলিখিত কোডের মতোই সম্পন্ন করতে পারে:

for i in range(10): if i == 9: print('i equals 9')

বোধগম্যতা বর্তমানে কীভাবে কাজ করে তার চেয়ে এই কোডটি পড়া খুব সহজ তবে আমি লক্ষ্য করেছি যে আপনার এক লাইনে দুটি ':' থাকতে পারে না ... এটি আমারও নিয়ে আসে ...

আমার প্রশ্ন:

নীচের উদাহরণটি এক লাইনে আনার কোনও উপায় আছে কি?

try:
    if sam[0] != 'harry':
        print('hello',  sam)
except:
    pass

এরকম কিছু দুর্দান্ত হবে:

try: if sam[0] != 'harry': print('hellp',  sam)
except:pass

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

আপনাকে ইনপুট দেওয়ার জন্য ধন্যবাদ ... এবং এখানে একটি হাসি আছে : ডি


কেন এটি কখনও ব্যতিক্রম ছুঁড়ে ফেলবে?
ইগনাসিও ওয়াজকেজ-আব্রামগুলি

1
স্যাম [2] এর অস্তিত্ব থাকতে পারে। এটি একটি কাল্পনিক উদাহরণ। ধন্যবাদ
রাইস

4
পাইথনের মধ্যে বোঝাপড়া কিছু আলাদা। সবকিছুকে এক লাইনে রেখে দেওয়া বোধগম্যতা নয়।
ফেলিক্স ক্লিং

আমি এই হ্যাঁ সম্পর্কে অবগত। ধন্যবাদ। আমি কেবল প্রদর্শন করছিলাম যে আমি কীভাবে বুঝতে পারি যে বোধগম্যটি আরও ভালভাবে কাজ করতে পারে তবে কোলনের কারণে যা আমার সমস্যা / প্রশ্নের মূল তা হতে পারে না
রাইস

\nইনডেন্টদের জন্য কেবল এস ব্যবহার করুন এবং স্পেস ব্যবহার করুন।

উত্তর:


144

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

for i in range(10): print "foo"; print "bar"

তবে আপনি যখন কোনও অন্ট্রাক্ট ব্লকের (পছন্দ মতো if) পরিচয় করিয়ে দেওয়ার মতো কোনও কন্ট্রাক্ট যুক্ত করবেন তখনই আপনার লাইন ব্রেকটি দরকার। এছাড়াও,

for i in range(10): print "i equals 9" if i==9 else None

আইনী এবং আপনি যা চান আনুমানিক হতে পারে।

হিসাবে try ... exceptজিনিস: এটা সম্পূর্ণই বেহুদা হবে ছাড়াexcepttryবলেছেন "আমি এই কোডটি চালাতে চাই, তবে এটি একটি ব্যতিক্রম হতে পারে"। আপনি যদি ব্যতিক্রম সম্পর্কে চিন্তা করেন না তবে এটিকে ছেড়ে যান try। তবে আপনি এটি প্রবেশের সাথে সাথেই আপনি বলছেন "আমি একটি সম্ভাব্য ব্যতিক্রম পরিচালনা করতে চাই" saying passতাহলে আপনি এটি বিশেষভাবে হ্যান্ডেল করতে করতে ইচ্ছুক বলেছেন। তবে এর অর্থ আপনার কোডটি চলতে থাকবে যা অন্যথায় তা হবে না।


1
আকর্ষণীয়, আমি মনে করি আপনার উত্তরোত্তর উদাহরণটি আমি যে উত্তরটির সন্ধান করছিলাম তার নিকটেই চলে আসে। ধন্যবাদ
রাইস

'চেষ্টা করুন' প্রশ্নের সাথে ... কি হবে যদি, আমি জানি যে কোনও সময় এটি ব্যতিক্রম ঘটতে চলেছে তবে আমি কেবল কোডটি চালিয়ে যেতে চাই ... উদাহরণস্বরূপ, স্ট্রিংটি একটি পূর্ণসংখ্যা হতে পারে কিনা তা পরীক্ষা করে দেখুন চেষ্টা করুন: int (স্ট্রিং) ... এটি না পারলে কেবল পরবর্তী লাইনে চালিয়ে যান, ব্যতিক্রমের প্রয়োজন নেই। আপনি যা বলছেন তা আমি দেখতে পাচ্ছি, তবে অন্য কোনও উপায় রয়েছে যা এই ধরণের চেকিং / ত্রুটি-পরিচালনার জন্য উপযুক্ত হতে পারে
রাইস

4
উত্তর try:: পাইথন সিনট্যাক্সের নিয়মগুলি কেবল আপনাকে "ক্লজ" ব্যতীত "একসাথে" চেষ্টা করে "ছাড়ার অনুমতি দেয় না except আমি যা করি তা হ'ল চেষ্টাটি বাদ দিয়ে নিজের ফাংশনটি বাদ দিয়ে, পরিবর্তে এটিকে কল করুন। লাইক if (checkint(s))...এবং def checkint(s): try: int(s)\nreturn True\nexcept: return False
থমাস 21

থমাস এইচ, আমি আশা করি আপনার মন্তব্যটি কোথাও কোনও প্রশ্নের উত্তর ছিল যাতে আমি এটিকে উজ্জীবিত করতে পারি। চমৎকার।
ইভান এক্স

5
@ থমাসএইচ " (যা পাইথনকে কমান্ড-লাইন ওয়ান-লাইনার প্রোগ্রামগুলির জন্য অকেজো করার উপযোগী করে তোলে) ":: আমাকে বাধা দেয় না। 95% ক্ষেত্রে নতুন লাইনের প্রয়োজন নেই। এবং বাকিগুলি \ n এর মাধ্যমে: python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
কেএক্সআর

52

আপনি বিল্ট-ইন এক্সিকিউট স্টেটমেন্ট ব্যবহার করতে পারেন, যেমন:

exec("try: \n \t if sam[0] != 'harry': \n \t\t print('hello',  sam) \nexcept: pass")

যেখানে \nএকটি নতুন লাইন রয়েছে এবং \tএটি ইনডেন্টেশন (একটি ট্যাব) হিসাবে ব্যবহৃত হয়।
এছাড়াও, আপনার ব্যবহার করা স্থানগুলিও গণনা করা উচিত, তাই আপনার ইনডেন্টেশনটি ঠিক মেলে matches

তবে সব অন্যান্য উত্তর ইতিমধ্যে বললেন, এই কোর্সের শুধুমাত্র ব্যবহার করা হবে আপনি কি সত্যিই যখন আছে এক লাইনে এটা করা।

exec এটি বেশ বিপজ্জনক বক্তব্য (বিশেষত ওয়েবপ্যাপ তৈরি করার সময়) যেহেতু এটি স্বেচ্ছাচারিত পাইথন কোডটি কার্যকর করতে দেয়।


4
ধন্যবাদ! এটি সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত, যেমন এটি অন্যদের থেকে ভিন্ন হিসাবে কাজ করে। তবে অবশ্যই, আপনার যদি না হয় তবে কখনও এটি করবেন না! তবে আমার আসলে এই সিনট্যাক্সটি প্রয়োজন, কারণ আমাকে স্ক্রিপ্টগুলিকে একটি নির্দিষ্ট লাইনের পাঠ্য-বাক্সে ইনপুট করতে হয়।
সঞ্জয় মনোহর

ধন্যবাদ! লাইফসেভার! আমি এটি আমার স্ক্রিপ্টে ব্যবহার করি না, তবে ইন্টারেক্টিভ শেলের মধ্যে এটি ডিবাগিংয়ের জন্য দরকারী ... আমি প্রায়শই কেবল ইন্টারেক্টিভ শেলটি ছেড়ে দিয়ে পরিষ্কার পরিবেশ পেতে পুনরায় চালু করি এবং তারপরে আমাকে কিছু পদক্ষেপ পুনরায় করতে হয়, অর্থাত্ একটি আমদানি করা মডিউল, কিছু ফাংশন চলমান এবং তারপরে একটি নির্দিষ্ট ফাংশন দিয়ে কিছু পরীক্ষা করুন। সুউ, আমি কোনও অনলাইনারে "মডিউল আমদানি করা, কিছু ফাংশন চালানো" রাখার একটি উপায় খুঁজছিলাম, তাই আমি দ্রুত এটিকে ইতিহাস থেকে ফিরে কল করতে এবং চালাতে পারি (ইতিহাস থেকে 5 টি আলাদা আইটেম ফিরে কল না করে) +1
oneindelijk

exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass")
উত্তম

ধন্যবাদ কেএক্সআর :) (উত্তরটি উন্নত করতে আমি আপনার ধারণাটি ব্যবহার করেছি)
Elecprog

6

আমি এটি না করার পরামর্শ দিচ্ছি ...

আপনি যেটি বর্ণনা করছেন তা কোনও বোধগম্যতা নয়।

পাইথন কোডের জন্য পিইপি 8 স্টাইল গাইড , যা আমি না সুপারিশ, এই যৌগ বিবৃতি বলার আছে:

  • যৌগিক বিবৃতি (একই লাইনে একাধিক বিবৃতি) সাধারণত নিরুৎসাহিত করা হয়।

হ্যাঁ:

      if foo == 'blah':
          do_blah_thing()
      do_one()
      do_two()
      do_three()

বরং না:

      if foo == 'blah': do_blah_thing()
      do_one(); do_two(); do_three()

পার্থক্য তৈরি করার জন্য এখানে একটি নমুনা বোঝা:

>>> [i for i in xrange(10) if i == 9]
[9]

6

হ্যাঁ এই পোস্টটি 8 বছরের পুরনো, তবে কারও কারও সাথে যদি এমন উত্তর আসে তখনই তা প্রবেশ করুন: আপনি এখন কেবল সেমিকোলন ব্যবহার করতে পারেন। তবে, আপনি / এলিফ / অন্য স্টিমেন্ট ব্যবহার করতে পারবেন না, যখন / লুপগুলির জন্য, এবং আপনি কার্যগুলি সংজ্ঞায়িত করতে পারবেন না। এর প্রধান ব্যবহার হ'ল আমদানি করা মডিউলগুলি ব্যবহার করার সময় যেখানে আপনাকে কোনও ফাংশন সংজ্ঞায়িত করতে বা কোনও / এলিফ / অন্য / যখন / বিবৃতি / লুপগুলি ব্যবহার করতে হয় না।

এখানে একটি উদাহরণ যা গানের শিল্পী, গানের নাম এবং গানের জন্য প্রতিভা সন্ধান করে:

import bs4, requests; song = input('Input artist then song name\n'); print(bs4.BeautifulSoup(requests.get(f'https://genius.com/{song.replace(" ", "-")}-lyrics').text,'html.parser').select('.lyrics')[0].text.strip())

6

আমি এটি উত্সাহিত করি না, তবে বলি আপনি কমান্ড লাইনে রয়েছেন, পাইথন ছাড়া আপনার আর কিছুই নেই এবং আপনার সত্যই ওয়ান-লাইনার দরকার আছে, আপনি এটি করতে পারেন:

python -c "$(echo -e "a='True'\nif a : print 1")"

আমরা এখানে যা করছি তা প্রাক প্রক্রিয়াজাতকরণ \nপাইথন কোডটি মূল্যায়নের আগে ।

এটাই সুপার হ্যাকি! এই মত কোড লিখবেন না।


1

হতে পারে "এবং" বা "বা" দিয়ে

"বা" লিখতে ভুয়া প্রয়োজন পরে

"এবং" লিখতে সত্য প্রয়োজনের পরে

মত

n=0
def returnsfalse():
    global n
    n=n+1
    print ("false %d" % (n))
    return False
def returnstrue():
    global n
    n=n+1
    print ("true %d" % (n))
    return True
n=0
returnsfalse() or  returnsfalse() or returnsfalse() or returnstrue() and returnsfalse()

ফলাফল:

false 1
false 2
false 3
true 4
false 5

বা সম্ভবত পছন্দ

(returnsfalse() or true) and (returnstrue() or true) and ...

গুগল "এখানে কীভাবে এক লাইনের অজগরটিতে একাধিক স্ট্যাটাস যুক্ত করা যায়" অনুসন্ধান করে এখানে এসেছিলেন, সরাসরি প্রশ্নের উত্তর দেয় না, অন্য কারও প্রয়োজন হতে পারে।


1

একটি জন্য python -c ওরিয়েন্টেড সমাধানের জন্য, এবং আপনি বাশ শেলটি সরবরাহ করার জন্য হ্যাঁ আপনার কাছে এই উদাহরণের মতো একটি সাধারণ এক-লাইন বাক্য গঠন থাকতে পারে:

মনে করুন আপনি এর মতো কিছু করতে চান ( except: passনির্দেশ সহ আপনার নমুনার সাথে খুব মিল ):

python -c  "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path

এটি কাজ করবে না এবং এই ত্রুটিটি উত্পাদন করবে না:

  File "<string>", line 1
    from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n
                                                                                                                  ^
SyntaxError: unexpected character after line continuation character `

এটি হ'ল বাশ এবং পাইথন এর মধ্যে \nপালানোর ক্রমগুলির ব্যাখ্যা । সমস্যা সমাধানের জন্য $'string'বাশ সিনট্যাক্স ব্যবহার \nকরে পাইথনের আগে বাশ ব্যাখ্যাকে জোর করতে পারেন । উদাহরণটিকে আরও চ্যালেঞ্জিং করে তুলতে আমি end=..\n..পাইথন প্রিন্ট কলটিতে একটি পাইথনের একটি সাধারণ স্পেসিফিকেশন যুক্ত করেছি : শেষে আপনি \nবাশ এবং পাইথন দুটি একসাথে কাজ করার জন্য দুটি ব্যাখ্যা পেতে সক্ষম হবেন , এটির প্রতিটি উদ্বেগের পাঠ্য। যাতে শেষ অবধি সঠিক সমাধানটি এর মতো:

python -c  $'from __future__ import print_function\ntry:\n import numpy;\n print( numpy.get_include(), end="\\n" )\n print( "Hello" )\nexcept:pass\n' OUTPUT_VARIABLE __numpy_path

এটি কোনও ত্রুটি ছাড়াই সঠিক পরিষ্কার আউটপুট নিয়ে যায়:

/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello

দ্রষ্টব্য: এটি পাশাপাশি কাজ করা উচিত exec ওরিয়েন্টেড সমাধানগুলির , কারণ সমস্যাটি এখনও একই (বাশ এবং পাইথন ইন্টারপ্রেটারদের প্রতিযোগিতা)।

দ্রষ্টব্য 2: কেউ কেউ কিছু \nদ্বারা প্রতিস্থাপন করে সমস্যার সমাধান করতে পারে; কিন্তু এটা যখন আমার সমাধান সবসময় "ওয়ান লাইন" ক্লাসিক বহু-লাইন পাইথন প্রোগ্রাম কোন টুকরা করতে পারবেন, কাজ যে কোন সময় (পাইথন নির্মান উপর নির্ভর করে) না।

দ্রষ্টব্য 3: অবশ্যই, যখন এক-আস্তরণের সময় পাইথনের জায়গাগুলি এবং ইন্ডেন্টেশনের যত্ন নেওয়া উচিত, কারণ বাস্তবে আমরা কঠোরভাবে "ওয়ান-আস্তরণের" নই, তবে \nবাশ এবং পাইথনের মধ্যে পালানোর ক্রমের যথাযথ মিশ্র ব্যবস্থাপনার কাজ করছি B । ক্লাসিক বহু-লাইন পাইথন প্রোগ্রামের যে কোনও টুকরোগুলি আমরা এইভাবে মোকাবেলা করতে পারি। সমাধানের নমুনা এটিও চিত্রিত করে।


0

আপনি অনেক কিছু মিশ্রণ করছেন, যা আপনার প্রশ্নের উত্তর দেওয়া কঠিন করে তোলে। সংক্ষিপ্ত উত্তরটি: যতদূর আমি জানি, আপনি যা করতে চান তা পাইথনে কেবল সম্ভব নয় - সঙ্গত কারণেই!

দীর্ঘতর উত্তরটি হ'ল আপনি যদি পাইথনে বিকাশ করতে চান তবে আপনার পাইথনের সাথে নিজেকে আরও আরামদায়ক করা উচিত। বোধগম্যতা পড়া কঠিন নয়। সেগুলি পড়তে আপনার অভ্যস্ত হতে পারে না, তবে আপনি পাইথন বিকাশকারী হতে চাইলে আপনাকে এটিতে অভ্যস্ত হতে হবে। যদি এমন কোনও ভাষা থাকে যা আপনার প্রয়োজনের সাথে আরও ভাল ফিট করে, তবে সেইটিকে বেছে নিন। আপনি যদি পাইথন বেছে নেন, অজগর উপায়ে সমস্যাগুলি সমাধান করার জন্য প্রস্তুত হন। অবশ্যই আপনি পাইথনের বিরুদ্ধে লড়াই করতে পারেন তবে মজা হবে না! ;-)

এবং আপনি যদি আমাদের আসল সমস্যাটি কী তা আমাদের জানান, আপনি একটি অজগর উত্তরও পেতে পারেন। "এক লাইনে কিছু পাওয়া" আমাদের সাধারণত প্রোগ্রামিং সমস্যা হয় না।


আমি অজগর ভালবাসি! আমি কেবল প্রদর্শন করছিলাম যে আমি কীভাবে বুঝতে পারি যে বোধগম্যগুলি আরও ভাল কাঠামোযুক্ত হতে পারে তবে কোলনের কারণে তা আমার সমস্যা / প্রশ্নের মূল কারণ হতে পারে না ... আমি আপনার উত্তর দিয়ে দেখছি যে মাল্টিস্টেটমেন্টগুলি চেষ্টা করে যেমন কলোন দ্বারা পৃথক করা হয়েছে: যদি স্যাম [ 0]! = 'হ্যারি': মুদ্রণ ('হেল্প', সাম) সম্ভব নয় ... এটি কি সঠিক? ধন্যবাদ ... আমি কেবল এটি কিছু ডিবাগ উদ্দেশ্যে ব্যবহার করছি তাই আমি এমন একটি ছোট্ট সহজ কোড খুঁজছি যা সহজেই সরানো যায় এবং প্রচুর স্থান লোল না
রাইস

হ্যাঁ, যতদূর আমি জানি এটি সম্ভব নয়। তবে কেউ ইতিমধ্যে বিবৃত হিসাবে: আপনি যা করেন তা বোঝার চেয়ে আলাদা কিছু। আপনি যদি কোডটি সহজেই মুছে ফেলতে সক্ষম হতে চান তবে এটি কোনও ফাংশনে রেখে দিন। "ব্যতীত: পাস" সম্পর্কিত সমস্যা সম্পর্কে, কোনও সাজসজ্জা সম্পর্কে ভাবুন যা ব্যতিক্রম বা এর মতো কিছু উপেক্ষা করে। আবার: আপনার আসল সমস্যাটি বরাবর চেষ্টা করার চেষ্টা করুন, ইতিমধ্যে আপনার মনে থাকা সমাধানটি নিয়ে সমস্যা নয়। ;-)
আছিম

3
"আপনি অনেক কিছুর সাথে মিশ্রিত করছেন" এর মতো উস্কানিমূলক বক্তব্যের জন্য কেন লোকেরা তাদের উত্তরটি শুরু করতে হবে? পারলে ভোট দিন
জন জিয়াং

"এক লাইনে কিছু পাওয়া" আমাদের সাধারণত কোনও প্রোগ্রামিং সমস্যা হয় না "" -> তবে এটি প্রায়শই সিসাদমিন সমস্যা, তাই প্রশ্নটি এখনও এই দিকটিতে প্রাসঙ্গিক
অ্যালেক্স এফ

0

এর অ্যাক্টিচুয়ালটি সম্ভব ;-)

# not pep8 compatible^
sam = ['Sam',]
try: print('hello',sam) if sam[0] != 'harry' else rais
except: pass

আপনি পাইথনের মতো খুব কুরুচিপূর্ণ জিনিসগুলি করতে পারেন:

def o(s):return''.join([chr(ord(n)+(13if'Z'<n<'n'or'N'>n else-13))if n.isalpha()else n for n in s])

যা 99 অক্ষরের সাথে এক লাইনে rot13 / cesa এনক্রিপশনের জন্য কাজ করে।


-2

এখানে একটি উদাহরণ:

আমি সীমার মধ্যে (৮০, 90): মুদ্রণ করুন (i, শেষ = "") যদি (i! = 89) অন্য মুদ্রণ (i)

আউটপুট: 80 81 82 83 84 85 86 87 88 89

>

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