প্রিন্টের জন্য বিবৃতি কীভাবে ইনলাইন লিখবেন?


376

আমার কিছু জিনিস কেবল তখনই প্রিন্ট করা দরকার যখন একটি বুলিয়ান ভেরিয়েবল সেট করা থাকে True। সুতরাং, এ খুঁজছেন পরে এই , আমি একটি সহজ উদাহরণ চেষ্টা:

>>> a = 100
>>> b = True
>>> print a if b
  File "<stdin>", line 1
    print a if b
             ^
SyntaxError: invalid syntax  

আমি যদি লিখি তবে একই জিনিস print a if b==True

আমি এখানে কি মিস করছি?



2
ভাল প্রশ্ন, জটিল উত্তর ... একটি সরাসরি উত্তর হবে "অন্য অংশটি বাধ্যতামূলক"।
মিনিট

উত্তর:


737

পাইথন নেই না একটি trailing আছে if বিবৃতি

ifপাইথনে দুই ধরণের রয়েছে :

  1. if বিবৃতি:

    if condition: statement
    if condition:
        block
    
  2. if অভিব্যক্তি (পাইথন 2.5 তে প্রবর্তিত)

    expression_if_true if condition else expression_if_false

এবং দ্রষ্টব্য, যে উভয় print aএবং b = aবিবৃতি হয়। কেবল aঅংশটিই একটি অভিব্যক্তি। সুতরাং আপনি যদি লিখুন

print a if b else 0

এর অর্থ

print (a if b else 0)

এবং একইভাবে আপনি যখন লিখুন

x = a if b else 0

এর অর্থ

x = (a if b else 0)

এখন কোন elseধারা না থাকলে এটি কী মুদ্রণ / নির্ধারণ করবে ? মুদ্রণ / অ্যাসাইনমেন্ট এখনও আছে

এবং দ্রষ্টব্য, আপনি যদি এটি সেখানে না চান তবে আপনি সর্বদা ifএকটি রেখায় নিয়মিত বিবৃতি লিখতে পারেন , যদিও এটি কম পাঠযোগ্য এবং দু'-লাইনের বৈকল্পটি এড়ানোর কোনও কারণ নেই।


আমি মনে করি যে if condition: statementমাল্টিলাইন স্টেটমেন্টগুলির ক্ষেত্রে এটি কার্যকর হয় না।
Val,

হ্যাঁ, তবে আপনার ব্যবহারের দরকার নেই যদি কেবল আমার উদাহরণগুলিতে নীচে দেখায় যেমন বুলিয়ান যুক্তি ব্যবহার করেন।
এডুয়ার্ডো

1
@JanHudec তাহলে পাইথন একটি trailing নেই if, তাহলে কেন কাজ করে: print [i for i in range(10) if i%2]? আমি আশা করি তারা বোঝার বাইরে এটির অনুমতি
দিত

3
@ mbomb007, যদি বিবৃতি হয় তবে এটি অনুসরণযোগ্য নয় । এটি কেবল তালিকার একটি অংশ (বা জেনারেটর) বোধগম্যতা। মনে রাখবেন যে, এর আগে জিনিসটি যদি কোনও বিবৃতি না হয় তবে এটি forতাদের মধ্যে দুটি মত প্রকাশ ।
জান হুডেক

2
@ আলেকজান্দারভোন ওয়ার্নার, হ্যাঁ, এটি যুক্তিযুক্ত বলে মনে হচ্ছে।
জানু হুডেক

93

ইনলাইন যদি-অন্য এক্সপ্রেসনে সর্বদা অন্য ধারা থাকতে হবে, যেমন:

a = 1 if b else 0

যদি আপনি আপনার 'একটি' পরিবর্তনশীল মানটি অপরিবর্তিত রাখতে চান - পুরানো 'এ' মানটি ধরে রেখে (অন্যথায় সিনট্যাক্সের দাবিতে এখনও প্রয়োজনীয়):

a = 1 if b else a

কোডের এই টুকরা ছেড়ে একটি অপরিবর্তিত যখন খ পালাক্রমে মিথ্যা যাবে।


1
উহু. তবে আমি যদি অন্য শাখায় কিছু না করতে চাই? আমি প্রয়োজন মত:print a if b
রিকি রবিনসন

2
else aতাহলে আরও ভাল হবেelse 0
এয়ার অ্যারাইড

13
if b: print aসেক্ষেত্রে কেবল একটি সরল প্রয়োজন
জামিলাক

4
উত্তরটি ঠিক করা, কারণ এটি 'স্টেটমেন্ট' শব্দটির জন্য না থাকলে এটি প্রায় ভাল which প্রশ্নই সারকথা এটি হয় না এক বিবৃতিতে।
জানু হুডেক

1
+ 1-1: অন্যটি প্রকাশ বাধ্যতামূলক বলে উল্লেখ করার জন্য ভাল তবে প্রশ্নে মামলার উত্তর না দেওয়ার জন্য ঠিক নয়: "কিছুই না" মুদ্রণ করুন (অন্যান্য উত্তরগুলির বিবরণ দেখুন ""বা কিছু Noneদেখুন)।
সানচো.এস পুনরায় স্থাপন করুনমোনিকাসেলিও

18

'অন্য' বিবৃতি বাধ্যতামূলক। আপনি এই জাতীয় জিনিস করতে পারেন:

>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>> 

সম্পাদনা করুন:

অথবা, আপনার প্রয়োজনের উপর নির্ভর করে আপনি চেষ্টা করতে পারেন:

>>> if b: print(a)

15

আপনি যদি না চান from __future__ import print_functionতবে নিম্নলিখিতগুলি করতে পারেন:

a = 100
b = True
print a if b else "",  # Note the comma!
print "see no new line"

কোন মুদ্রণ:

100 see no new line

আপনি যদি অজানা না হন from __future__ import print_functionবা 3 বা তার পরে পাইথন ব্যবহার করছেন:

from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")

আপনার কোডটি সিনট্যাক্টিক্যালি সঠিকভাবে তৈরি করার জন্য অন্য একটিটি যুক্ত করা আপনার কেবলমাত্র পরিবর্তনটি প্রয়োজন, শর্তাধীন অভিব্যক্তির জন্য আপনার অন্যটি দরকার ("অন্যথায় যদি অবরুদ্ধ থাকে তবে" লাইনে থাকুন)

কারণ আমি ব্যবহার করা হয়নি Noneবা 0মত থ্রেড অন্যদের ব্যবহার করেছেন, কারণ ব্যবহার করছে None/0প্রোগ্রাম কারণ হবে print Noneবা print 0ক্ষেত্রে যেখানে মধ্যে bহয় False

আপনি যদি এই বিষয়টি সম্পর্কে পড়তে চান তবে আমি এই বৈশিষ্ট্যটি পাইথনে যুক্ত করা হয়েছিল সেই প্যাচের জন্য প্রকাশিত নোটগুলির একটি লিঙ্ক অন্তর্ভুক্ত করেছি ।

উপরের 'প্যাটার্ন' পিইপি 308 তে প্রদর্শিত প্যাটার্নের সাথে খুব মিল:

এই বাক্য গঠনটি অদ্ভুত এবং পিছনের দিকে মনে হতে পারে; শর্তটি কেন প্রকাশের মাঝখানে যায় এবং সামনের সি এর মতো হয় না? x: y? সিদ্ধান্তটি স্ট্যান্ডার্ড লাইব্রেরির মডিগুলিতে নতুন সিনট্যাক্স প্রয়োগ করে এবং ফলাফল কোডটি কীভাবে পড়বে তা দেখে পরীক্ষা করা হয়েছিল। শর্তসাপেক্ষ এক্সপ্রেশন ব্যবহৃত হয় এমন অনেক ক্ষেত্রে, একটি মান 'কমন কেস' বলে মনে হয় এবং একটি মান একটি 'ব্যতিক্রমী কেস' বলে মনে হয়, যখন শর্ত পূরণ না হয় কেবল বিরল ঘটনাগুলিতেই ব্যবহৃত হয়। শর্তসাপেক্ষ বাক্য গঠনটি এই নিদর্শনটিকে আরও কিছুটা সুস্পষ্ট করে তোলে:

বিষয়বস্তু = ((ডক + + \ n ') যদি অন্য কোনও দস্তাবেজ' ')

সুতরাং আমি মনে করি সামগ্রিকভাবে এটি কাছে যাওয়ার একটি যুক্তিসঙ্গত উপায় তবে আপনি সরলতার সাথে তর্ক করতে পারবেন না:

if logging: print data

ধন্যবাদ। এখানে জিনিসটি print ""এখনও কিছু মুদ্রণ করবে: একটি ফাঁকা রেখা।
রিকি রবিনসন

ধন্যবাদ। endযুক্তিটি কেবল printপাইথন 3.x এ প্রদর্শিত হবে, তাই না?
রিকি রবিনসন

1
আয়ে, আমি অত: পর একটি 2.7 মানুষের আরও আছি from __future__ import print_function
Noelkd

11

2.5 থেকে আপনি সি এর সমতুল্য ব্যবহার করতে পারেন "?:" টের্নারি শর্তসাপেক্ষ অপারেটর এবং বাক্য গঠনটি হ'ল:

[on_true] if [expression] else [on_false]

সুতরাং আপনার উদাহরণটি ভাল, তবে আপনাকে কেবল যুক্ত করতে হবে else, যেমন:

print a if b else ''

2
মনে রাখবেন যে print ''এখনও একটি নতুন লাইন প্রিন্ট করবে, যা নোয়েলকেডের উত্তরে এড়ানো হবে।
yoniLavi

8

তুমি ব্যবহার করতে পার:

print (1==2 and "only if condition true" or "in case condition is false")

ঠিক তেমনি আপনি চলতেও পারেন:

print 1==2 and "aa" or ((2==3) and "bb" or "cc")

বাস্তব বিশ্বের উদাহরণ:

>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
1 item found.
>>> count = 2
>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
2 items found.

7

স্ট্রিং ফর্ম্যাটিংয়ের মাধ্যমে এটি করা যেতে পারে । এটি% স্বরলিখনের পাশাপাশি। ফর্ম্যাট () এবং এফ-স্ট্রিংগুলির সাথে কাজ করে (নতুন 3.6 থেকে)

print '%s' % (a if b else "")

অথবা

print '{}'.format(a if b else "")

অথবা

print(f'{a if b else ""}')

ফর্ম্যাটিংয়ের সাথে এর কোনও যোগসূত্র নেই; আপনি ঠিক করতে পারে print a if b else ""। কোনটি নোয়েলকডের উত্তরটি ঠিক তাই করে।
মেলপোমেন

@ মেলপোমেন তবে মুদ্রণ "" বিজ্ঞাপনগুলি একটি নতুন লাইন, যা পাইথন 2 এর print "",জন্য (কোলন) ব্যবহার print("", end="")এবং পাইথন 3 ব্যবহার করে এড়ানো যায়।
m3nda

5

আপনার ক্ষেত্রে এটি কাজ করে:

a = b or 0

সম্পাদনা: এটি কীভাবে কাজ করে?

প্রশ্নে

b = True

তাই মূল্যায়ন

b or 0

ফলাফল স্বরূপ

True

যা নির্ধারিত হয় a

যদি b == False?, b or 0দ্বিতীয় অপারেন্ডকে 0নির্ধারণ করা হবে যা নির্ধারিত হবে a


3
এই অভিব্যক্তির কদর্যতা এবং ত্রুটিযুক্ত কারণ হ'ল প্রথম স্থানে শর্তাধীন আমাদের প্রকাশ রয়েছে।
জানু হুডেক

5

এটা চেষ্টা কর . এটি আপনাকে সাহায্য করতে পারে

a=100
b=True

if b:
   print a

4

আপনি কেবল অতি-জটিল।

if b:
   print a

1
অবশ্যই এটি সবচেয়ে সহজ বিকল্প। আমার মনে হয় সেই সময়ে (আগস্ট ২০১২) আমি এরকম কিছু করতে চেয়েছিলাম:if DEBUG: print something
রিকি রবিনসন

সদৃশ উত্তর? এটি স্কারিয়াআরুন দ্বারা দেখুন এবং একটি মন্তব্যও।
সানচো.এস পুনরায় ইনস্টল করুন মনিকাসেলিও

2

আপনার সর্বদা elseএকটি ইনলাইনে একটি দরকার যদি:

a = 1 if b else 0

তবে এটি করার একটি সহজ উপায় a = int(b)


3
-1: আরও সহজ। এবং সম্পূর্ণ অপঠনযোগ্য। এবং প্রশ্নকর্তা যাই হোক না কেন কি চান।
জানু হুডেক

ITYM a = int(bool(b))
glglgl

1

আচ্ছা আপনি কেবল লেখেন না কেন:

if b:
    print a
else:
    print 'b is false'

1

হুঁ, আপনি এটি একটি তালিকা বোঝার সাথে করতে পারেন । এটি কেবল তখনই বোধগম্য হবে যদি আপনার যদি আসল পরিসর থাকে তবে .. তবে এটি কাজটি করে:

print([a for i in range(0,1) if b])

বা কেবল এই দুটি ভেরিয়েবল ব্যবহার:

print([a for a in range(a,a+1) if b])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.