2012-10-17 68 views
15

Tôi cần phải biết nếu có một chức năng phát hiện các chữ cái thường trong một chuỗi. Giả sử tôi bắt đầu viết chương trình này:Làm thế nào để phát hiện chữ thường trong Python?

s = input('Type a word') 

Có chức năng cho phép tôi phát hiện chữ thường trong chuỗi không? Có thể kết thúc bằng cách gán các chữ cái đó cho một biến khác hoặc chỉ in các chữ thường hoặc số chữ thường.

Trong khi đó sẽ là những gì tôi muốn làm với nó Tôi quan tâm nhất đến cách phát hiện sự hiện diện của chữ thường. Các phương pháp đơn giản nhất sẽ được chào đón, tôi chỉ trong một khóa học python giới thiệu vì vậy giáo viên của tôi sẽ không muốn nhìn thấy các giải pháp phức tạp khi tôi đi giữa kỳ của tôi. Cảm ơn đã giúp đỡ!

+4

'nếu bất kỳ (c cho c trong s nếu c.islower())' Phát hiện sự hiện diện của ít nhất một chữ thường. – eumiro

+1

Bạn đang sử dụng Python 2.x hoặc Python 3.x? –

+0

Tại sao upvote một câu trả lời sai @NoctisSkytower? Nó nên là 'bất kỳ (bộ lọc (str.islower, s))' – stanleyli

Trả lời

27

Để kiểm tra xem ký tự có thấp hơn hay không, hãy sử dụng phương pháp islower của str. Đây đơn giản chương trình bắt buộc in tất cả các chữ viết thường trong chuỗi của bạn:

for c in s: 
    if c.islower(): 
     print c 

Lưu ý rằng trong Python 3 bạn nên sử dụng print(c) thay vì print c.


Có thể kết thúc bằng việc gán các chữ cái đó cho một biến khác.

Để thực hiện điều này, tôi sẽ đề nghị sử dụng một danh sách hiểu biết, mặc dù bạn có thể không được bảo hiểm này được nêu ra trong khóa học của bạn:

>>> s = 'abCd' 
>>> lowercase_letters = [c for c in s if c.islower()] 
>>> print lowercase_letters 
['a', 'b', 'd'] 

Hoặc để có được một chuỗi bạn có thể sử dụng ''.join với một máy phát điện:

>>> lowercase_letters = ''.join(c for c in s if c.islower()) 
>>> print lowercase_letters 
'abd' 
1
import re 
s = raw_input('Type a word: ') 
slower=''.join(re.findall(r'[a-z]',s)) 
supper=''.join(re.findall(r'[A-Z]',s)) 
print slower, supper 

Prints:

Type a word: A Title of a Book 
itleofaook ATB 

Hoặc bạn có thể sử dụng một biểu danh sách hiểu/máy phát điện:

slower=''.join(c for c in s if c.islower()) 
supper=''.join(c for c in s if c.isupper()) 
print slower, supper 

Prints:

Type a word: A Title of a Book 
itleofaook ATB 
8

Có 2 cách khác nhau mà bạn có thể tìm kiếm ký tự chữ thường:

  1. Sử dụng str.islower() để tìm ký tự chữ thường.Kết hợp với một sự hiểu biết danh sách, bạn có thể thu thập tất cả các chữ thường:

    lowercase = [c for c in s if c.islower()] 
    
  2. Bạn có thể sử dụng một biểu thức chính quy:

    import re 
    
    lc = re.compile('[a-z]+') 
    lowercase = lc.findall(s) 
    

Phương pháp đầu tiên trả về một danh sách các đặc điểm cá nhân, thứ hai trả về danh sách ký tự nhóm:

>>> import re 
>>> lc = re.compile('[a-z]+') 
>>> lc.findall('AbcDeif') 
['bc', 'eif'] 
+1

Đoạn đầu tiên không giống như những gì bạn nghĩ. – georg

+0

@ thg435: Rất tiếc. :-P –

+0

Có vẻ tốt hơn)) BTW, điều này có vẻ là một trường hợp sử dụng hợp lệ cho 'bộ lọc' - một cái gì đó không ai được đề cập cho đến nay. – georg

8

Bạn có thể sử dụng chức năng tích hợp any và máy phát điện.

>>> any(c.islower() for c in 'Word') 
True 

>>> any(c.islower() for c in 'WORD') 
False 
+0

* 'Có thể kết thúc bằng việc gán các chữ cái đó cho một biến khác' *. Sử dụng 'any' sẽ loại trừ tùy chọn đó. –

+1

"... Tôi quan tâm nhất đến cách phát hiện sự hiện diện của chữ cái thường." Tôi nghĩ rằng đề nghị của tôi có thể là một câu trả lời. –

3

Bạn nên sử dụng raw_input để nhập chuỗi. sau đó sử dụng phương thức islower của đối tượng str.

s = raw_input('Type a word') 
l = [] 
for c in s.strip(): 
    if c.islower(): 
     print c 
     l.append(c) 
print 'Total number of lowercase letters: %d'%(len(l) + 1) 

Chỉ cần làm -

dir(s) 

và bạn sẽ tìm thấy islower và các thuộc tính khác của str

+0

Lưu ý: 'raw_input()' trong Python 2.x được thay thế bằng 'input()' trong Python 3.x. Điều này là quan trọng vì tác giả đã không chỉ định phiên bản nào anh ta đang sử dụng. – rbaleksandar

4

Có rất nhiều phương pháp để này, đây là một số trong số họ:

  1. Sử dụng hàm được định nghĩa trước character.islo wer():

    >>> c = 'a' 
    >>> print(c.islower()) #this prints True 
    
  2. Sử dụng ord() để kiểm tra xem mã ASCII của bức thư là trong phạm vi của các mã ASCII của ký tự chữ thường:

    >>> c = 'a' 
    >>> print(ord(c) in range(97,123)) #this will print True 
    
  3. Kiểm tra nếu bức thư bằng đó là chữ thường:

    >>> c = 'a' 
    >>> print(c.lower()==c) #this will print True 
    

Nhưng điều đó có thể không phải tất cả, bạn ca n tìm cách riêng của bạn nếu bạn không thích những cái: D.

Cuối cùng, chúng ta hãy bắt đầu phát hiện:

d = str(input('enter a string : ')) 
lowers = [c for c in d if c.islower()] 
#here i used islower() because it's the shortest and most-reliable one (being a predefined function), using this list comprehension is the most efficient way of doing this 
+0

Điều này làm gì thêm vào câu trả lời hiện có khác? –

+0

Phương pháp thứ hai và thứ ba không được đề cập ở trên –

Các vấn đề liên quan