3
votes

Pourquoi mon programme est-il perturbé par des commentaires?

Notre tâche à l'école est d'ajouter un exemple de test du programme en bas du code avec:

from math import sqrt
import sys

a=float(sys.argv[1])
b=float(sys.argv[2])
c=float(sys.argv[3])
d=(b**2)-(4*a*c)
x1=((-b+sqrt(d))/(2*a))
x2=((-b-sqrt(d))/(2*a))

print(f'The quadratic formula with used values gives two roots {x1:.1f} and {x2:.1f}')

#example
"""
#Fra command prompt:
#C:\Users\David>C:\Users\David\Desktop\IN1900\uke38\quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""

mais quand je le fais, j'obtiens une erreur. Je ne l'ai jamais sur aucun autre code, seulement sur celui-ci?:

C:\Users\David>C:\Users\David\Desktop\IN1900\uke38\qerror.py 1
  File "C:\Users\David\Desktop\IN1900\uke38\qerror.py", line 22
    """
    ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 24-25: truncated \UXXXXXXXX escape

C:\Users\David>

Mon code est le suivant:

#example

"""

<insert example of you running the code>

"""


1 commentaires

Les chaînes entre guillemets triples ne sont pas des commentaires, mais des chaînes multilignes. En Python, les commentaires commencent par # .


3 Réponses :


1
votes

Utilisez des doubles barres obliques noires sur la ligne avec le chemin, comme ça:

"""
"""
#Fra command prompt:
#C:\\Users\\David>C:\\Users\\David\\Desktop\\IN1900\\uke38\\quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""
"""


1 commentaires

vous pouvez également mettre r devant la chaîne pour la lire comme une chaîne raw , pas de caractères spéciaux



1
votes

Le \U ou \u dans \Users et \uke38 est interprété comme un échappement Unicode. Doublez la barre oblique inverse.

...
print(f'The quadratic formula with used values gives two roots {x1:.1f} and {x2:.1f}')

#example
#Fra command prompt:
#C:\Users\David>C:\Users\David\Desktop\IN1900\uke38\quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker

Vous pouvez également noter que vous avez des commentaires dans les lignes commençant par # . Ainsi, les guillemets triples ne sont pas nécessaires.

#C:\\Users\David>C:\\Users\David\Desktop\IN1900\\uke38\quadratic_roots_cml.py 1 0 -1


0 commentaires

2
votes

Une partie de votre chaîne littérale est interprétée comme un caractère unicode échappé. Ces séquences d'échappement commencent par \U La solution la plus simple consiste à placer un r devant le triplet d'ouverture de guillemets doubles. Cela empêche toute sorte de traitement d'échappement du texte:

r"""
#Fra command prompt:
#C:\Users\David>C:\Users\David\Desktop\IN1900\uke38\quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""

C'est beaucoup plus facile que d'ajouter un tas de barres obliques supplémentaires et ne change pas non plus la lisibilité du texte.

Voici ce que la documentation Python 3 dit à propos des "chaînes brutes":

Les littéraux de chaîne et d'octets peuvent éventuellement être précédés d'une lettre «r» ou «R»; ces chaînes sont appelées chaînes brutes et traitent les contre-obliques comme des caractères littéraux. Par conséquent, dans les chaînes littérales, les échappements '\ U' et '\ u' dans les chaînes brutes ne sont pas traités spécialement. Étant donné que les littéraux Unicode bruts de Python 2.x se comportent différemment de ceux de Python 3.x, la syntaxe «ur» n'est pas prise en charge.


3 commentaires

Que fait mettre un r devant une docstring?


Il désactive une grande partie du traitement d'échappement pour le littéral de chaîne qui suit. Voir ce qui suit: docs.python.org/2.0/ref/strings.html - Notez que le fait qu'il s'agisse d'une doc string n'a rien à voir avec ce qui se passe. Mettre r devant tout autre littéral de chaîne a le même effet.


Je viens de réaliser que le lien que j'ai fourni ci-dessus est vraiment ancien. Voici où vous pouvez lire sur r dans la documentation Python 3: docs.python.org/3/reference/lexical_analysis.html - voir ci-dessus, où j'ai ajouté la partie pertinente de cette page à ma réponse.