これが私のpythonコードです。誰かが私にそれのどこが悪いのかを見せてもらえますか。
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
そして、ここで何が起こります:
>>>
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
>>>
input
name__の代わりにraw_input
を使用します:)
input
name__を使用する場合、入力したデータはPython Expressionとして解釈されます。これは、gawdがターゲット変数のオブジェクトのタイプを知っていることを意味します。生成される可能性のある広範な例外のしたがって、ではなく、input
name__を使用する必要があります。一時テスト用に何かを入れている場合は、Python式について少し知っている人だけが使用します。
raw_input
は常に文字列を返します。これは、常に入力するものだからです...しかし、それを簡単に希望する特定の型に変換し、発生する可能性のある特定の例外をキャッチできます。その説明があれば、どちらを使用すべきかを知るのは簡単です。
注:これはPython 2のみです。Python 3の場合、raw_input()
はinput()
になり、Python 2 input()
は削除されました。
インデント!最初。これでSyntaxError
が処理されます。
それとは別に、プログラムには他にもいくつかの問題があります。
入力として文字列を受け入れる場合は、raw_input
を使用します。 input
はPython式のみを取り、それらに対してeval
を実行します。
0°
のような特定の8ビット文字をスクリプトで使用しています。一般的にコーディングCookieと呼ばれる# -*- coding:latin-1 -*-
行を使用して、スクリプトの上部でエンコードを定義する必要がある場合があります。
また、str比較を行いながら、文字列を正規化して比較します。 (lower()itを使用している人)これは、ユーザー入力にほとんど柔軟性を与えないようにします。
Pythonチュートリアルを読むことも役立つと思います。 :)
サンプルコード
#-*- coding: latin1 -*-
while 1:
date=raw_input("Example: March 21 | What is the date? ")
if date.lower() == "march 21":
....
@simonの答えはPython 2で最も役に立ちますが、Python 3にはraw_input
は存在しません。3. Python 2およびPython 3:
最初に、pip install future:
$ pip install future
2番目:future.builtinsから入力をインポートする
# my_file.py
from future.builtins import input
str_value = input('Type something in: ')
上記の特定の例の場合:
# example.py
from future.builtins import input
my_date = input("Example: March 21 | What is the date? ")
行に閉じ括弧がないため、このエラーが発生しました。
私は、スクリプトの最後に「invalid syntax (<string>, line ...)?
」という行で問題が発生し始めました。
その行を削除すると、EOFメッセージが表示されました。
この質問に関係なく、一般的に答えようとしていますが、このエラーは一般的に構文を半分に分割し、残りの半分を忘れたときに発生します。私の場合のように:
try :
....
pythonは
except Exception as e:
....
しかし、EOF(ファイルの終わり)が発生したため、エラーが発生しました。コードで不完全な構文を見つけることができるかどうかを確認してください。
次のコードを使用して、Python 2および3の互換性を取得しています
if sys.version_info < (3, 0):
input = raw_input
最初のifステートメントの後、「if」と入力する代わりに「Elif」と入力すると、動作するはずです。
例.
` 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 `
私は同じことに出くわし、問題が何であるかを見つけました。メソッド入力を使用する場合、入力する応答は二重引用符で囲む必要があります。あなたの行のようにdate=input("Example: March 21 | What is the date? ")
コンソール「12/12/2015」でプロンプトが表示されたら入力する必要があります。前後の"
のことに注意してください。この方法では、それを文字列として受け取り、期待どおりに処理します。これがこのinput
メソッドの制限かどうかはわかりませんが、このように機能します。
それが役に立てば幸い
試すことができるのは、通常のinput
コマンドを使用して、pythonの通常のコードを記述することです。ただし、コツはプログラムの最初にコマンドinput=raw_input
を追加することです。
これで、Python/IDLEまたはTerminalのどちらで実行しているかに応じて、無効(または有効)にするだけです。これを行うには、必要に応じて単に「#」を追加します。
Python/IDLEで使用するためにオフに切り替えられました
#input=raw_input
そしてもちろん、ターミナルで使用するためにスイッチを入れました。
input=raw_input
常に機能するかどうかはわかりませんが、単純なプログラムまたはスクリプトの可能な解決策です。