Omg lol thật đơn giản, cảm ơn rất nhiều. Tuy nhiên, tôi cũng phải hoán đổi các câu lệnh if của mình vì câu lệnh hoặc cho dấu - đều đúng trong cả hai trường hợp và có xu hướng chỉ xuất câu lệnh if đầu tiên
Bạn có thể chuyển văn bản sang kiểu int và xem liệu bạn có lấy lại được gì không hoặc bạn có thể khớp mẫu với biểu thức chính quy
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
4^ start of input
$ end of input
? zero or one [optional]
+ one or more
* zero or more
[] any of the things in there, can contain ranges like a-z
Bạn cũng có thể viết logic của riêng mình để kiểm tra chuỗi, chẳng hạn như bạn sẽ kiểm tra xem ký tự đầu tiên [nếu nó tồn tại] là + hay - [hoặc không] và sau đó xem phần còn lại có phải chỉ là một trong 0…9
Đừng mong đợi các giải pháp hoàn thiện tồn tại. Dù đó là gì, hãy chia nhỏ nó thành những phần nhỏ hơn cho đến khi bạn đạt đến điểm mà bạn biết điều gì đó có thể giải quyết vấn đề đó và soạn những phần đó [viết mã] để tạo ra hành động tổng thể mà bạn đang tìm kiếm
Phương thức isdigit[] trong lớp String của Python dùng để kiểm tra xem tất cả các ký tự trong chuỗi có phải là chữ số hay không
Phương thức isdigit[] trả về true nếu tất cả các ký tự trong chuỗi là chữ số và có ít nhất một ký tự, ngược lại là false. Phương thức này chỉ hoạt động đối với các số nguyên dương, không dấu và đối với các chỉ số trên hoặc chỉ số dưới được truyền dưới dạng ký tự unicode
Các ví dụ về phương thức isdigit trong Python
1. Sử dụng phương thức isdigit[] để kiểm tra xem tất cả các ký tự có phải là chữ số hay không
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
đầu ra
456 True A12 False
2. Sử dụng phương thức isdigit[] với chỉ số trên hoặc chỉ số dưới. Đối với các chuỗi như vậy phương thức isdigit[] trả về true
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]
đầu ra
26 True 42 True
3. Sử dụng phương thức isdigit[] với số âm hoặc số thập phân. Đối với các chuỗi như vậy phương thức isdigit[] trả về false
str = '2.45' print[str] print[str.isdigit[]] str = '-12' print[str] print[str.isdigit[]]
đầu ra
2.45 False -12 False
4- Để kiểm tra số âm hoặc số thập phân bằng phương thức isdigit[] của Python, bạn cần bỏ dấu trừ hoặc ký tự thập phân trước khi kiểm tra
Sử dụng phương thức lstrip[] bạn có thể xóa các ký tự đầu được chỉ định [được sử dụng để xóa dấu '-' ở đây]
Sử dụng phương thức thay thế [] bạn có thể thay thế ký tự thập phân [thay thế số thập phân không có khoảng trắng ở đây]
str = '-12' print[str.lstrip['-'].replace['.', '', 1].isdigit[]] print[str] str = '2.45' print[str.lstrip['-'].replace['.', '', 1].isdigit[]] print[str] str = '-0.657' print[str.lstrip['-'].replace['.', '', 1].isdigit[]] print[str]
đầu ra
________số 8Vì Chuỗi là bất biến trong Python nên chuỗi gốc không thay đổi
Đó là tất cả cho chủ đề này Phương thức chuỗi isdigit[] của Python. Nếu bạn có bất kỳ nghi ngờ hoặc bất kỳ đề xuất nào để thực hiện, vui lòng gửi bình luận. Cảm ơn
Hướng dẫn chuyên sâu về cách sử dụng isdigit[], isdecimal[] và isnumeric[] bằng cách hiểu sự khác biệt giữa chúng
·Ngày 18 tháng 9 năm 2021·8 phút đọc
Theo dõi bản tin của tôi và không bao giờ bỏ lỡ các bài viết sắp tới của tôi
Chơi bài viết này
Trình duyệt của bạn không hỗ trợ phần tử âm thanh. TỐC ĐỘ1X
Trong bài đăng này, bạn sẽ tìm hiểu sự khác biệt tinh tế giữa
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
8, # ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
9 và str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]10 trong Python 3 và cách chọn cái tốt nhất cho công việc
Khi xử lý các chuỗi, thường bằng cách đọc chúng từ một số nguồn, bạn có thể muốn kiểm tra xem chuỗi đã cho có phải là một số không. Lớp chuỗi [
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]11] đi kèm với 3 phương thức khác nhau mà bạn có thể sử dụng cho mục đích đó
Mỗi trong số chúng đều có ưu và nhược điểm và việc phân biệt sự khác biệt giữa chúng sẽ giúp bạn tiết kiệm rất nhiều thời gian phát triển và gỡ lỗi
Trong bài viết này, bạn sẽ
- tìm hiểu những gì
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
12,str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
13 vàstr = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
14 làm, những hạn chế của chúng, cách sử dụng chúng và khi nào bạn nên sử dụng chúng - hiểu sự khác biệt giữa
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
15 so vớistr = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
16 so vớistr = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
17 - hiểu tại sao
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
15,str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
16, hoặcstr = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
17 không hiệu quả với bạn - cách giải quyết các vấn đề phổ biến không thể giải quyết dễ dàng với chúng, chẳng hạn như
- cách đảm bảo chuỗi số float là chữ số
- cách sử dụng
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
15,______116 hoặcstr = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
17 với số âm
Mục lục
- Cách thức hoạt động của
456 True A12 False
54 và khi nào nên sử dụng nó - Cách thức hoạt động của
456 True A12 False
55 và khi nào nên sử dụng nó - Cách thức hoạt động của
456 True A12 False
56 và khi nào nên sử dụng nó Giải quyết các vấn đề thường gặp
4. 1. Làm cách nào để kiểm tra xem số float có phải là chữ số không?
4. 2. Làm cách nào để kiểm tra xem số âm có phải là chữ số không?
4. 3. Tại sao
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]
15 không hiệu quả với tôi?Sự kết luận
Cách thức hoạt động của 456
True
A12
False
54 và khi nào nên sử dụng nó
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]12 là lựa chọn rõ ràng nhất nếu bạn muốn xác định xem một chuỗi - hoặc một ký tự - có phải là một chữ số trong Python hay không
Theo tài liệu của nó, phương thức này trả về
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]10 nếu tất cả các ký tự trong chuỗi là chữ số và nó không trống, nếu không, nó sẽ trả về
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]11. Hãy xem một số ví dụ
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]3
Không như nhiều người nghĩ,
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]15 không phải là một hàm mà là một phương thức trong các lớpstr = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]11,str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]14 vàstr = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]15
Điều này hoạt động tốt cho những trường hợp đơn giản này, nhưng điều gì xảy ra nếu một chuỗi có khoảng trắng?
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
Điều này không thành công vì chuỗi chứa khoảng trắng ở đầu. Do đó, chúng tôi không thể sử dụng nó để đọc từ các nguồn chưa được xử lý, chẳng hạn như hàm
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]16. Bạn phải luôn nhớ xử lý trước đầu vào trước khi kiểm tra với
456 True A12 False54. Đó có thể là một trong những lý do khiến
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]15 không hiệu quả với bạn
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]1
Bất chấp hành vi nghiêm khắc này,
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]15 có một số vấn đề. Nếu chúng ta đọc kỹ tài liệu, nó nói rằng phương thức này cũng có thể xử lý "các chữ số chỉ số trên"
Chữ số bao gồm các ký tự thập phân và chữ số cần xử lý đặc biệt, chẳng hạn như chữ số chỉ số trên tương thích
Nhưng nó hoạt động như thế nào?
456 True A12 False5
Hóa ra nó làm. Bạn thực sự có thể sử dụng nó với
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]16
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]1
Mặc dù nó hoạt động tốt với các ký tự trên, nhưng nó không xử lý các ký tự phân số. Phương pháp này thực sự là về các chữ số đơn
26 True 42 True8
Như chúng ta có thể thấy,
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]12 hoạt động rất tốt với các ký tự Unicode. Nếu chúng ta xem xét bộ thử nghiệm đơn vị cho phương pháp này, chúng ta có thể thấy một số trường hợp thử nghiệm thú vị
str = '2.45' print[str] print[str.isdigit[]] str = '-12' print[str] print[str.isdigit[]]0
Hình ảnh dưới đây cho thấy một số trường hợp thử nghiệm này
str. isdigit[] hoạt động rất tốt với Unicode số
Các ký tự Unicode không đại diện cho chữ số không được chấp nhận
Tóm tắt những gì str = '456'
print[str]
print[str.isdigit[]]
str = 'A12'
print[str]
print[str.isdigit[]]
15 không thể làm
Nó có thể xử lý khoảng trắng?
Không
Nó có thể xử lý hệ thập lục phân không?
Không
Liệu nó tăng ngoại lệ?
Không
Nó có chấp nhận chữ số âm [có dấu trừ] không?
Không
Khi nào nên sử dụng nó?
Sử dụng
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
8 khi bạn muốn xác minh rằng mỗi và mọi ký tự trong chuỗi là một chữ số, nghĩa là không phải dấu chấm câu, không phải chữ cái và không phải số âmCách thức hoạt động của 456
True
A12
False
55 và khi nào nên sử dụng nó
Phương thức
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]13 rất giống, nó trả về
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]10 nếu tất cả các ký tự đều là ký tự thập phân và chuỗi không trống. Điều này có nghĩa là các chỉ số trên KHÔNG phải là số thập phân, do đó chúng sẽ trả về
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]11
str = '2.45' print[str] print[str.isdigit[]] str = '-12' print[str] print[str.isdigit[]]7
Chỉ số trên không phải là số thập phân
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]17 cũng chấp nhận các ký tự Unicode được sử dụng để tạo số ở cơ số 10 trong các ngôn ngữ khác. Ví dụ: chữ số 0 trong tiếng Ả Rập-Ấn Độ được coi là số thập phân, do đó, kết quả là
str = '2.45' print[str] print[str.isdigit[]] str = '-12' print[str] print[str.isdigit[]]00 trả về true
2.45 False -12 False0
Tiếng Ả Rập-Ấn Độ, chẳng hạn như '٠' thập phân trong cơ số 10
Khi nào nên sử dụng nó?
Sử dụng
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
9 khi bạn muốn xác minh rằng mỗi và mọi ký tự trong một chuỗi có thể tạo thành một số cơ số 10. Vì dấu chấm câu, chỉ số trên, chữ cái và dấu trừ không phải là số thập phân nên chúng sẽ trả về str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]11
Cách thức hoạt động của 456
True
A12
False
56 và khi nào nên sử dụng nó
Cái này trùng lặp đáng kể với
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]15 và
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]17. Theo tài liệu,
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]16 trả về
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]10 nếu tất cả chuỗi ký tự là số và không được để trống
Sự khác biệt chính ở đây là từ số. Sự khác biệt giữa ký tự số và ký tự chữ số là gì?
Sự khác biệt là một chữ số là một giá trị Unicode duy nhất trong khi một ký tự số là bất kỳ ký hiệu Unicode nào đại diện cho một giá trị số và bao gồm các phân số
Không chỉ vậy,
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]16 hoạt động tốt với các chữ số La Mã
Hãy xem một số ví dụ trong hành động
2.45 False -12 False9
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
0# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
1Khi nào nên sử dụng nó?
Sử dụng
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]10 khi bạn muốn xác minh rằng mỗi và mọi ký tự trong chuỗi là một ký tự số hợp lệ, bao gồm phân số, ký tự trên và số La Mã. Vì dấu chấm câu, chữ cái và dấu trừ không phải là giá trị số nên chúng sẽ đánh giá là
str = '2\u2076' print[str] print[str.isdigit[]] str = '4\u2082' print[str] print[str.isdigit[]]11
Giải quyết các vấn đề thường gặp
Trong phần này, chúng ta sẽ xem cách khắc phục các sự cố phổ biến nhất khi sử dụng
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]15,
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]16 và
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]17
Làm cách nào để kiểm tra xem số float có phải là chữ số không?
Cách tốt nhất để kiểm tra đó là cố gắng truyền nó tới
str = '2.45' print[str] print[str.isdigit[]] str = '-12' print[str] print[str.isdigit[]]74
Hàm tạo
str = '2.45' print[str] print[str.isdigit[]] str = '-12' print[str] print[str.isdigit[]]74 không đưa ra bất kỳ ngoại lệ nào, thì chuỗi là một giá trị float hợp lệ. Đây là một thành ngữ Pythonic được gọi là EAFP [Xin tha thứ dễ hơn xin phép]
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
2THẬN TRỌNG. Phương thức chuỗi này không hoạt động với chỉ số trên. Cách duy nhất để xác minh điều đó là thay thế '. ' và sau đó gọi `isdigit[]' trên đó
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
3# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
4Làm cách nào để kiểm tra xem số âm có phải là chữ số không?
Kiểm tra các số bắt đầu bằng dấu trừ phụ thuộc vào loại mục tiêu
Vì chúng ta đang nói về các chữ số ở đây, nên cần xác nhận xem chuỗi có thể được chuyển đổi thành
str = '2.45' print[str] print[str.isdigit[]] str = '-12' print[str] print[str.isdigit[]]76 hay không. Điều này rất giống với cách tiếp cận EAFP được thảo luận cho số float
Tuy nhiên, giống như cách tiếp cận trước đó, nó không xử lý các chỉ số trên
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
5Để khắc phục điều đó, cách tốt nhất là bỏ dấu trừ đi
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
6Tại sao str = '456'
print[str]
print[str.isdigit[]]
str = 'A12'
print[str]
print[str.isdigit[]]
15 không hiệu quả với tôi?
Vấn đề phổ biến nhất khiến
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]15 /
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]16 /
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]17 hoạt động bình thường là có khoảng trắng ở đầu hoặc cuối trong chuỗi. Trước khi sử dụng chúng, bắt buộc phải xóa mọi khoảng trắng ở đầu hoặc cuối hoặc ký tự khác, chẳng hạn như dòng mới [
2.45 False -12 False01]]
# ' ' [space] is not a digit
In [8]: ' 102030'.isdigit[]
Out[8]: False
7Sự kết luận
Trong bài đăng này, chúng tôi đã thấy sự khác biệt tinh tế giữa
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]15 so với
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]17 so với
str = '456' print[str] print[str.isdigit[]] str = 'A12' print[str] print[str.isdigit[]]16 và cách chọn phương thức chuỗi phù hợp nhất cho trường hợp sử dụng của bạn. Chúng ta cũng thấy những trường hợp không thể đơn lẻ xử lý và cách khắc phục những hạn chế đó