Tôi cần tạo một chương trình sẽ đọc một tệp văn bản và in có bao nhiêu nguyên âm và phụ âm. Tôi tạo một tệp văn bản để kiểm tra và điều duy nhất trong đó là "Đây là một bài kiểm tra". Tuy nhiên, đầu ra luôn luôn:
Nhập tệp để kiểm tra: test.txt
Số lượng nguyên âm là: 1
Số lượng phụ âm là: 0
fileName = input["Enter the file to check: "].strip[]
infile = open[fileName, "r"]
vowels = set["A E I O U a e i o u"]
cons = set["b c d f g h j k l m n p q r s t v w x y z B C D F G H J K L M N P Q R S T V W X Y Z"]
text = infile.read[].split[]
countV = 0
for V in text:
if V in vowels:
countV += 1
countC = 0
for C in text:
if C in cons:
countC += 1
print["The number of Vowels is: ",countV,"\nThe number of consonants is: ",countC]
Nếu có một cách tốt hơn để nhập các giá trị cho các nguyên âm và nhược điểm tôi cũng muốn biết, vì tôi gặp lỗi khi tôi cố gắng người dùng .lower [] để chuyển đổi mọi thứ trong tệp thành chữ thường .....
cs95
350K87 Huy hiệu vàng643 Huy hiệu bạc694 Huy hiệu Đồng87 gold badges643 silver badges694 bronze badges
Hỏi ngày 6 tháng 8 năm 2017 lúc 18:46Aug 6, 2017 at 18:46
1
set["A E I O U a e i o u"]
sẽ dẫn đến{' ', 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'}
. Nếu bạn nhận thấy, không gian cũng được xem xét. Bạn sẽ cần phải loại bỏ các khoảng trống giữa các chữ cái.infile.read[].split[]
sẽ phân chia dựa trên khoảng trắng để bạn có được một danh sách các từ. Sau đó, bạn tiến hành lặp lại các từ và thử so sánh thành viên giữa các từ và các chữ cái. Điều này sẽ không làm việc cho bạn.Bạn không cần lặp lại hai lần. Một lần là đủ.
Đây là phiên bản làm sạch mã của bạn.
vowels = set["AEIOUaeiou"]
cons = set["bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"]
countV = 0
countC = 0
for c in infile.read[]:
if c in vowels:
countV += 1
elif c in cons:
countC += 1
Là một cải tiến, hãy xem xét việc sử dụng collections.Counter
. Nó thực hiện việc đếm cho bạn, và bạn chỉ cần tổng hợp số đếm.
import collections
c = collections.Counter[infile.read[]]
countV = sum[c[k] for k in c if k in vowels]
countC = sum[c[k] for k in c if k in cons]
Đã trả lời ngày 6 tháng 8 năm 2017 lúc 18:52Aug 6, 2017 at 18:52
cs95cs95cs95
350K87 Huy hiệu vàng643 Huy hiệu bạc694 Huy hiệu Đồng87 gold badges643 silver badges694 bronze badges
3
Hỏi ngày 6 tháng 8 năm 2017 lúc 18:46
import re
text = re.split["\s+", re.sub["[.,\n+]", " ", infile.read[]]]
set["A E I O U a e i o u"]
sẽ dẫn đến {' ', 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'}
. Nếu bạn nhận thấy, không gian cũng được xem xét. Bạn sẽ cần phải loại bỏ các khoảng trống giữa các chữ cái.
infile.read[].split[]
sẽ phân chia dựa trên khoảng trắng để bạn có được một danh sách các từ. Sau đó, bạn tiến hành lặp lại các từ và thử so sánh thành viên giữa các từ và các chữ cái. Điều này sẽ không làm việc cho bạn.May 10, 2018 at 19:58
Bạn không cần lặp lại hai lần. Một lần là đủ.Rodolfo Alvarez
Đây là phiên bản làm sạch mã của bạn.2 gold badges10 silver badges18 bronze badges
fileName = input["Enter the file to check: "].strip[]
infile = open[fileName, "r"]
vowels = set["A E I O U a e i o u"]
cons = set["b c d f g h j k l m n p q r s t v w x y z B C D F G H J K L M N P Q R S T V W X Y Z"]
text = infile.read[].split[]
countV = 0
for V in text:
if V in vowels:
countV += 1
countC = 0
for C in text:
if C in cons:
countC += 1
print["The number of Vowels is: ", countV, "\nThe number of consonants is: ", countC]
Là một cải tiến, hãy xem xét việc sử dụng collections.Counter
. Nó thực hiện việc đếm cho bạn, và bạn chỉ cần tổng hợp số đếm.
Đã trả lời ngày 6 tháng 8 năm 2017 lúc 18:5210 gold badges41 silver badges48 bronze badges
Nếu tệp đầu vào fileName
chứa các ký tự khác với các nguyên âm và phụ âm như
vowels = set["AEIOUaeiou"]
cons = set["bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"]
countV = 0
countC = 0
for c in infile.read[]:
if c in vowels:
countV += 1
elif c in cons:
countC += 1
0, một giải pháp là sử dụng vowels = set["AEIOUaeiou"]
cons = set["bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"]
countV = 0
countC = 0
for c in infile.read[]:
if c in vowels:
countV += 1
elif c in cons:
countC += 1
1 và vowels = set["AEIOUaeiou"]
cons = set["bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"]
countV = 0
countC = 0
for c in infile.read[]:
if c in vowels:
countV += 1
elif c in cons:
countC += 1
2 thay vì phương thức vowels = set["AEIOUaeiou"]
cons = set["bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"]
countV = 0
countC = 0
for c in infile.read[]:
if c in vowels:
countV += 1
elif c in cons:
countC += 1
3:Feb 23 at 15:47