Слова без гласных [дубликаты]

В этом коде в основном я пытаюсь посчитать те слова в этом предложении, в которых нет гласной, но есть что-то (а может и все) что я делаю не так, вот код

par="zyz how are you"
count=0

for i in range(len(par)):
    if par[i]==" ":
        if par[i]!="a" or par[i]!="e" or par[i]!="i" or par[i]!="o" or par[i]!="u":
            count+=1
        
print("total words without vowel -> ",count)

person Bilal Razi    schedule 20.03.2021    source источник
comment
Это фундаментальная логическая ошибка, которую вы можете понять, а) посмотрев на связанный дубликат; или б) поиск законов де Моргана в Википедии или с помощью поисковой системы; или c) тщательно проследив логику вручную, чтобы увидеть, что происходит, когда par[i] является гласной.   -  person Karl Knechtel    schedule 20.03.2021
comment
Но это по-прежнему учитывает только негласные символы; единственный способ, которым ваш код будет заботиться о словах, это если в вашем коде есть что-то, что пытается различить слова.   -  person Karl Knechtel    schedule 20.03.2021
comment
Я хотел связать вас с дубликатом того, как мне разбить строку на слова?, но все, кого я могу найти, спрашивают об этом, задают более сложный вопрос.   -  person Karl Knechtel    schedule 20.03.2021


Ответы (2)


Когда вы используете len(par), он возвращает количество букв в строке. Вместо этого вам нужно разделить строку слово за словом, используя par = "zyz how are you".split(" ")

После разделения вы получите номинал в виде списка, содержащего ["zyz","how","are","you"]

Теперь вы можете просто проверить, есть ли в слове гласная, вместо того, чтобы перебирать каждую букву.

par = "zyz how are you".split(" ")
count = 0

for i in range(len(par)):
    if "a" in par[i] or "e" in par[i] or "i" in par[i] or "o" in par[i] or "u" in par[i]:
        pass
    else:
        count += 1

print("total words without vowel ->",count)
person Dav_Did Hu    schedule 20.03.2021
comment
par = zyz как дела.split() О! так что в основном в этой функции разделения она разбивает каждую букву, прежде чем найдет место, верно? - person Bilal Razi; 20.03.2021
comment
Это похоже на деление строки на пробелы, конечно, вы можете использовать его и для разделения на многие другие символы. - person Dav_Did Hu; 20.03.2021

Это код, который я сделал для вас, может быть, не самый лучший, но работает и прокомментирован, поэтому его легко понять!

par = "zyz how are you" # Define string variable with your sentence

def countwordsnowovels(string): # Define function that does it with argument called string
    count = 0 # Set the count to 0
    wordlist = string.split(" ") # Split the string into a list with every word as an entry
    for word in wordlist: # for every entry in the list "wordlist"
        if "a" not in word: # Check if there is no letter a in the word
            if "e" not in word: # Check if there is no letter e in the word
                if "i" not in word: # Check if there is no letter i in the word
                    if "o" not in word: # Check if there is no letter o in the word
                        if "u" not in word: # Check if there is no letter u in the word
                            count += 1 # If no wovels found, sum 1 to the count

        # Then for every word repeat this

    return count # After the scan (loop is complete) return the integer count to the function so we can process it later

count = countwordsnowovels(par) # Execute the function passing the argument par variable as string
print(count) # Now print the result

# Note that the count variable in the function is local only, so it will not "interfere" with the one outside the loop!
person Yaros    schedule 20.03.2021
comment
гласные не гласные - person Dav_Did Hu; 20.03.2021