List entry with sequential search

0

I'm trying to create a variable entry function in a list that only allows you to enter terms not already contained in the list. I'm having difficulty finding a logical solution to this, I can not use break to stop the loop. I'm not making indentation errors, I'm stuck in the loop. Any suggestions for a way to solve the problem?

    lista = []

    def preencheLista(lista,taml):
        for i in range(taml):
            duplicidade = True
            while duplicidade:
                c=float(input("Entre com o termo\n"))
                lista.append(c)
                for i in range(len(lista)):
                    if c == lista[i]:
                        duplicidade = True 
                    else:
                        duplicidade = False     
        if duplicidade:
            print ("Valor ja existente, digite um novo valor")
        else:
            lista.append(c) 

    print (lista)
#print ("Valor ja existente, digite um novo valor")

if __name__ == '__main__':
    preencheLista(lista, 10)
    
asked by anonymous 08.10.2017 / 20:36

2 answers

1

What about:

def preencheLista( lst, tam ):

    for i in range(tam):

        while True:

            c = float( input("Entre com o termo: ") )

            if c in lst:
                print ("Valor ja existente, digite um novo valor!")
                continue;

            lst.append(c)

            break;

lista = []
preencheLista( lista, 5 )
print(lista);

Testing:

Entre com o termo: 1.5
Entre com o termo: 2.8
Entre com o termo: 3.0
Entre com o termo: 1.44
Entre com o termo: 1.5
Valor ja existente, digite um novo valor!
Entre com o termo: 3
Valor ja existente, digite um novo valor!
Entre com o termo: 0.3
[1.5, 2.8, 3.0, 1.44, 0.3]
    
08.10.2017 / 21:00
0

I made using recursion, where it executes until the list has 10 values, I just did not treat the repeat message "Value already exists, enter a new value", if you want it to only put a status in the function signaling when to show the message :

lista = []

def preencheLista(lista, contador):
    if contador == 10:
        return

    valor = float(input("Digite um valor: "))

    if valor in lista:
        preencheLista(lista, contador)
    else:
        lista.append(valor)
        preencheLista(lista, contador + 1)

preencheLista(lista, 0)

print(lista)
    
08.10.2017 / 21:06