Le cas qui compare les chaînes passe toujours. Pourquoi?

voix
0
import re

def cleanseCommand(x):
    return ''.join(re.split(r'[.;!/?,]', x))



while(True):

    temp = raw_input(Give command-).split()

    for i in range(0,len(temp)):
        temp[i]= cleanseCommand(temp[i]) 

    if(''.join(temp)=='exit'):
        sys.exit()
    if(temp[0]==generate or 'test' or 'randomize' or 'randomise' or 'go'):
        print 'bunnies' 

Python 2.7.5

Créé 27/10/2013 à 14:00
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

Cette expression ne fait pas ce que vous voulez, car il est toujours vrai - si temp[0]évalue à Falsealors sa valeur est une chaîne 'test', qui est Truedans le contexte booléen:

if(temp[0]=="generate" or 'test' or 'randomize' or 'randomise' or 'go'):

Qu'est-ce que vous vouliez dire apparemment quelque chose comme:

if(temp[0]=="generate" or temp[0]=='test' or temp[0]=='randomize' or temp[0]=='randomise' or temp[0]=='go'):

Vous pouvez également remplacer ce qui précède avec un peu plus agréable:

if(temp[0] in ("generate",'test', 'randomize', 'randomise', 'go')):
Créé 27/10/2013 à 14:02
source utilisateur

voix
0

Essayez de changer à cette ...

if (temp[0]=='generate') or (temp[0] == 'test') or (temp[0] == 'randomize') or (temp[0] == 'randomise') or (temp[0] == 'go'):
    print 'bunnies' 
Créé 27/10/2013 à 14:04
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more