Voici mon code python. Quelqu'un pourrait-il me montrer ce qui ne va pas?.
while 1:
date=input("Example: March 21 | What is the date? ")
if date=="June 21":
sd="23.5° North Latitude"
if date=="March 21" | date=="September 21":
sd="0° Latitude"
if date=="December 21":
sd="23.5° South Latitude"
if sd:
print sd
Et voici ce qui se passe:
>>>
Example: March 21 | What is the date?
Traceback (most recent call last):
File "C:\Users\Daniel\Desktop\Solar Declination Calculater.py", line 2, in <module>
date=input("Example: March 21 | What is the date? ")
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
>>>
Utilisez raw_input
au lieu de input
:)
Si vous utilisez
input
, alors les données que vous avez type is est interprété comme un Python Expression qui signifie que vous se retrouver avec gawd sait quel type de objet dans votre variable cible, et un diable d'un large éventail d'exceptions cela peut être généré. Donc tu devrais NOT utiliseinput
à moins que vous ne mettiez quelque chose pour les tests temporaires, à être utilisé que par quelqu'un qui connaît un peu sur les expressions Python.
raw_input
renvoie toujours une chaîne parce que, heck, c'est ce que vous avez toujours tapez ... mais alors vous pouvez facilement convertissez-le au type spécifique que vous avez vouloir, et attraper le spécifique exceptions qui peuvent se produire. Espérons que avec cette explication, c'est un pas question de savoir lequel vous devriez utilisation.
Remarque: ceci ne concerne que Python 2. Pour Python 3, raw_input()
est devenu un input()
et le python 2 input()
a été supprimé.
Indente-le! premier. Cela prendrait soin de votre SyntaxError
.
En dehors de cela, il y a quelques autres problèmes dans votre programme.
Utilisez raw_input
lorsque vous souhaitez accepter une chaîne en tant qu'entrée. input
prend uniquement les expressions Python et eval
sur elles.
Vous utilisez certains caractères de 8 bits dans votre script comme 0°
. Vous devrez peut-être définir le codage en haut de votre script à l'aide de la ligne # -*- coding:latin-1 -*-
, couramment appelée coding-cookie.
Aussi, lors de la comparaison str, normalisez les chaînes et comparez-les. (personnes utilisant lower () it) Cela aide à donner peu de souplesse à la saisie de l'utilisateur.
Je pense également que la lecture du didacticiel Python pourrait vous être utile. :)
Exemple de code
#-*- coding: latin1 -*-
while 1:
date=raw_input("Example: March 21 | What is the date? ")
if date.lower() == "march 21":
....
Alors que la réponse de @ simon est très utile dans Python 2, raw_input
n'est pas présent dans Python 3. Je vous suggère de procéder comme suit pour vous assurer que votre code fonctionne aussi bien dans Python 2 que dans Python 3:
Premièrement, pip install future:
$ pip install future
Deuxièmement: importation de future.builtins
# my_file.py
from future.builtins import input
str_value = input('Type something in: ')
Et pour l'exemple spécifique mentionné ci-dessus:
# example.py
from future.builtins import input
my_date = input("Example: March 21 | What is the date? ")
J'essaie de répondre en général, sans rapport avec cette question, cette erreur se produit généralement lorsque vous cassez une syntaxe en deux et oubliez l'autre moitié. Comme dans mon cas c'était:
try :
....
depuis que python cherchait un
except Exception as e:
....
mais il a rencontré un EOF (fin de fichier), d’où l’erreur. Voyez si vous pouvez trouver une syntaxe incomplète dans votre code.
J'utilise le code suivant pour obtenir la compatibilité Python 2 et 3
if sys.version_info < (3, 0):
input = raw_input
J'ai eu cette erreur, à cause d'une parenthèse fermante manquante sur une ligne.
J'ai commencé par avoir un problème avec une ligne disant: invalid syntax (<string>, line ...)?
À la fin de mon script.
J'ai supprimé cette ligne, puis j'ai reçu le message EOF.
Après la première instruction if au lieu de taper "if", tapez "Elif" et cela devrait fonctionner.
Ex.
` while 1:
date=input("Example: March 21 | What is the date? ")
if date=="June 21":
sd="23.5° North Latitude
Elif date=="March 21" | date=="September 21":
sd="0° Latitude"
Elif date=="December 21":
sd="23.5° South Latitude"
Elif sd:
print sd `
je suis tombé sur la même chose et j'ai compris quel est le problème. Lorsque nous utilisons la méthode input, la réponse à taper doit être entre guillemets doubles. Comme dans votre ligne date=input("Example: March 21 | What is the date? ")
Vous devez taper à l'invite de la console "12/12/2015" - notez le "
avant et après. De cette façon, cela prendra une chaîne et le traitera comme prévu. Je ne sais pas s'il s'agit d'une limitation de cette méthode input
- mais cela fonctionne de cette façon.
J'espère que ça aide
Ce que vous pouvez essayer, c’est d’écrire votre code normalement pour python en utilisant la commande normale input
Cependant, l'astuce consiste à ajouter au début de votre programme la commande input=raw_input
.
Il ne vous reste plus qu'à désactiver (ou activer) selon que vous utilisez Python/IDLE ou Terminal. Vous faites cela en ajoutant simplement '#' si nécessaire.
Désactivé pour une utilisation en Python/IDLE
#input=raw_input
Et bien sûr allumé pour une utilisation dans un terminal.
input=raw_input
Je ne sais pas si cela fonctionnera toujours, mais c'est une solution possible pour des programmes simples ou des scripts.