Кажется, я не могу заставить его находить средние согласные / гласные после того, как пользователь вводит его

Это код, который у меня есть. Эта программа должна запрашивать у пользователя слово и определять количество гласных / согласных в нем. После того, как пользователь закончит, программа должна дать ему среднее количество гласных / согласных. Некоторая часть начального кода отличается (отличается от V и C), потому что я пытался выяснить, какой из них будет работать.

#Okay, this is the updated version of the code where I combined @AshwiniChaudhary 's code and mine

Теперь я получаю IndexError: индекс кортежа вне допустимого диапазона

Я попытался найти его здесь и на нескольких других сайтах, но на самом деле не нашел ответа, и я не хотел задавать один и тот же вопрос дважды здесь

print("Hello!")
import sys
import re


def VOCO():
VOCO = input("Search for VOWELS or CONSONANTS: ")

if VOCO == "VOWELS":
    VOW = input("Please input word for VOWEL counting: ")
    re.findall(r'[aeiouAEIOU]', VOW)
    V = int(len(re.findall(r'[aeiouAEIOU]', VOW)))
    print(V)


elif VOCO == "CONSONANTS":
    CON = input("Please input word for CONSONANT counting: ")
    re.findall(r'[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]', CON)
    C = int(len(re.findall(r'[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]', CON)))
    print(C)

else:
    print("Please use either VOWELS or CONSONANTS in selection.")
from string import ascii_lowercase as al
def find_vo_cons2(strs,val):
    vowels="aeiou"
    consonants=set(al)-set(vowels) #set containing only consonants   
    le=float(len(strs))

    vowel_count=0
    consonant_count=0

    for x in strs:
        if x.lower() in vowels:
            vowel_count+=1
        elif x.lower() in consonants:
            consonant_count+=1
    if val in ("V","v"):
        return vowel_count/le
    elif val in ("C","c"):
        return consonant_count/le


def CNT(): True or False
CNT = input("Would you like to continue (YES/NO)? ")

if CNT() : "YES"
condition(True)
VOCO()

else:
        strs = (VOW or CON)
        print("The average of {0} count is {1}".format(find_vo_cons2(strs,VOCO)))
        sys.exit
VOCO()
while True:
    VOCO()

person Brandon Jones    schedule 14.04.2013    source источник


Ответы (1)


Думаю, это можно сделать и без regex:

from string import ascii_lowercase as al
def find_vo_cons(strs,val):
    vowels="aeiou"
    consonants=set(al)-set(vowels) #set containing only consonants   
    le=float(len(strs))

    vowel_count=0
    consonant_count=0

    for x in strs:
        if x.lower() in vowels:
            vowel_count+=1
        elif x.lower() in consonants:
            consonant_count+=1

    if val in ("V","v"):
        return vowel_count/le
    elif val in ("C","c"):
        return consonant_count/le

def main():
    VOCO = input("Search for VOWELS(v) or CONSONANTS(c): ")
    dic={"v":"Vowels","c":"Consonants"}
    strs=  input("Enter the string: ")
    print ("The average of {0} count is {1}".format(dic[VOCO.lower()],find_vo_cons(strs,VOCO)))

main()

вывод:

~$ python3 so.py
Search for VOWELS(v) or CONSONANTS(c): v
Enter the string: foObAr
The average of Vowels count is 0.5

~$ python3 so.py
Search for VOWELS(v) or CONSONANTS(c): c
Enter the string: qwertyuiop
The average of Consonants count is 0.6
person Ashwini Chaudhary    schedule 14.04.2013
comment
Это будет до моего def VOCO () или после? Я запутался в порядке вещей. - person Brandon Jones; 14.04.2013
comment
Спасибо. Если вы не возражаете, я исправлю свой код, используя некоторые из ваших. Я бы добавил +1, но у меня пока недостаточно репутации. - person Brandon Jones; 15.04.2013
comment
@BrandonJones С этим кодом вы можете делать все, что захотите. :) - person Ashwini Chaudhary; 15.04.2013
comment
Я попытался объединить оба наших кода, и мне это почти удалось, за исключением того, что я где-то напортачил с кортежем. Я не совсем уверен, как это исправить, поэтому будет приветствоваться дополнительная помощь (: - person Brandon Jones; 15.04.2013
comment
@BrandonJones, что CNT() == "NO" делает в этом else состоянии? И CNT == input("Would you like to continue (YES/NO)? ") также неверен, поскольку вы использовали == здесь. Кроме того, вы не возвращаете значения ни из одной из своих функций, поэтому CNT() == "YES" никогда не будет True. - person Ashwini Chaudhary; 15.04.2013
comment
Я просто помещаю CNT () == NO в условие else, чтобы завершить его. Полагаю, для этого нет никакой цели. Для 'CNT == input (Вы хотите продолжить (ДА / НЕТ)?)', Должен ли я использовать ':' вместо '=='? - person Brandon Jones; 15.04.2013
comment
@BrandonJones. Мы используем = для присвоения значений и == для сравнения, пожалуйста, ознакомьтесь с некоторыми базовыми руководствами по Python и сначала изучите такие вещи. - person Ashwini Chaudhary; 15.04.2013