Η Python παρέχει διάφορες μεθόδους συμβολοσειρών για να προσδιορίζει και να ελέγχει αν ένας τύπος συμβολοσειράς είναι αριθμητικός ή αλφαβητικός.
Κάθε μέθοδος εξηγείται με παράδειγμα κώδικα.
- Προσδιορίζει αν μια συμβολοσειρά είναι δεκαδικό ψηφίο:
str.isdecimal()
- Προσδιορισμός αν μια συμβολοσειρά είναι αριθμός:
str.isdigit()
- Προσδιορίζει αν μια συμβολοσειρά είναι χαρακτήρας που αντιπροσωπεύει αριθμό:
str.isnumeric()
- Καθορίζει αν η συμβολοσειρά είναι αλφαβητική:
str.isalpha()
- Καθορισμός αν η συμβολοσειρά είναι αλφαριθμητική:
str.isalnum()
- Καθορίζει αν οι συμβολοσειρές είναι χαρακτήρες ASCII:
str.isascii()
- Κρίση της κενής συμβολοσειράς
- Προσδιορίστε αν οι συμβολοσειρές μπορούν να μετατραπούν σε αριθμούς
Για άλλες μεθόδους εκτός της isascii(), ένα αλφαριθμητικό που περιέχει ένα κενό αλφαριθμητικό, τα ακόλουθα σύμβολα κ.λπ. είναι ψευδές.
,
.
-
-1,23, κ.λπ., ως αριθμητική τιμή εξηγείται στο τέλος αυτής της ενότητας.
Οι κανονικές εκφράσεις μπορούν να χρησιμοποιηθούν για τον πιο ευέλικτο προσδιορισμό των τύπων χαρακτήρων και για την εξαγωγή των σχετικών τύπων χαρακτήρων.
Ανατρέξτε στο ακόλουθο άρθρο για περισσότερες πληροφορίες σχετικά με τον τρόπο προσδιορισμού των εξής
- Πώς να μετατρέψετε μια αριθμητική συμβολοσειρά (str) σε έναν αριθμό (int, float)
- Πώς να προσδιορίζετε την κεφαλαία και την πεζή γραμματοσειρά
- ΣΧΕΤΙΚΑ:Μετατροπή μιας συμβολοσειράς αριθμών σε αριθμητικές τιμές στην Python
- ΣΧΕΤΙΚΑ:Λίστα μεθόδων συμβολοσειρών για τον χειρισμό της πεζότητας στην Python
- Προσδιορίζει αν μια συμβολοσειρά είναι δεκαδικό ψηφίο: str.isdecimal()
- Προσδιορισμός αν μια συμβολοσειρά είναι αριθμός: str.isdigit()
- Προσδιορίζει αν μια συμβολοσειρά είναι χαρακτήρας που αντιπροσωπεύει αριθμό: str.isnumeric()
- Καθορίζει αν η συμβολοσειρά είναι αλφαβητική: str.isalpha()
- Καθορισμός αν η συμβολοσειρά είναι αλφαριθμητική: str.isalnum()
- Καθορίζει αν οι συμβολοσειρές είναι χαρακτήρες ASCII: str.isascii()
- Κρίση της κενής συμβολοσειράς
- Προσδιορίστε αν οι συμβολοσειρές μπορούν να μετατραπούν σε αριθμούς
Προσδιορίζει αν μια συμβολοσειρά είναι δεκαδικό ψηφίο: 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