2016-11-15 1 views
0

Je travaille avec le code qui lirait l'entrée des chaînes et calculerait si les parenthèses (en utilisant des caractères arbitraires pour ouvrir et fermer) sont équilibrées. Le but est d'inviter l'utilisateur à entrer le nombre de parenthèses sous forme de chaînes, de sorte que le compilateur calcule leur quantité et leur type (par exemple, si c'est '(' ou ')').Traitement de chaîne - Déterminer si les parenthèses sont équilibrées

J'ai été conseils donnés:

Hint1: introduce two counters initialized to zero in the beginning. Then explore the symbols of the string in a loop. For the current symbol increment the left counter by 1 if the symbol is '(' , otherwise, increment by 1 the `right' counter

Hint2: call a string math-like if the brackets occur like in a mathematical formula. For instance, the strings '()' , '(())()' , '(()())' are balanced, while the strings '))(())((' and '())(()' are not.

Mon code ressemble maintenant à ceci:

lefts =str(input("Please enter a left parenthesis: ")) 
rights =str(input("Please enter a right parenthesis: ")) 

#token parsing requires paying attention to the order of the parenthesis 
def ptest(test): #testing with counters 
    lefts = 0 
    rights = 0 
    balance = 0 #additional counter that will help us determine the amount of strings and their relation to each other 
    for c in test: 
     if c == '(': 
      balance += 1 
      lefts += 1 
     elif c == ')': 
      balance -= 1 
      rights += 1 
    print ('testing "'+test+'"') 
    print ('lefts='+str(lefts)+' rights='+str(rights)) 
    #if there will b a balance between the strings/parenthesis, they will possibly be balanced 
    if balance == 0: print 'same number of open/close, possibly balanced' 
    else: print 'different number of open/close, definitely not balanced' 

ptest(test1) 
ptest(test2) 

Comment pourrais-je modifier ceci afin que cela fonctionnerait?

+0

désolé j'ai modifié ma question maintenant –

+0

duplication possible de [input() erreur - NameError: nom '...' n'est pas défini] (http://stackoverflow.com/questions/21122540/input-error-nameerror -name-is-not-defined) –

+0

Lorsque vous entrez, donnez-le comme '(' – 0aslam0

Répondre

0

Mais je pense que vous avez partiellement mal compris la tâche.

Il peut y avoir beaucoup de crochets, mais pas plus «) » que « (» (et à la fin le nombre des deux types doivent être égaux) Et je pense, que l'entrée se compose non seulement des supports

donc vous devez construire une boucle (comme vous l'avez fait) et

    essai
  1. , si le caractère est un support ou non
  2. si un support, afin d'augmenter le compteur correspondant (vous pouvez même avoir un compteur, mais il est plus facile de comprendre avec deux d'entre eux
  3. Vérifiez si le compteur de fermeture est plus petit que l'ouverture (sinon, vous pourriez casser la boucle car elle n'est pas mathématique)
  4. Après la fin de la boucle, vous devez vérifier s'il y a eu une erreur dans la boucle ou les deux compteurs ne sont pas égaux. Dans les deux cas, la chaîne n'est pas "mathématique", sinon elle l'est.

Je pourrais le faire dans votre code, mais je pense que vous devriez faire CE seul. La plupart de ces choses que vous avez déjà faites, mais il semble que vous ne compreniez pas complètement ce que vous avez fait et devez faire.