Почему я получаю только вывод «0»?

#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.")