[Résolu] Problème de syntaxe?

Problème de syntaxe? [Résolu] - Python - Programmation

Marsh Posté le 16-03-2008 à 16:45:13    

Bonjour :)
 
J'apprends à programmer en python depuis quelques jours avec ledocument "Gérard Swinnen : Apprendre à programmer avec Python". J'ensuis au chapitre 6, sur les fonctions prédéfinies. Je suis sous Ubuntu7.10.
 
Seulement j'ai quelques soucis :
 
1)Soit un script qui fonctionne dans un terminal, par exemple :
 
ch = "Bonjour"
lc = len(ch)
nv = ""
i = lc -1
while i >= 0:
    nv = nv + ch[i]
    i = i-1
    print nv
 
On reprend le même script, sauf qu'à la dernière ligne, on met le "print" au début :
 
ch = "Bonjour"
lc = len(ch)
nv = ""
i = lc -1
while i >= 0:
    nv = nv + ch[i]
    i = i-1
print nv
 
Si, dans le terminal, j'essaye de lancer le script, j'obtiens l'erreur suivante :
 
File "<stdin>", line 4
    print nv
        ^
SyntaxError: invalid syntax
 
Où est le problème? Je bloque et c'est gênant. Pourtant, même dans la "leçon", ils mettent le "print" sans décalage, comme ici :
 
prenom = input('Entrez votre prénom (entre guillemets) : ' )
print 'Bonjour,', prenom
 
Ce script ne marche pas chez moi, j'obtiens la même erreur :(
 
Je précise que pour éxecuter un programme, j'ouvre un terminal et tape "python", colle le script et tape "entrée".
 
Merci beaucoup à tous ceux qui me répondront ;)


Message édité par koiler le 17-03-2008 à 13:29:16

---------------
"L'utopie d'aujourd'hui est la réalité de demain" Hugo     Mon Feed-back
Reply

Marsh Posté le 16-03-2008 à 16:45:13   

Reply

Marsh Posté le 16-03-2008 à 19:36:49    

Dans le premier cas, note:

Code :
  1. >>> ch = "Bonjour"
  2. >>> lc = len(ch)
  3. >>> nv = ""
  4. >>> i = lc -1
  5. >>> while i >= 0:
  6. ...     nv = nv + ch[i]
  7. ...     i = i-1
  8. ... print nv
  9.   File "<stdin>", line 4
  10.     print nv
  11.         ^
  12. SyntaxError: invalid syntax


Regarde les "..." avant ton print, il considère qu'il est toujours dans le while, et ne comprends pas pourquoi il n'y a pas de tabulation avant ...
 
Voilà la solution:

Code :
  1. >>> ch = "Bonjour"
  2. >>> lc = len(ch)
  3. >>> nv = ""
  4. >>> i = lc-1
  5. >>> print nv
  6. >>> while i >=  0:
  7. ...     nv = nv+ch[i]
  8. ...     i = i-1
  9. ...
  10. >>> print nv
  11. ruojnoB


Tout simplement, quand tu veux sortir de ton while, tu valides avec une ligne vide ...
 
Dans le deuxième cas, je n'ai pas d'erreur. A moins que tu ne renseignes pas le prénom avant de faire le print et que tu mettes ton print en réponse à la demande du prénom ?


---------------
Debian Addict - Vista Victim .. - Etudiant Ingénieur [Le Pas-Blog - Relations Ecrites]
Reply

Marsh Posté le 17-03-2008 à 13:28:58    

Citation :

Tout simplement, quand tu veux sortir de ton while, tu valides avec une ligne vide ...


 
Merci beaucoup, c'est ce que je n'arrivais pas à faire, ça marche maintenant :)
 
Pour le deuxième problème, ça fonctionne, c'est moi qui me plantait dans le terminal.
 
C'est donc résolu, merci ;)


---------------
"L'utopie d'aujourd'hui est la réalité de demain" Hugo     Mon Feed-back
Reply

Marsh Posté le 17-03-2008 à 14:52:44    

De rien :)


---------------
Debian Addict - Vista Victim .. - Etudiant Ingénieur [Le Pas-Blog - Relations Ecrites]
Reply

Marsh Posté le 07-07-2015 à 15:39:28    

Bonjour à tous,
 
Je suis un novice en programmation, et un ami m'a donné ce script:
#!/usr/bin/env python2.7.6
import argparse
 
parser = argparse.ArgumentParser(description='Process the JSpecies output file to MEGA.')
parser.add_argument(dest='JSfile', metavar='', help='JSpecies file', type=str)
args = parser.parse_args()
 
M=[]
 
with open(args.JSfile, 'r') as JSinput:
    for line in JSinput:
        line = line.split()
        M.append(line)
 
analyseType = str(M[0][0])
title = '!Title '+analyseType+' results from '+args.JSfile+';'
 
if analyseType == 'ANIm':
    description = '!Description ANIm is the Average Nucleotide Identity using MUMmer algorithm calculated by the JSpecies software;'
elif analyseType == 'ANIb':
    description = '!Description ANIb is the Average Nucleotide Identity using BLAST algorithm calculated by the JSpecies software;'
elif analyseType == 'Tetra':
    description = '!Description Tetra is the Tetranucleotide Signature Frequency Correlation Coefficient calculated by the JSpecies software;'
else:
    description = ''
 
format = '!Format DataType=Distance DataFormat=LowerLeft NTaxa='+str(len(M[1]))+';'
 
 
print('#mega', title, description, format, sep='\n')
print()
 
for i in M[1]:
    print('#', i, sep='')
print()
for i in M[3:]:
    stop = i.index('---')
    for j in range(len(i[:stop-1])):
        if analyseType != 'Tetra':
            i[j+1] = i[j+1].replace('NaN','50')
            i[j+1] = '{0:f}'.format(100-float(i[j+1]))
        else:
            i[j+1] = i[j+1].replace('NaN','50')
            i[j+1] = '{0:f}'.format(1-float(i[j+1]))
    print(' '.join(i[1:stop]))
 
 
Cependant à chaque fois je reçois un message d'erreur en exécutant la commande python ./jspecies2mega.py :
File "./jspecies2mega.py", line 30
 
    print('mega', title, description, format, sep='\n')
 
                                                             ^
 
Tout aide serait le bienvenue :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed