Home > Enterprise >  If always true when checking strings
If always true when checking strings

Time:11-20

I'm developing a chatbot project for college, and in the following code block, the first if is always going as a true value, no matter what. I really need help and don't know what to do, cause this project is due on monday.

def registeredClient():
    print('Olá, bem-vindo a WE-RJ Telecom!')

    userInputString = str(input('O que você precisa?\nCaso queira contratar ou trocar de plano escreva “Quero contratar” ou “Quero trocar de plano”.\nCaso esteja com problemas de conexão, escreva "suporte".\nCaso queira seu boleto, digite "boleto":\n'))

    userInputString = userInputString.lower()

    if 'contratar' or 'trocar plano' or 'aumentar velocidade' or 'mudar plano' or 'velocidade' or 'plano' in userInputString:
        newPlanOption()
    elif 'suporte' or 'lenta' or 'internet lenta' or 'internet esta lenta' or 'problema' or 'velocidade' in userInputString:
        supportOption()
    elif 'boleto' or 'segunda via' or '2ª via' or 'fatura' in userInputString:
        billingOption()
    else:
        print('Não foi posível entender a sua mensagem, seu atendimento será encerrado.')
        return False

CodePudding user response:

I updated the conditions. In your case your conditions were checking if the strings themselves were truthly which is why your first case would result in true.

def registeredClient():
    print('Olá, bem-vindo a WE-RJ Telecom!')

    userInputString = str(input('O que você precisa?\nCaso queira contratar ou trocar de plano escreva “Quero contratar” ou “Quero trocar de plano”.\nCaso esteja com problemas de conexão, escreva "suporte".\nCaso queira seu boleto, digite "boleto":\n'))

    userInputString = userInputString.lower()


    if any(x in userInputString for x in ['contratar', 'trocar plano' , 'aumentar velocidade' , 'mudar plano' , 'velocidade' , 'plano']):
        print("Case A")
    elif any(x in userInputString for x in ['suporte', 'lenta' , 'internet lenta' , 'internet esta lenta' , 'problema' , 'velocidade']):
        print("Case B")
    elif any(x in userInputString for x in ['boleto' , 'segunda via' , '2ª via' , 'fatura']):
        print("Case C")
    else:
        print('Não foi posível entender a sua mensagem, seu atendimento será encerrado.')
        return False
        
registeredClient();

CodePudding user response:

The first if block is understood by python as the following if block :

(if 'contratar') or ('trocar plano') or ('aumentar velocidade') or ('mudar plano') or ('velocidade') or ('plano' in userInputString): 

which is always True as the strings are not vacant and thus truthy type.

What you need is this as the first if block :

if any(i in userInputString for i in ['contratar', 'trocar plano', 'aumentar velocidade', 'mudar plano', 'velocidade', 'plano']):

Similarly you need to change your elif statements too.

Try this :

def registeredClient():
    print('Olá, bem-vindo a WE-RJ Telecom!')

    userInputString = str(input('O que você precisa?\nCaso queira contratar ou trocar de plano escreva “Quero contratar” ou “Quero trocar de plano”.\nCaso esteja com problemas de conexão, escreva "suporte".\nCaso queira seu boleto, digite "boleto":\n'))

    userInputString = userInputString.lower()
    checkString = lambda l: any(i in userInputString for i in l)

    if checkString(['contratar', 'trocar plano', 'aumentar velocidade', 'mudar plano', 'velocidade',  'plano']):
        newPlanOption()
    elif checkString(['suporte', 'lenta', 'internet lenta', 'internet esta lenta', 'problema', 'velocidade']):
        supportOption()
    elif checkString(['boleto', 'segunda via', '2ª via', 'fatura']):
        billingOption()
    else:
        print('Não foi posível entender a sua mensagem, seu atendimento será encerrado.')
        return False
  • Related