Η Python καθορίζει και ελέγχει αν μια συμβολοσειρά είναι αριθμητική ή αλφαβητική

Επιχείρηση

Η Python παρέχει διάφορες μεθόδους συμβολοσειρών για να προσδιορίζει και να ελέγχει αν ένας τύπος συμβολοσειράς είναι αριθμητικός ή αλφαβητικός.

Κάθε μέθοδος εξηγείται με παράδειγμα κώδικα.

  • Προσδιορίζει αν μια συμβολοσειρά είναι δεκαδικό ψηφίο:str.isdecimal()
  • Προσδιορισμός αν μια συμβολοσειρά είναι αριθμός:str.isdigit()
  • Προσδιορίζει αν μια συμβολοσειρά είναι χαρακτήρας που αντιπροσωπεύει αριθμό:str.isnumeric()
  • Καθορίζει αν η συμβολοσειρά είναι αλφαβητική:str.isalpha()
  • Καθορισμός αν η συμβολοσειρά είναι αλφαριθμητική:str.isalnum()
  • Καθορίζει αν οι συμβολοσειρές είναι χαρακτήρες ASCII:str.isascii()
  • Κρίση της κενής συμβολοσειράς
  • Προσδιορίστε αν οι συμβολοσειρές μπορούν να μετατραπούν σε αριθμούς

Για άλλες μεθόδους εκτός της isascii(), ένα αλφαριθμητικό που περιέχει ένα κενό αλφαριθμητικό, τα ακόλουθα σύμβολα κ.λπ. είναι ψευδές.

  • ,
  • .
  • -

-1,23, κ.λπ., ως αριθμητική τιμή εξηγείται στο τέλος αυτής της ενότητας.

Οι κανονικές εκφράσεις μπορούν να χρησιμοποιηθούν για τον πιο ευέλικτο προσδιορισμό των τύπων χαρακτήρων και για την εξαγωγή των σχετικών τύπων χαρακτήρων.

Ανατρέξτε στο ακόλουθο άρθρο για περισσότερες πληροφορίες σχετικά με τον τρόπο προσδιορισμού των εξής

  • Πώς να μετατρέψετε μια αριθμητική συμβολοσειρά (str) σε έναν αριθμό (int, float)
  • Πώς να προσδιορίζετε την κεφαλαία και την πεζή γραμματοσειρά

Προσδιορίζει αν μια συμβολοσειρά είναι δεκαδικό ψηφίο: str.isdecimal()

Στην isdecimal(), είναι αληθής αν όλοι οι χαρακτήρες είναι δεκαδικά ψηφία, δηλαδή χαρακτήρες της γενικής κατηγορίας Nd του Unicode. Είναι επίσης αληθές για αραβικούς αριθμούς πλήρους πλάτους, κ.λπ.

s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

Εάν περιέχει ένα σύμβολο, όπως ένα μείον ή μια τελεία, είναι ψευδής. Για παράδειγμα, αν θέλετε να προσδιορίσετε ότι μια συμβολοσειρά όπως το '-1,23' είναι μια αριθμητική τιμή, μπορείτε να χρησιμοποιήσετε το χειρισμό εξαιρέσεων. Αυτό εξηγείται στο τέλος αυτής της ενότητας.

s = '-1.23'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False

Προσδιορισμός αν μια συμβολοσειρά είναι αριθμός: str.isdigit()

Στην isdigit(), εκτός από τους αριθμούς που είναι αληθείς στην isdecimal(), αληθείς είναι και οι αριθμοί των οποίων η τιμή της ιδιότητας Unicode Numeric_Type είναι Digit ή Decimal.

Για παράδειγμα, ένας υπερθετικός αριθμός που αντιπροσωπεύει ένα τετράγωνο είναι ψευδής στην isdecimal() αλλά αληθής στην isdigit().

  • υπερθετικός αριθμός που αντιπροσωπεύει το τετράγωνο
    • ²
    • '\u00B2}'
s = '10\u00B2'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True

Προσδιορίζει αν μια συμβολοσειρά είναι χαρακτήρας που αντιπροσωπεύει αριθμό: str.isnumeric()

Στην isnumeric(), εκτός από τους αριθμούς που είναι αληθείς στην isdigit(), αληθείς είναι και οι αριθμοί των οποίων η τιμή της ιδιότητας Unicode Numeric_Type είναι Numeric.

Τα κλάσματα, οι λατινικοί αριθμοί και οι κινεζικοί αριθμοί είναι επίσης αληθή.

s = '\u00BD'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '\u2166'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '一二三四五六七八九〇'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '壱億参阡萬'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 壱億参阡萬
# isdecimal: False
# isdigit: False
# isnumeric: True

Καθορίζει αν η συμβολοσειρά είναι αλφαβητική: str.isalpha()

Στην isalpha(), μια ιδιότητα γενικής κατηγορίας Unicode με ένα από τα ακόλουθα είναι αληθής.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Το αλφάβητο, οι κινεζικοί χαρακτήρες κ.λπ. θα είναι αληθινοί.

s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True

s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True

Οι αραβικοί αριθμοί είναι ψευδείς, αλλά οι κινεζικοί αριθμοί είναι αληθινοί επειδή είναι επίσης κινεζικοί χαρακτήρες- ωστόσο, τα μηδενικά στους κινεζικούς αριθμούς είναι ψευδή.

s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False

s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False

s = '一二三四五六七八九'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 一二三四五六七八九
# isalpha: True

s = '壱億参阡萬'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 壱億参阡萬
# isalpha: True

s = '〇'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 〇
# isalpha: False

Οι λατινικοί αριθμοί είναι ψευδείς.

s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False

Καθορισμός αν η συμβολοσειρά είναι αλφαριθμητική: str.isalnum()

Στην isalnum(), είναι αληθής εάν κάθε χαρακτήρας είναι αληθής σε οποιαδήποτε από τις ακόλουθες μεθόδους που αναφέρονται μέχρι στιγμής.

  • isdecimal()
  • isdigit()
  • isnumeric()
  • isalpha()

Κάθε χαρακτήρας αξιολογείται ξεχωριστά, οπότε μια συμβολοσειρά που περιέχει γράμματα και αριθμούς θα είναι αληθής στην isalnum() ακόμη και αν είναι ψευδής σε όλες τις άλλες μεθόδους.

s = 'abc123'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False

Καθορίζει αν οι συμβολοσειρές είναι χαρακτήρες ASCII: str.isascii()

Η Python 3.7 πρόσθεσε την isascii(). Επιστρέφει true αν όλοι οι χαρακτήρες στο αλφαριθμητικό είναι χαρακτήρες ASCII.

Εκτός από τους αριθμούς και τα γράμματα, ισχύουν επίσης σύμβολα όπως το + και το -.

s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False

Οι μη ASCII hiragana και άλλοι χαρακτήρες είναι ψευδείς.

s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True

Όπως θα δούμε στη συνέχεια, σε αντίθεση με τις άλλες μεθόδους, η isascii() επιστρέφει true ακόμα και για ένα κενό αλφαριθμητικό.

Κρίση της κενής συμβολοσειράς

Μια κενή συμβολοσειρά είναι αληθής για την isascii() και ψευδής για τις άλλες μεθόδους.

s = ''
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = 
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

Χρησιμοποιήστε την bool() για να προσδιορίσετε αν είναι κενή συμβολοσειρά. Η τιμή επιστροφής είναι false για ένα κενό αλφαριθμητικό και true διαφορετικά.

print(bool(''))
# False

print(bool('abc123'))
# True

Προσδιορίστε αν οι συμβολοσειρές μπορούν να μετατραπούν σε αριθμούς

Οι συμβολοσειρές αρνητικών ή κλασματικών τιμών περιέχουν τελείες ή σύμβολα μείον. Επομένως, το αποτέλεσμα είναι ψευδές για όλες τις μεθόδους εκτός από την isascii().

Αν και αληθής για την isascii(), δεν είναι κατάλληλη για τον προσδιορισμό του κατά πόσον μια συμβολοσειρά μπορεί να μετατραπεί σε αριθμητική τιμή, καθώς είναι αληθής ακόμη και αν περιέχει άλλα σύμβολα ή αλφαβητικούς χαρακτήρες.

s = '-1.23'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

Οι συμβολοσειρές μπορούν να μετατραπούν σε αριθμούς κινητής υποδιαστολής με την float(). Σφάλμα για συμβολοσειρές που δεν μπορούν να μετατραπούν.

print(float('-1.23'))
# -1.23

print(type(float('-1.23')))
# <class 'float'>

# print(float('abc'))
# ValueError: could not convert string to float: 'abc'

Με χειρισμό εξαιρέσεων, μπορεί να οριστεί μια συνάρτηση που επιστρέφει true όταν μια συμβολοσειρά μπορεί να μετατραπεί με την float().

def is_num(s):
    try:
        float(s)
    except ValueError:
        return False
    else:
        return True

print(is_num('123'))
# True

print(is_num('-1.23'))
# True

print(is_num('+1.23e10'))
# True

print(is_num('abc'))
# False

print(is_num('10,000,000'))
# False

Αν θέλετε να προσδιορίσετε ότι ένας αριθμός διαχωρισμένος με κόμμα είναι επίσης αληθής, χρησιμοποιήστε την replace() για να αφαιρέσετε το κόμμα (αντικαταστήστε το με μια κενή συμβολοσειρά).

def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter('10,000,000'))
# True

Αν θέλετε να υποστηρίξετε την οριοθέτηση κενών διαστημάτων, μπορείτε να χρησιμοποιήσετε περαιτέρω την replace().

def is_num_delimiter2(s):
    try:
        float(s.replace(',', '').replace(' ', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter2('10,000,000'))
# True

print(is_num_delimiter2('10 000 000'))
# True