String comparison gone wrong - Python

Asked

Viewed 105 times

2

I have this function that checks if the code I typed is in the code list, but even though the code is in the list it does not enter if and returns false. I can’t understand why it doesn’t work.

Follows the code:

def procurando(escolha, codigos, produtos, precos):
    print(codigos)
    verdade = False
    if escolha == 1:
            codigo = int(input("Código do produto: "))
            for i in codigos:
                    print("entrou no for")
                    print(codigo)
                    print(i)
                    if codigo == i:
                            print("entrou no if?")
                            verdade = True
                            print("Produto: {}                        Preço: {}".format(produtos[i], precos[i]))
                            break;

    elif escolha == 2:
            nome = input("Nome do produto: ")
            for i, v in enumerate(produtos):
                    print(produtos[i])
                    if v == nome:
                            print("Foi encontrado 1 resultado.")
                            print("Produto: {}                        Preço: {}".format(produtos[i], precos[i]))
                            verdade = True
                            break;
    print(verdade)
    return verdade
  • 1

    And how did you execute the function? Can generate a [mcve]?

1 answer

3


Your code is correct, the only thing that is wrong is to search for the code. The correct thing would be to do in the same way as you did to search for the product name.

Remembering how you are converting the code input to a number codigo = int(input("Código do produto: ")), if code list values are strings, eg codigos = ["10", "20", "30"], the comparison will always be false.

10 == 10 > True
"10" == 10 > False      #tipos diferentes
"10" == "10" > True
def procurando(escolha, codigos, produtos, precos):
    print(codigos)
    verdade = False
    if escolha == 1:
            codigo = int(input("Código do produto: "))
            for i, v in enumerate(codigos):
                    print("entrou no for")
                    print(codigo)
                    print(v)
                    if codigo == v:
                            print("entrou no if?")
                            verdade = True
                            print("Produto: {}                        Preço: {}".format(produtos[i], precos[i]))
                            break;

    elif escolha == 2:
            nome = input("Nome do produto: ")
            for i, v in enumerate(produtos):
                    print(produtos[i])
                    if v == nome:
                            print("Foi encontrado 1 resultado.")
                            print("Produto: {}                        Preço: {}".format(produtos[i], precos[i]))
                            verdade = True
                            break;
    print(verdade)
    return verdade
  • I updated the code to look like this there, but it still does not enter the if.. the code list comes from a txt file, the n can disturb the comparison?

  • It is possible, it depends on how you are reading the file.

  • Aaaah, I converted the value from "v" to int, then it worked

Browser other questions tagged

You are not signed in. Login or sign up in order to post.