• 締切済み

pythonの編集仕様のいろいろ

pythonのプログラミングを少し始めているのですが、以下のような問題に直面しました。一番最初にhello world! を表示するものです。 hello.pyを作ってpython hello.py とすると実行するようです。 hello.pyの内容ですが、あるサイト(以下の画像)では、 print "Hello, Wordl!" とありますが、私の環境では動かず、さらにサイトを検索して、 print ( "Hello, Wordl!" ) が正しいとのことで、こちらは問題なく動作しました。 また、このprintコマンドですが、編集画面で左詰めでないとダメで、コマンドの前の空白(インデント)があったら正しく動作しないとのことです。 このようなささいな違い、またプログラム編集上の作法の問題とかを見ると、この言語の習得は難しいように感じてしまいます。アルゴリズムの完全性とか、文法上の問題が完全にクリアになってもなぜが動作しない、という問題に直面しそうなのですが。自分の知らない何かのしきたりに違反しているという状態で、しかもそれが本質的でないように見える言語仕様(先のインデントがダメという問題)というのであれば、後からいろいろ出てきそうなのですが。例えば、”コマンドは第一文字が大文字でなければならない”とかです。数百、数千行のコードを書いたりすると、間違いの可能性のあるところが目に見えないところにいっぱいという感じがするのですが。バグフィックスというのは絶対に絶対に間違いない、と断言してそれでいてうっかりミスが見つかるわけです。”間違っているかもしれないな”じゃバグフィックスできません。 それでいて割と巷間ではpython人気という感じがしているのですが。 pythonのどこがいい、ということなのでしょうか。私が考えている困難を補う効用があるのでしょうか。 私の環境はanaconda 3.5です。バージョン毎にかなり違うのでしょうか。

  • Python
  • 回答数1
  • ありがとう数1

みんなの回答

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

printについてはバージョンの差によものです https://postd.cc/the-key-differences-between-python-2-7-x-and-python-3-x-with-examples/ 言語規格のバージョンアップは有用で広く使われている言語ではよくあることで、例えばC言語のK&RとC11、Fortran66とFortran 2008などは、ほとんど別言語のような様相を呈しています。 インデントに関しては >本質的でないように見える言語仕様(先のインデントがダメという問題) というようなことではなくPython言語の本質部分(設計思想)と関わる部分です。 http://bugrammer.g.hatena.ne.jp/nisemono_san/20111203/1322839032 要は、インデントはプログラムの構造理解に有用だが、誤ったインデントのソースは見つけにくいバグを誘発する。それならいっそのことインデントを言語仕様に取り込んでしまえばいい、という設計思想です。

skmsk1941093
質問者

お礼

回答ありがとうございます。 解説サイトではどこかに対応バージョンを明示しているとは思いますが、拾い読みなどしていると分からない場合も多いと思いました。 インデントについては実施と関係なく、プログラムスタイルという美意識に訴えるような説明が従来の言語に対してされていたように思います。また、インデントしない方が見やすい場合もあると思うのですが。 例えば、 for i in range(0,2):   for j in range(0,2): とかよりも、 for i in range(0,2): for j in range(0,2): の方は縦方向に同じ属性が並ぶので見やすいし間違いも見出しやすいと思うのです。私は従来後者でやっていましたが、Pythonではエラーになります。

関連するQ&A

  • 初学者_Python_1

    Pythonについての質問です。 初歩も初歩、もしかしたらPythonというよりはコマンドプロンプトの質問かも知れませんが・・・ Python27のファイルをC直下におき、初歩の初歩「Hello,world」の.pyファイルをつくってみました。 そして走らせようとしたところ、むりでした。表示は画像の通りです。 パスが通ってないわけではないようです。 どういうことでしょう。 ちなみに、直接 print"hello,world" では hello,world と表示されます。

  • python スクリプトファイルの実行

    プログラム初心者です。 pythonを始めて間もないです。 環境はwindows XPでpython2.6を使っています. IDLEエディタでprint "hello" と記入し、test.pyを作成しました。 保存先はC:\Python26になります。環境変数もコマンドラインでpythonと入力すれば起動してくれるように設定しています。 そこで、コマンドラインにpython test.pyと入力すると、File"<stdin>",line 1 python test.py SyntaxError: invalid syntax と返ってきます。 色々調べてみたのですが解決できず質問させていただきました。 どうかよろしくお願いします

  • pythonのエラーについて教えて下さい。

    pythonの勉強をおこなっている超初心者です。 ネットでみた。以下のサンプルコードを実行しようとしました。 # -*- coding: utf-8 -*- print u'モジュールのロード' def test(): print u'関数:testを呼び出しました' if __name__ == '__main__': print 'python-izm' # print 'パイソンイズム' test() しかし、以下の様なエラーとなってしまいます。 File ”test02.py"、line 9 print ’python-izm'  ^ indentionError:expected an indented block ネット調べてみたとことpythonのインデントのエラーだとわかりました。 pythonはインデントで実行範囲を認識するので、 そこがうまく記述できていないであろうとは思うのですが、何回か試したのですが うまく動いてくれません。 どなたか御指南下さい。

  • pythonのシンタックスエラー

    python3のサンプルコードがあり、エラーが出ます。 内容はファイルを開いてちょっと変更して中身をプリントするというものです。 これは私が書いたのではなく、本の付録のサンプルなのですが、文法エラーとなります。何が原因かご指摘を頂ければと思いますが。文字コードの問題かなと思いましたが、UTF_8となっています。ファイルをdata.pyとして保存して、コマンドでpython data.pyを叩いたときに出てきます。(すみません、ここに張り付けた段階でインデントが見えなくなっているようですが、それは実際は問題ないです) file = "data.dat" limit = 2.0 with open(file, "r", encoding="utf_8") as fileobj: for i, line in enumerate(fileobj): if line == "\n": continue datalist = line.split(",") result = [int(float(num)<=limit) for num in datalist] print(f"{i}:{result}") #エラーメッセージ # File "data.py", line 9 # print(f"{i}:{result}") ^ #SyntaxError: invalid syntax これに関連する質問ですが、pythonはコンパイルしないようになっているみたいなので、コンパイル時のエラーと実行時のエラーの区別がつきません。このエラーは実際に動作してエラーが出ているということなのでしょうか。他の言語ではシンタックスエラーはコンパイルエラーなので実行前のエラーとは思いますが、文法チェックと実行の関係を教えて頂ければと思いますが。 よろしくお願いします。

  • Pythonのコンパイルの仕方が分かりません。。

    Pythonのコンパイルの仕方が分かりません。。 最近、Pythonをやり始めて、 スクリプト(hello.py)を作成したのですが、 実行ができません。 どうしたらよいのでしょうか。 どなたか回答お願いします。 あと[hello.py]の中身は print “Hello, world!” です。 command lineには Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> と表示されていて、 hello.py と打つと、 Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'hello' is not defined >>> 返ってきます。

  • MacでPython スクリプトファイルの実行

    自分はMacユーザです。 プログラミングに興味があったので Python2.6のインストールと入門書の購入をしました。 スクリプトファイルの実行をしたいのですが、やり方がわかりません。 Macにあるテキストエディタで print "hello" と入力して、test.pyという名前でデスクトップに保存しました。 購入した本には「LinuxやMac OS Xであれば、シェルからコマンドを入力します。」と記されています。 そもそもシェルの意味が分かりません。。。 「python test.py」と入力とも書いてあるのですが、どこに書くのでしょうか。。 ネットで簡単に調べてみたのですが、いまいち分かりません。 初心者なので、分かりやすく回答して頂けるとありがたいです。 どうか、よろしくお願いします。

  • pythonの初歩的なことですが…エラーが出ています

    n = 0 while n < 10: print 'hello, world' n += 1 このソースを「test.py」というファイルに書き込み、pythonのGUI、「IDLE」でRun->Check Moduleでやってみると、invaild syntaxとなって実行できません。 'hello, world'の後ろの「'」が、エラーの原因らしいのですが、解決方法がわかりません。 グーグルで調べてもよくわかりませんでした。 pythonのIDLEのVerは3,1,1。 OSはWindows Vistaです。

  • Pythonを用いてCGIを作る勉強をしています。

    Pythonを用いてCGIを作る勉強をしています。 さて、CGIHTTPServerでCGIのテストをしようとしたところ、ぜんぜん動いてくれません。ちゃんとファイルのパーミッションも755にしました。 自分の力だけではどうにもならなかったため、ここで質問させてもらいます。 どうしたらよいのでしょうか。 僕がつくったPythonのソース test.pyは #! /usr/bin python print "Content-type: text/html\n" print "<html><body>Hello!</body></html>" です。 本来ならブラウザで「http://127.0.0.1:8000/cgi-bin/test.py」 とすれば動いてくれるはずなのに以下のようなエラーメッセージが出ます。 localhost - - [19/May/2010 23:46:43] "GET /cgi-bin/test3.py HTTP/1.1" 200 - Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/CGIHTTPServer.py", line 255, in run_cgi OSError: [Errno 13] Permission denied localhost - - [19/May/2010 23:46:43] CGI script exit status 0x7f00 PCの環境はMacOSX10.6です。 だれか分かる方。教えていただけないでしょうか?? よろしくお願いします。

    • 締切済み
    • CGI
  • やや長めのpythonのコードの読み方・作り方につ

     pythonではループでもプログラム単位(?)でもその終端を明示しないという決まりになっているようです。インデントがそれを示すということなので。 としますと、このループの先端はどこかとか、このプログラム単位の先頭と終端はどこかについてどのようにして明確に判断できるでしょうか。長いプログラムだと印刷して検討するにしてもかなり長く、ここかな?推測したりしますが、プログラム開発とか変更は推測で作業するのとなじまないように思うのですが。インデントの間違いは5行しかないプログラムでも発生しますが、100行、1000行、10000行となっていくとどうなるのかなと思います。  他の言語も多かれ少なかれそういう面がはありますが、カッコとかreturnとか独特の囲い込みのためエディタで検索することができます。pythonはどのようになっているでしょうか。例えば印刷してみて左端から始まるものはその上から切断されているとみなすのでしょうか。 よろしくお願いします。

  • python: fork後の標準出力について

    言語はpythonです。(バージョン : 2.6.6) 以下の二つの単純なpythonスクリプト   test.py, exe_fork.py があります。 [test.py] #!/usr/bin/env python import subprocess proc = subprocess.Popen("./exe_fork.py", stdout=subprocess.PIPE) result = proc.stdout.read() print result [exe_fork.py] #!/usr/bin/env python import os import time pid = os.fork() if pid != 0: print "parent\n" else: time.sleep(5) print "child\n" [動作] 各スクリプトの動作としては、 test.pyがexe_fork.pyをPopen(stdoutはPIPEで受信)で実行し、 read()メソッドでexe_fork.pyの標準出力を受け取り、表示する。 exe_fork.pyはforkして、   親プロセスは"parent"と出力   子プロセスは5秒後に"child"と出力 です。 [実行結果] test.pyを実行すると 5秒後に   parent   child と表示されました。 これを実行する前は実行後すぐに "parent" と表示されてスクリプト終了するのだと予想しておりました。 しかし実際はexe_fork.pyの親と子の両方のプロセス終了するまで何も表示されず 両プロセスが終了した後にtest.pyのread()メソッドが完了するようです。 (どういうしくみでそうなっているのかよくわかりません。。) [質問・相談] test.pyでexe_fork.pyの親プロセスの標準出力だけを反映する方法ございませんでしょうか? なお、都合上、以下の条件を満たしている必要がございます。  条件1: test.py側のソースは変更しない  条件2: exe_fork.pyの親プロセスが終了した時点でtest.pyのread()メソッドが終了する  条件3: forkptyは使わない [参考]  exe_fork.py側で子プロセスのみsys.stdout.close()してみましたが結局exe_fork.pyの子プロセスが終了するまで(=5秒経過するまで)test.pyのread()メソッドは完了しませんでした。   よろしくお願いします。

専門家に質問してみよう