#python
#python
Вопрос:
Я пытаюсь выполнить поиск в текстовом файле и определить, сколько строк, гласных, согласных и числовых значений / символов находится в текстовом файле. Похоже, мои гласные, согласные и числовые выходные значения вычисляются неправильно. Общее количество выходных строк рассчитано правильно.
ein = input("Please enter file name: ")
vowels = set("AEIOUaeoiu")
cons = set("BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwvyz")
num = set("1234567890")
count = 0
Vcount = 0
Ccount = 0
Ncount = 0
with open(ein) as ein_handle:
for line in ein_handle:
count = 1
for line in ein_handle:
if line in vowels:
Vcount = 1
elif line in cons:
Ccount = 1
elif line in num:
Ncount = 1
print("the file has",count,"lines.")
print("the file has",Vcount,"vowels.")
print("the file has",Ccount,"consonants.")
print("the file has",Ncount,"numerical characters.")
Комментарии:
1. есть ли только символ в каждой строке?
Ответ №1:
вместо этого второй цикл должен быть для каждого символа в данной строке.
Попробуйте это:
ein = input("Please enter file name: ")
vowels = set("AEIOUaeoiu")
cons = set("BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwvyz")
num = set("1234567890")
count = 0
Vcount = 0
Ccount = 0
Ncount = 0
with open(ein) as ein_handle:
for line in ein_handle:
count = 1
for letter in line:
if letter in vowels:
Vcount = 1
elif letter in cons:
Ccount = 1
elif letter in num:
Ncount = 1
print("the file has", count, "lines.")
print("the file has", Vcount, "vowels.")
print("the file has", Ccount, "consonants.")
print("the file has", Ncount, "numerical characters.")
Кроме того, основная причина, по которой вы получаете 0 (вместо количества строк) внутри второго цикла, заключается в том, что при выполнении первого цикла он обновляет позицию смещения чтения с каждой итерацией, пока она не станет в конце. Поэтому, когда запускается второй цикл, он начинается с конца файла и ничего не может прочитать.
Комментарии:
1. если строка содержит два одинаковых символа, она учитывает только один из них.
2. @ShoaibMirzaei Нет, это не так. с чего бы это? второй цикл для каждого символа в отдельном
Ответ №2:
вот еще один способ:
import os
d,_ = os.path.split(__file__)
ein = input("Please enter file name: ")
vowels = "aeoiu"
cons = "bcdfghjklmnpqrstvwvyz"
num = "1234567890"
Vcount = 0
Ccount = 0
Ncount = 0
with open(d "\" ein) as ein_handle:
lines = ein_handle.readlines()
for line in lines:
line = line.lower()
for v in vowels:
tmp = line
while v in tmp:
Vcount = 1
tmp = tmp[tmp.find(v) 1:]
for c in cons:
tmp = line
while c in tmp:
Ccount = 1
tmp = tmp[tmp.find(c) 1:]
for n in num:
tmp = line
while n in tmp:
Ncount = 1
tmp = tmp[tmp.find(n) 1:]
print("the file has",len(lines),"lines.")
print("the file has",Vcount,"vowels.")
print("the file has",Ccount,"consonants.")
print("the file has",Ncount,"numerical characters.")