স্ট্রিংয়ে কেবল সংখ্যা রয়েছে কিনা তা আপনি কীভাবে অজগরটিকে পরীক্ষা করবেন?


129

স্ট্রিংয়ে কেবল সংখ্যা রয়েছে কিনা তা আপনি কীভাবে পরীক্ষা করতে পারেন?

আমি এখানে যান। আমি এটি সম্পাদন করার সহজ উপায়টি দেখতে চাই।

import string

def main():
    isbn = input("Enter your 10 digit ISBN number: ")
    if len(isbn) == 10 and string.digits == True:
        print ("Works")
    else:
        print("Error, 10 digit number was not inputted and/or letters were inputted.")
        main()

if __name__ == "__main__":
    main()
    input("Press enter to exit: ")

1
সর্বদা মূল্যায়ন করা Falseথেকে আপনার কোড সর্বদা ফিরে আসবে । string.digits == TrueFalse
সুকৃত কালরা

1
নীচের উত্তরগুলি ব্যতীত, একটি "নন পাইথোনিক" উপায় যদি হয় [x এর জন্য x জন্য x যদি '0123456789' তে x]]; আপনি যদি ব্যবহারকারী ISBN মধ্যে বিভাজক করা প্রসারিত করতে পারেন - এতে তালিকা তাদের যোগ
কক্সবাজার

1
আপনি যদি আইএসবিএন নম্বরগুলি পড়ছেন তবে আমি রেজেক্স ব্যবহার করার পরামর্শ দিচ্ছি। আইএসবিএনগুলি 10 বা 13 ডিজিট দীর্ঘ হতে পারে এবং এর অতিরিক্ত বিধিনিষেধ রয়েছে। তাদের সাথে মিলে যাওয়ার জন্য রেজেক্স কমান্ডগুলির একটি ভাল তালিকা রয়েছে: regexlib.com/… এর মধ্যে অনেকগুলি আপনাকে আইএসবিএন হাইফেনগুলি সঠিকভাবে পড়তে দেবে, যা লোকেদের অনুলিপি এবং আটকানো সহজ করে তুলবে।
কেভিন

1
@ কেভিন এবং যখন ১৩-সংখ্যার আইএসবিএন প্রকৃতপক্ষে কেবলমাত্র সংখ্যা, 10-সংখ্যার আইএসবিএনগুলির চূড়ান্ত অক্ষর হিসাবে এক্স থাকতে পারে।
ট্রিগ

উত্তর:


248

আপনি isdigitআপনার strঅবজেক্টে পদ্ধতিটি ব্যবহার করতে চাইবেন :

if len(isbn) == 10 and isbn.isdigit():

isdigitডকুমেন্টেশন থেকে :

str.isdigit ()

যদি স্ট্রিংয়ের সমস্ত অক্ষর অঙ্ক হয় এবং কমপক্ষে একটি অক্ষর থাকে তবে অন্যথায় মিথ্যা সত্য Return অঙ্কগুলিতে দশমিক অক্ষর এবং ডিজিটগুলি অন্তর্ভুক্ত থাকে যার জন্য বিশেষ হ্যান্ডলিংয়ের দরকার হয়, যেমন সামঞ্জস্যতা সুপারস্ক্রিপ্ট ডিজিট। এটি এমন অঙ্কগুলি কভার করে যা খারাস্থি সংখ্যাগুলির মতো বেস 10 তে সংখ্যা তৈরি করতে ব্যবহার করা যায় না। সাধারণত, একটি ডিজিট এমন একটি অক্ষর যা বৈশিষ্ট্যযুক্ত মান সংখ্যাগত_ টাইপ = সংখ্যা বা সংখ্যাসূচক টাইপ = দশমিক।


16
এটি লক্ষণীয় যে এটি আসলে আপনি যে চেকটি চান তা নাও হতে পারে। এটি পরীক্ষা করে যে সমস্ত অক্ষর ডিজিটের মতো , স্ট্রিংটি পার্সেবল সংখ্যা নয়। উদাহরণস্বরূপ, স্ট্রিং "⁰" (এটি একটি ইউনিকোড সুপারস্ক্রিপ্ট শূন্য), পাস হয় তবে পাস হয়ে গেলে isdigitএকটি উত্থাপন ValueErrorকরে int()
ডানপালমার

42

ব্যবহার str.isdigit:

>>> "12345".isdigit()
True
>>> "12345a".isdigit()
False
>>>

আমার ধারণা ছিল না যে পদ্ধতিটি বিদ্যমান ছিল। আমি সবসময় করেছি try: assert str(int(foo)) == foo; except (AssertionError,ValueError): #handleএবং এটি পাপ হিসাবে কুৎসিত মনে হয়েছিল। ধন্যবাদ!
অ্যাডাম স্মিথ


3

আপনি রেজেক্সও ব্যবহার করতে পারেন,

import re

যেমন: -1) শব্দ = "3487954"

re.match('^[0-9]*$',word)

যেমন: -2) শব্দ = "3487.954"

re.match('^[0-9\.]*$',word)

উদাহরণস্বরূপ: -3) শব্দ = "3487.954 328"

re.match('^[0-9\.\ ]*$',word)

যেমন আপনি সমস্ত 3 উদাহরণস্বরূপ দেখতে পাচ্ছেন তার অর্থ আপনার স্ট্রিংটিতে কেবল কোনও নেই। সুতরাং আপনি তাদের সাথে প্রদত্ত সম্পর্কিত সমাধানগুলি অনুসরণ করতে পারেন।


1
re.match('^[0-9\.]*$',word)ভাসা জন্য ব্যর্থ। if(bool(re.search(r'\d', word)))যদিও ভাল কাজ করে।

2

এর সম্পর্কে কি ভাসা সংখ্যার , নেগেটিভ নম্বর, ইত্যাদি .. সকল উদাহরণ সামনে ভুল হবে।

এখন অবধি আমি এরকম কিছু পেয়েছি তবে আমি মনে করি এটি আরও ভাল হতে পারে:

'95.95'.replace('.','',1).isdigit()

যদি সেখানে এক বা না থাকে তবেই সত্যটি ফিরে আসবে '' অঙ্কের স্ট্রিং এ।

'9.5.9.5'.replace('.','',1).isdigit()

মিথ্যা ফিরে আসবে


আগের সমস্ত উদাহরণ ভুল হবে। প্রশ্নটি অন্য কিছু নিয়ে কারণ এটি কি নয়?
এএমসি

2

এই মন্তব্যে নির্দেশিত হিসাবে আপনি স্ট্রিংয়ে কেবল সংখ্যা রয়েছে কিনা তা আপনি অজগরটিতে কীভাবে চেক করবেন? isdigit()পদ্ধতি, কারণ এটি কিছু অঙ্ক মত অক্ষরের জন্য সত্য 'ফেরত পাঠায়, এই ব্যবহারের ক্ষেত্রে জন্য সম্পূর্ণ সঠিক নয়:

>>> "\u2070".isdigit() # unicode escaped 'superscript zero' 
True

যদি এড়ানো দরকার হয়, তবে স্ট্রিংয়ের সমস্ত অক্ষর "0" এবং "9" এর মধ্যে একটি সংখ্যা হলে নিম্নলিখিত সাধারণ ফাংশনটি পরীক্ষা করে:

import string

def contains_only_digits(s):
    # True for "", "0", "123"
    # False for "1.2", "1,2", "-1", "a", "a1"
    for ch in s:
        if not ch in string.digits:
            return False
    return True

প্রশ্ন থেকে উদাহরণে ব্যবহৃত:

if len(isbn) == 10 and contains_only_digits(isbn):
    print ("Works")

এটি একটি ছোট জিনিস, তবে ফাংশনটি সহজ করা যেতে পারে all(ch in string.digits for ch in s)
এএমসি

1

আপনি এখানে চেষ্টা ব্লক ব্যবহার করতে পারেন:

s="1234"
try:
    num=int(s)
    print "S contains only digits"
except:
    print "S doesn't contain digits ONLY"

এটি কেবল পূর্ণসংখ্যার সাথে কাজ করে, ভাসমান সংখ্যার সাথে সর্বদা ব্যর্থ হবে যেহেতু এটিতে একটি (।) রয়েছে
এডডউইন পাজ

2
এছাড়াও, আপনি কোন ব্যতিক্রমটি পরিচালনা করতে চান তা নির্দিষ্ট না করা সর্বদা একটি খারাপ অভ্যাস। এই ক্ষেত্রে এটি হওয়া উচিত:except ValueError:
J0ANMM

এটি যদিও সঠিক নয়, না? int("1_000")উদাহরণস্বরূপ একটি ত্রুটি বাড়ে না।
এএমসি

1

প্রতিবারের মতো আমি চেকটির সাথে একটি সমস্যার মুখোমুখি হলাম কারণ স্ট কখনও কখনও কোনওটিই হতে পারে না, এবং যদি আরআরটি কোনওটিই নাও হয় তবে কেবল স্ট্রিংসডিজিট () ব্যবহার করা যথেষ্ট নয় কারণ আপনি একটি ত্রুটি পেয়ে যাবেন

অ্যাট্রিবিউটআরার: 'ননটাইপ' অবজেক্টের 'ইসডিজিট' এর কোনও অ্যাট্রিবিউট নেই

এবং তারপরে আপনাকে প্রথমে স্ট্রাইটটি বৈধ করে নেওয়ার দরকার নেই এবং না। মাল্টি-ইফ শাখা এড়ানোর জন্য এটি করার একটি সুস্পষ্ট উপায় হ'ল:

if str and str.isdigit():

আশা করি এটি আমার মতো একই সমস্যা লোকদের জন্য সহায়তা করে।


1

এখানে দুটি পদ্ধতি রয়েছে যা আমি স্ট্রিংয়ের সমস্ত সংখ্যার নেই কিনা তা যাচাই করতে ভাবতে পারি

পদ্ধতি 1 (পাইথনে অন্তর্নির্মিত ইসডিজিট () ফাংশন ব্যবহার করে): -

>>>st = '12345'
>>>st.isdigit()
True
>>>st = '1abcd'
>>>st.isdigit()
False

পদ্ধতি 2 (স্ট্রিংয়ের উপরে ব্যতিক্রম হ্যান্ডলিং সম্পাদনা): -

st="1abcd"
try:
    number=int(st)
    print("String has all digits in it")
except:
    print("String does not have all digits in it")

উপরের কোডটির আউটপুট হবে:

String does not have all digits in it

এর মতো খালি ব্যবহার করা খারাপ অভ্যাস, উদাহরণস্বরূপ দেখুন খালি 'ব্যতীত' ব্যবহারে কী দোষ?
এএমসি

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