अध्याय 06

टेक्स्ट के साथ काम — इंडेक्सिंग, स्लाइसिंग और f-strings

टेक्स्ट से टुकड़े निकालना, उसे साफ़ करना, बदलना और f-strings से पठनीय संदेश बनाना — साथ ही यह नियम कि टेक्स्ट को सीधे उसी स्थान पर नहीं बदला जा सकता।

35 मिनटPython 3.12
  1. 1समस्या
  2. 2समझें
  3. 3उदाहरण
  4. 4अनुमान
  5. 5स्वयं करें
  6. 6चुनौती

वह समस्या जिसे हम हल कर रहे हैं

एक फ़ॉर्म से नाम प्राप्त हुआ: " Rafi Ahmed "। दोनों सिरों पर अतिरिक्त स्पेस हैं, और आपको केवल पहला नाम और एक स्वागत संदेश चाहिए — "Welcome, Rafi!"।

टेक्स्ट को साफ़ करना, उसके टुकड़े अलग करना और उनसे नई चीज़ें बनाना प्रोग्रामिंग के सबसे आम कार्यों में से एक है। यूज़रनेम, ईमेल पते, आईडी, फ़ाइल नाम, एपीआई से मिलने वाला डेटा — सब कुछ टेक्स्ट ही है।

और आज एक बहुत महत्वपूर्ण बात स्पष्ट होगी: पायथन में, स्ट्रिंग (टेक्स्ट) को सीधे बदला नहीं जा सकता (Strings are immutable)। name.upper() लिखने से मूल name वेरिएबल अपरकेस नहीं बन जाता। ऐसा क्यों है और इसके बदले क्या करना चाहिए, यह इस मिशन का सबसे मूल्यवान हिस्सा है।

इस मिशन के अंत तक आप सीखेंगे

  • इंडेक्स द्वारा आगे और पीछे से किसी भी वर्ण (character) तक पहुँचना
  • स्लाइसिंग (slicing) के साथ टेक्स्ट का एक हिस्सा काटना
  • strip, upper, lower, replace और split के साथ टेक्स्ट साफ़ करना और बदलना
  • यह समझना कि मेथड के परिणाम को किसी वेरिएबल में सुरक्षित रखना क्यों ज़रूरी है
  • f-strings के साथ साफ़ और पठनीय संदेश बनाना

पूर्वापेक्षाएँ: वेरिएबल और प्रकार.


उद्धरण चिह्न (Quotes)

पायथन में 'Rafi' और "Rafi" एक ही चीज़ हैं:

python
print("It's working")
print('She said "yes"')
text
It's working
She said "yes"

तीन उद्धरण चिह्न (""") कई पंक्तियों में फैले टेक्स्ट को संभालते हैं:

python
note = """Dear customer,
Your order is confirmed.
Thank you."""
print(note)
text
Dear customer,
Your order is confirmed.
Thank you.

एक संपूर्ण उदाहरण

account.py:

python
# Turn a raw form entry into a clean display name and a login id
raw_input_name = "   Rafi Ahmed   "
domain = "example.com"

clean = raw_input_name.strip()
parts = clean.split(" ")
first_name = parts[0]
last_name = parts[-1]

login_id = f"{first_name.lower()}.{last_name.lower()}"
email = f"{login_id}@{domain}"
initials = f"{first_name[0]}{last_name[0]}"

print(f"Display name : {clean}")
print(f"Login id     : {login_id}")
print(f"Email        : {email}")
print(f"Initials     : {initials}")
print(f"Name length  : {len(clean)} characters")
text
Display name : Rafi Ahmed
Login id     : rafi.ahmed
Email        : rafi.ahmed@example.com
Initials     : RA
Name length  : 10 characters

parts[-1] क्यों? क्योंकि नाम में दो या तीन शब्द हो सकते हैं। पीछे से अंतिम भाग लेना हमेशा काम करता है।


सामान्य गलतियाँ और समाधान

IndexError: string index out of range माँगा गया इंडेक्स टेक्स्ट की लंबाई से अधिक है। यदि len(word) 6 है, तो मान्य इंडेक्स 0 से 5 तक हैं।

मेथड कॉल किया लेकिन टेक्स्ट में कोई बदलाव नहीं हुआ स्ट्रिंग अपरिवर्तनीय (immutable) हैं। name.strip() मूल name को नहीं बदलता; आपको इसे सहेजना होगा: name = name.strip().

strip() बीच के स्पेस नहीं हटा रहा है strip() केवल दोनों सिरों के स्पेस हटाता है। बीच के स्पेस हटाने के लिए replace(" ", "") का उपयोग करें।