অজগর কেবল প্রথম অক্ষরকে মূলধন করে


178

আমি সচেতন। ক্যাপিটালাইজ () একটি স্ট্রিংয়ের প্রথম অক্ষরকে মূলধন করে তবে প্রথম চরিত্রটি যদি পূর্ণসংখ্যা হয়?

এই

1bob
5sandy

এই

1Bob
5Sandy

উত্তর:


233

প্রথম অক্ষরটি যদি পূর্ণসংখ্যা হয় তবে এটি প্রথম অক্ষরকে বড় করে দেখায় না।

>>> '2s'.capitalize()
'2s'

আপনি যদি কার্যকারিতা চান, অঙ্কগুলি সরিয়ে দিন, আপনি '2'.isdigit()প্রতিটি অক্ষর পরীক্ষা করতে ব্যবহার করতে পারেন ।

>>> s = '123sa'
>>> for i, c in enumerate(s):
...     if not c.isdigit():
...         break
... 
>>> s[:i] + s[i:].capitalize()
'123Sa'

5
এবং এটি এই উত্তরটি কি করে, বেশ কিছু
njzk2

16
আমি সি.সি.এস.লফ () এর পরিবর্তে সি সিডজিট () না থাকলে ব্যবহার করব
njzk2

1
@ জান-ফিলিপ জিহরস্কে এটি পাঠকের জন্য অনুশীলন। সেক্ষেত্রে আপনি দেখতে পাচ্ছেন, গুলি কখনই শূন্য থাকে না, এটি সর্বদা '123 এসএ' থাকে: ডি
আলী আফশার

2
@ জান-ফিলিপ জিহরস্কে: যে ক্ষেত্রে, next((i for i,e in enumerate(test) if not e.isdigit()), '0')খালি স্ট্রিংয়ের ক্ষেত্রে এটি সমাধান করে
njzk2

5
এই উত্তরটি সঠিক নয়। . capitalizeঅন্যান্য অক্ষরকেও নিম্নে রূপান্তরিত করবে। সরকারী দস্তাবেজগুলি থেকে: "এস এর একটি শিরোনামযুক্ত সংস্করণটি ফেরান, অর্থাত্ শিরোনামের অক্ষরের সাথে শব্দের সূচনা, বাকী সমস্ত
কেসড

246

কেবল অন্য কারও এটি উল্লেখ না করার কারণে:

>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'

যাইহোক, এই দিতে হবে

>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'

যেমন এটি কেবল প্রথম বর্ণমালা অক্ষরকে বড় করে তোলে না। তবে তারপরেও .capitalize()একই সমস্যা আছে, কমপক্ষে 'joe Bob'.capitalize() == 'Joe bob'এটিতে তাই মেহ।


38

এটি @ আননের উত্তরের অনুরূপ যে এটি পুনরায় মডিউলটির প্রয়োজন ছাড়াই বাকী স্ট্রিংয়ের ক্ষেত্রে অক্ষত রাখে।

def sliceindex(x):
    i = 0
    for c in x:
        if c.isalpha():
            i = i + 1
            return i
        i = i + 1

def upperfirst(x):
    i = sliceindex(x)
    return x[:i].upper() + x[i:]

x = '0thisIsCamelCase'

y = upperfirst(x)

print(y)
# 0ThisIsCamelCase

@ জ্যান নির্দেশিত হিসাবে, ফাংশনটি আরও ত্রুটি পরীক্ষা করতে ব্যবহার করতে পারে (যেমন এক্সটি একটি ক্রম যাচাই করা - তবে আমি কৌশলটি বর্ণনা করার জন্য প্রান্তের মামলাগুলি বাদ দিচ্ছি)

@ নরম্যানিয়াস মন্তব্যে আপডেট হয়েছে (ধন্যবাদ!)

আমি জিওস্টোনমার্টেনকে ধন্যবাদ জানাতে চাই যে আমি প্রশ্নের উত্তর দিলাম না! - এটি ঠিক করা


2
খুব দরকারী, কিন্তু একটি len(x) == 0শাখা প্রয়োজন।
Xan

অজগর 2.5 যেহেতু খালি return x[0].upper() + x[1:] if len(x) > 0 else x
কেসটি

খুব দরকারী উত্তর, কারণ capitalize& titleপ্রথমে পুরো স্ট্রিংটি ছোট করে এবং তারপরে কেবল প্রথম অক্ষর বড় হয়।
জোনাস লিবিব্রেকট

5
উপকারী। কেবল ব্যবহার করুন a[:1].upper() + a[1:], এটি len(X)==0কর্নারের ক্ষেত্রে যত্ন নেবে ।
নরম্যানিয়াস

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

13

এখানে একটি ওয়ান-লাইনার রয়েছে যা প্রথম অক্ষরকে বড় হাতের অক্ষরে ফেলবে এবং পরবর্তী সমস্ত অক্ষরের ক্ষেত্রে ছেড়ে দেবে:

import re

key = 'wordsWithOtherUppercaseLetters'
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1)
print key

এর ফলে হবে WordsWithOtherUppercaseLetters


4

চেন হউউউ উত্তর হিসাবে এখানে দেখেছে, স্ট্রিং প্যাকেজ ব্যবহার করা সম্ভব:

import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"

1

আমি এটি নিয়ে এসেছি:

import re

regex = re.compile("[A-Za-z]") # find a alpha
str = "1st str"
s = regex.search(str).group() # find the first alpha
str = str.replace(s, s.upper(), 1) # replace only 1 instance
print str

1

আপনি preceded by a digitরেজেক্স ব্যবহার করে প্রতিটি শব্দের প্রথম অক্ষর ( ) প্রতিস্থাপন করতে পারেন :

re.sub(r'(\d\w)', lambda w: w.group().upper(), '1bob 5sandy')

output:
 1Bob 5Sandy

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