Home > Software design >  if a vowel is found, it takes the position where it is and the sum if the position is even or odd
if a vowel is found, it takes the position where it is and the sum if the position is even or odd

Time:10-24

if a vowel is found, it takes the position where it is and the sum if the position is even or odd

def conteo_vocales(cadena: str)->int:

numero_vocales =  0 

longitud = len(cadena)

i = 0 

pares = 0

impares = 0 
while i<longitud :
    
    if cadena[i] == "a" or cadena[i] == "e"or cadena[i] == "i"or cadena[i] == "o"or cadena[i] == "u":
        
        numero_vocales  = 1 
        if i %2 == 0 :
            pares  =1
        else:
            impares  =1
    i  = 1 


if impares > pares:
    rta = 1
elif pares < impares:
    rta = 2 
elif pares == impares:
    rta = 0 
return rta

h = conteo_vocales("hormigas") print(h)

then the console bounces "local variable 'rta' referenced before assignment"

CodePudding user response:

The local variable referenced before assignment occurs when some variable is referenced before assignment within a function’s body. If you don't want it ot be local you must declare it as global. you also have an issue in the comparision operator. if and else if are the same

rta =0
def conteo_vocales(cadena):
    global rta
    numero_vocales =  0
    
    longitud = len(cadena)
    
    i = 0 
    
    pares = 0
    
    impares = 0 
    while i<longitud :
        
        if cadena[i] == "a" or cadena[i] == "e"or cadena[i] == "i"or cadena[i] == "o"or cadena[i] == "u":
            
            numero_vocales  = 1 
            if i %2 == 0 :
                pares  =1
            else:
                impares  =1
        i  = 1 
    
    if impares > pares:
        rta = 1
    elif impares < pares:
        rta = 2 
    elif pares == impares:
        rta = 0 
    return rta

    
h = conteo_vocales("hormigas")
print(h)

CodePudding user response:

I think the indentation of your code in the question is probably wrong. Also, this could be simplified:

def conteo_vocales(s):
    oe = [0,0]
    for i, c in enumerate(s):
        if c in 'aeiou':
            oe[i%2]  = 1
    return 1 if oe[1] > oe[0] else 2 if oe[0] > oe[1] else 0

print(conteo_vocales("hormigas"))

Note: I have ignored numero_vocales because it doesn't appear to be used

  • Related