Mã Python:
sentence = input('Enter a string:') vowel = 'A,a,E,e,I,i,O,o,U,u' Count = 0 for vowel in sentence: Count += 1 print('There are {} vowels in the string: \'{}\''.format(Count,sentence))Tôi đang cố gắng viết một chương trình nhắc người dùng nhập chuỗi. Chương trình sau đó trả về số lượng nguyên âm trong chuỗi. Tuy nhiên, mã chỉ trả về số lượng chữ cái, mà không quan tâm đến việc chỉ trả lại nguyên âm.
Hỏi ngày 25 tháng 9 năm 2017 lúc 3:13Sep 25, 2017 at 3:13
8
Bạn đã xác định một chuỗi nguyên âm, nhưng đang xác định lại các nguyên âm biến trong vòng lặp.
Tôi khuyên bạn nên xác định vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 3 nguyên âm, và sau đó tăng bộ đếm của bạn dựa trên kiểm tra vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 4.
vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1Ở đây, vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 5 sẽ trả lại vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 6 nếu vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 7 là một nguyên âm (nghĩa là vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 7 thuộc tập hợp các nguyên âm được lưu trữ trong vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 9).
Bạn có thể cải thiện giải pháp này với đối tượng from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 0:
from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou'))Ngoài ra, bạn có thể sử dụng from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 1 và đếm độ dài của nó.
Đã trả lời ngày 25 tháng 9 năm 2017 lúc 3:20Sep 25, 2017 at 3:20
cs95cs95cs95
347K87 Huy hiệu vàng637 Huy hiệu bạc685 Huy hiệu Đồng87 gold badges637 silver badges685 bronze badges
3
Tôi nghĩ rằng cách tốt nhất là sử dụng một regex đơn giản. Regex để khớp với nguyên âm là from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 2 (hoặc from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 3 nếu bạn cũng muốn khớp với "y").
Bạn có thể sử dụng from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 4 để tìm thấy tất cả các sự cố của một nguyên âm trong một câu, sử dụng cờ from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 5 để bỏ qua trường hợp.
>>> import re >>> sentence = "my name is Jessica" >>> len(re.findall(r'[aeiou]', sentence, flags=re.IGNORECASE)) 6Ưu điểm của giải pháp này là bạn có thể mở rộng nó một cách dễ dàng để thêm các ký tự được nhấn hoặc ký tự Unicode khác:
>>> import re >>> sentence = "Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !" >>> len(re.findall(r'[aeiouyàâèéêëiïîöôüûùæœÿ]', sentence, flags=re.IGNORECASE)) 41Đã trả lời ngày 18 tháng 1 năm 2019 lúc 20:18Jan 18, 2019 at 20:18
Laurent Laportelaurent LaporteLaurent LAPORTE
20.7K5 Huy hiệu vàng54 Huy hiệu bạc95 Huy hiệu Đồng5 gold badges54 silver badges95 bronze badges
Bạn không kiểm tra ở bất cứ đâu nếu các chữ cái trong câu là nguyên âm. Cú pháp from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 6 xác định một vòng lặp trên một đối tượng có thể lặp lại (chuỗi, danh sách, v.v.) trong đó cho mỗi lần lặp vòng lặp, biến from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 7 được đặt thành phần tử tiếp theo của điều đó.
Dòng from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 8 của bạn chỉ đơn giản là xác định một vòng lặp, trong đó from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 9 được gán cho mỗi chữ cái của câu đầu vào. Tuyên bố trước đây của bạn về >>> import re >>> sentence = "my name is Jessica" >>> len(re.findall(r'[aeiou]', sentence, flags=re.IGNORECASE)) 6 0 không có hiệu lực ở đây.
Một 1-liner khá để đạt được kết quả mong muốn sẽ là:
sentence = input('Enter a string:') vowels = 'aeiou' count = len([c for c in sentence.lower() if c in vowels])Đã trả lời ngày 25 tháng 9 năm 2017 lúc 3:20Sep 25, 2017 at 3:20
347K87 Huy hiệu vàng637 Huy hiệu bạc685 Huy hiệu ĐồngDBrowne
Tôi nghĩ rằng cách tốt nhất là sử dụng một regex đơn giản. Regex để khớp với nguyên âm là from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 2 (hoặc from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 3 nếu bạn cũng muốn khớp với "y").4 silver badges11 bronze badges
Bạn có thể sử dụng from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 4 để tìm thấy tất cả các sự cố của một nguyên âm trong một câu, sử dụng cờ from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 5 để bỏ qua trường hợp.
sentence = input('Enter a string:') vowels = 'A,a,E,e,I,i,O,o,U,u' Count = 0 for each_char in sentence: if each_char in vowels: Count += 1 print('There are {} vowels in the string: \'{}\''.format(Count,sentence))Ưu điểm của giải pháp này là bạn có thể mở rộng nó một cách dễ dàng để thêm các ký tự được nhấn hoặc ký tự Unicode khác:Sep 25, 2017 at 3:21
Đã trả lời ngày 18 tháng 1 năm 2019 lúc 20:18Raju Pitta
Laurent Laportelaurent Laporte3 silver badges5 bronze badges
2
20.7K5 Huy hiệu vàng54 Huy hiệu bạc95 Huy hiệu Đồng
import collections vowel = ['a', 'e', 'i', 'o', 'u'] count = 0 sentence = input('Enter a string:').lower() counter = collections.Counter(sentence) for word in counter: if word in vowel: count += counter[word] print('There are {} vowels in the string: \'{}\''.format(count,sentence))Bạn không kiểm tra ở bất cứ đâu nếu các chữ cái trong câu là nguyên âm. Cú pháp from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 6 xác định một vòng lặp trên một đối tượng có thể lặp lại (chuỗi, danh sách, v.v.) trong đó cho mỗi lần lặp vòng lặp, biến from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 7 được đặt thành phần tử tiếp theo của điều đó.Sep 25, 2017 at 3:26
1
sentence = input('Enter a string:') Count = 0 for eachLetter in sentence: if eachLetter.lower() in ['a','e','i','o','u']: Count += 1 print('There are {} vowels in the string: \'{}\''.format(Count,sentence))
Dòng from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 8 của bạn chỉ đơn giản là xác định một vòng lặp, trong đó from collections import Counter c = Counter(sentence.lower()) counter = sum(c[v] for v in set('aeiou')) 9 được gán cho mỗi chữ cái của câu đầu vào. Tuyên bố trước đây của bạn về >>> import re >>> sentence = "my name is Jessica" >>> len(re.findall(r'[aeiou]', sentence, flags=re.IGNORECASE)) 6 0 không có hiệu lực ở đây.Sep 25, 2017 at 3:27
1
Một 1-liner khá để đạt được kết quả mong muốn sẽ là:
DbrownedBrowne
sentence = 'This is a sentence' vowels = ['a','e','i','o','u'] Count = 0 for vowel in vowels: Count = Count + sentence.lower().count(vowel)6444 Huy hiệu bạc11 Huy hiệu đồngSep 25, 2017 at 3:29
Michele87Michele87Michele87
Sử dụng Python 3:1 silver badge3 bronze badges
3
Đã trả lời ngày 25 tháng 9 năm 2017 lúc 3:21
vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 0Raju Pittaraju Pitta
vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 15963 Huy hiệu bạc5 Huy hiệu Đồng
Đây là mã của tôi bằng cách sử dụng bộ sưu tập của bộ sưu tậpSep 25, 2017 at 6:55
Đã trả lời ngày 25 tháng 9 năm 2017 lúc 3:26cdlane
Đã trả lời ngày 25 tháng 9 năm 2017 lúc 3:275 gold badges27 silver badges74 bronze badges
Chúng tôi chỉ cần nguyên âm chữ thường trong danh sách vì chúng tôi chỉ biến câu thành chữ thường chỉ bằng .lower ()
vowels = set('aeiou') counter = 0 for c in sentence.lower(): if c in vowels: counter += 1 2Đã trả lời ngày 25 tháng 9 năm 2017 lúc 3:20Sep 25, 2017 at 3:20
2