স্ট্রিংটি পাইথনের সাথে কোনও সংখ্যার সাথে শুরু হয় কিনা তা কীভাবে বলা যায়?


91

আমার একটি স্ট্রিং রয়েছে যা একটি সংখ্যার সাথে শুরু হয় (০-৯ থেকে) আমি জানি আমি "বা" পরীক্ষার ক্ষেত্রে দশটি পরীক্ষার কেস স্টার্টউইথ () ব্যবহার করে করতে পারি তবে সম্ভবত খুব সুন্দর সমাধান রয়েছে

লেখার পরিবর্তে তাই

if (string.startswith('0') || string.startswith('2') ||
    string.startswith('3') || string.startswith('4') ||
    string.startswith('5') || string.startswith('6') ||
    string.startswith('7') || string.startswith('8') ||
    string.startswith('9')):
    #do something

কোন চালক / আরও দক্ষ উপায় আছে?


যদি প্রশ্নটি জিজ্ঞাসা করা হয়: "এটি কি খুব পুনরাবৃত্তিযোগ্য?", সম্ভাবনাগুলি - উচ্চ স্তরের ভাষায় - উত্তরটি "কেন, হ্যাঁ, এটি নিশ্চিত তা" is অলস হও!

42
আপনি মিস string.startswith('1')
এম এ কে

4
@ ইলিউশনবাদী যেমন লেখা আছে, আপনার প্রশ্নের অর্থ হ'ল আপনি কেবল একটি অঙ্ক দিয়ে শুরু হওয়া স্ট্রিংগুলি সনাক্ত করতে চান। যদি তাই হয়, নিম্নলিখিত বেশী মধ্যে শুধুমাত্র সঠিক উত্তর ব্যবহার বেশী হয় না s[0]বা s[:1]কিন্তু জন Machin সমাধান: if s.startswith(tuple('0123456789'))। অধিকন্তু, এই সমাধান যখন এটা যে ত্রুটি উত্থাপন গুলি একটি tuple অথবা তালিকার, যা মামলা একই ফলাফল উত্পাদন হিসাবে যদি এটি একটি স্ট্রিং ছিল মত একটি ক্রম। - আরেকটি সমাধান হ'ল একটি রেইজেক্স যার প্যাটার্নটি '\ d (? = \ D)' তবে এখানে রেজেক্সের ব্যবহার অতিমাত্রায় is
eequem

4
সবেমাত্র প্যাডেন্টিক হচ্ছে: stringস্ট্যান্ডার্ড লাইব্রেরির একটি মডিউল এবং সম্ভবত ভেরিয়েবলের নাম হিসাবে ব্যবহার করা উচিত নয়। docs.python.org/2/library/string.html
gak

উত্তর:


170

পাইথনের stringলাইব্রেরিতে isdigit()পদ্ধতি রয়েছে:

string[0].isdigit()

4
পাইথন 2 এর string মডিউলে কোনও পদ্ধতি নেই এবং isdigitএটি একটি পদ্ধতি strএবং unicodeঅবজেক্ট।
জন মাচিন

4
@ প্লেলস: -1 উপরের প্লাসের কারণে এটি ক্র্যাশ হয়ে থাকলে s == ""
জন মাচিন

4
আমার উত্তরটি দেখুন যা খালি স্ট্রিংয়ের জন্য বিরতি দেয় না:string[:1].isdigit()
পাস্কালভিকুটেন

24
>>> string = '1abc'
>>> string[0].isdigit()
True

আমি একটি অজগর লোক নই, সুতরাং সম্ভবত আপনি এই বিষয়ে আমাকে সহায়তা করতে পারেন: "" যেখানে এই ফাংশন বোমা দেবে, সেখানে নেই string[0]?
কর্সিকা

হ্যাঁ, এটা নিশ্চিত। আপনি 'স্ট্রিং বা' x ') ব্যবহার করতে পারেন [0] .আইডিজিট () এটি' 'বা
কোনওটির

30
আপনি চেষ্টা করতে পারেন string[:1].isdigit(), যা খালি স্ট্রিং সহ খুশিতে মোকাবেলা করবে।
সাইমন ক্যালান

4
কারণ এটি আমার উত্তর নয়; ম্যান এখনও সেই ক্ষেত্রে আরও ভাল যেখানে প্রোগ্রামার একটি ব্যতিক্রমকে খালি স্ট্রিংয়ের উপরে ফেলে দিতে চায় wishes
jcomeau_ictx

4
@jcomeau_ictx ঠিক ঠিক আছে। কখনও ডিফেন্সিয়ালি প্রোগ্রাম না। যদি স্ট্রিং অপ্রত্যাশিতভাবে ফাঁকা, যে উচিত আউট ত্রুটি এবং স্বয়ংক্রিয়ভাবে যাহাই হউক না কেন না নাড়াচাড়া করতে হবে। কিছু স্কুল চিন্তাভাবনা করে বলেছে যে আপনি সতর্কতার হিসাবে সমালোচিত নয় এমন ব্যতিক্রমগুলি গ্রেফতার করে পরিচালনা করতে এবং প্রোগ্রামটি চালিয়ে যাওয়া উচিত। বেশিরভাগ ব্যবহারের ক্ষেত্রে আমি এই মানসিকতার নই। আপনি যে ফাংশনগুলি এবং কোডটি লিখছেন তাতে সুনির্দিষ্টতা প্রান্তের ক্ষেত্রে হ্রাস করতে সহায়তা করে যেখানে আপনাকে আরও প্রায়ই ডিফেন্সিভ কোড করতে হবে।
jamescampbell

10

কখনও কখনও, আপনি regex ব্যবহার করতে পারেন

>>> import re
>>> re.search('^\s*[0-9]',"0abc")
<_sre.SRE_Match object at 0xb7722fa8>

ওভারকিল! আপনি যখন বল্টিনগুলিতে এটি করতে পারেন তখন কেন পুনরায় ব্যবহার করবেন
জাকব

4
@ জ্যাকববায়ার কমপক্ষে, এটি সম্পর্কে জানা ভাল! যদিও এই ক্ষেত্রে, হ্যাঁ, কিছু বিল্টইনগুলি একই কাজ করতে পারলে ওভারকিলকে পুনরায় প্রয়োগ করে।
jeromej

8

আপনার কোড কাজ করবে না; আপনার orপরিবর্তে প্রয়োজন ||

চেষ্টা করুন

'0' <= strg[:1] <= '9'

বা

strg[:1] in '0123456789'

বা, যদি আপনি সত্যিই পাগল হন startswith,

strg.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))

শুরুর সাথে যদি কেবল সমাধান (একটি টিপল) থাকে তবে আমি আপনাকে উত্সাহিত করেছি । কিন্তু সমাধান strg[:1]দুই অসুবিধা আছে: যদি তারা একটি ত্রুটি বাড়াতে না গুলি স্ট্রিং একটি তালিকা হতে ঘটতে পারে, এবং তারা যা উৎপাদন সত্য যদি স্ট্রিং বিভিন্ন সংখ্যার সঙ্গে শুরু হয়।
eequem

@eyquem তারা সত্য উত্পাদন করে যদি স্ট্রিংটি অতিরিক্ত অঙ্কগুলি দিয়ে শুরু হয় ? অন্যান্য উত্তরগুলি সেটির জন্য যাচাই করে না, কারণ এটির প্রয়োজনীয়তা ছিল না যে অন্যান্য অক্ষরগুলি সংখ্যাসূচক নয় check
রব গ্রান্ট

আমি পাগল হয়েছিstartswith এবং এটি আমার কোডটিতে এভাবে প্রয়োগ করেছি। ধন্যবাদ.
জামেস্ক্যাম্পেল

আরও একটি startswith সম্ভাবনা ...startswith(tuple(str(i) for i in range(10)))
জেরোম

4

এই কোডের টুকরো:

for s in ("fukushima", "123 is a number", ""):
    print s.ljust(20),  s[0].isdigit() if s else False

নিম্নলিখিত মুদ্রণ:

fukushima            False
123 is a number      True
                     False

4
এটা কুৎসিত। ব্যবহার করুন s[:1].isdigit()বাs and s[0].isdigit()
জন মাচিন

4
@ জন মচিন 'কুৎসিত' বলতে কী বোঝ? পাঠযোগ্য নয় ? আমি আপনার প্রস্তাবগুলি এখানে আরও পাঠযোগ্য find s and s[0].isdigit()আমার মতে এমনকি কম পাঠযোগ্য। ব্যক্তিগতভাবে, আমি এই কনস্ট্রাক্টটি পছন্দ করি ... যদি ... অন্যথায় ... আপনার মন্তব্যটি বিবেচনা করে, আমি কেবল এটির মতো উন্নতি করব:s[0].isdigit() if s!="" else False
আইকাম

3

অবাক করা বিষয় যে এত দিন পরে এখনও সেরা উত্তর অনুপস্থিত।

অন্যান্য উত্তরগুলির নেতিবাচক দিকটি [0]প্রথম অক্ষরটি নির্বাচন করতে ব্যবহার করছে, তবে যেমনটি উল্লেখ করা হয়েছে, খালি স্ট্রিংটিতে এটি বিরতি দেয়।

নিম্নলিখিত সমস্যাগুলি ব্যবহার করে এই সমস্যাটি সমাধান করে, এবং আমার মতে, আমাদের কাছে বিকল্পগুলির মধ্যে সবচেয়ে সুন্দর এবং সর্বাধিক পঠনযোগ্য সিনট্যাক্স দেয়। এটি রেগেক্সের সাথে আমদানি / বিরক্তও করে না):

>>> string = '1abc'
>>> string[:1].isdigit()
True

>>> string = ''
>>> string[:1].isdigit()
False

2

আপনি এটি ব্যবহার করতে পারেন try...except:

try:
    int(string[0])
    # do your stuff
except:
    pass # or do your stuff

1

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

ব্যবহার অর্ড () এবংবিশেষ a <= b <= cফর্ম:

//starts_with_digit = ord('0') <= ord(mystring[0]) <= ord('9')
//I was thinking too much in C. Strings are perfectly comparable.
starts_with_digit = '0' <= mystring[0] <= '9'

(এটি a <= b <= c, যেমন a < b < c, একটি বিশেষ পাইথন নির্মাণ এবং এটি এক ধরণের ঝরঝরে: তুলনা করুন 1 < 2 < 3(সত্য) এবং 1 < 3 < 2(মিথ্যা) এবং (1 < 3) < 2(সত্য) এটি বেশিরভাগ অন্যান্য ভাষায় এটি কাজ করে না))

একটি নিয়মিত অভিব্যক্তি ব্যবহার :

import re
//starts_with_digit = re.match(r"^\d", mystring) is not None
//re.match is already anchored
starts_with_digit = re.match(r"\d", mystring) is not None

4
(1) হারান ord()(2) রেজিজেসে হারান ^
জন মাচিন

0

আপনি নিয়মিত ভাব প্রকাশ করতে পারেন ।

আপনি ব্যবহার করে অঙ্কগুলি সনাক্ত করতে পারেন:

if(re.search([0-9], yourstring[:1])):
#do something

[0-9] সমান যে কোনও অঙ্কের সাথে মেলে এবং আপনার প্রথম [: 1] আপনার স্ট্রিংয়ের প্রথম অক্ষরের সাথে মেলে



-5

এটা চেষ্টা কর:

if string[0] in range(10):

এটি মোটেই কাজ করে না। range(10)ইন্টিজার একটি তালিকা উত্পাদন করে যখন string[0]দৈর্ঘ্য 1. একটি স্ট্রিং
Petri Lehtinen

4
যে কাজ করে না; প্রকারের সাথে মেলে না। তবে: if string[0] in map(str,range(10))কাজ করে
ফাইন্যফো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.