kurumi-bioの雑記帳

プログラミング、パソコン、ペット、 犬、お出かけ

ChatGPTでプログラミングを学ぼう 第3回 「Pythonのprint関数」

こんにちは、kurumi-bioです。

ChatGPTと会話しながらPythonを学んでいきます。
前回は、Pythonのインストールと簡単なプログラムで動作確認を行いました。
簡単なプログラムでは、print関数を使ってHello, World!を標準出力に出力しました。
今回は、print関数をChatGTPから学びます。

環境

Pythonのprint関数の構文は?

print関数の構文をChatGPTに聞いてみたら、 構文とサンプルプログラムの回答がありました。
至れり尽くせりです。

◆テストコード

print("Hello, world!")
print("Hello", "world", sep=", ", end="!\n")
print("Hello, world!", end="")
print("Hello", "world!")

コードの説明 ChatGPTの回答通りに実装してみました。
3行目が最後の出力ですと改行が抑制されていることがわからないため、
4行目に挿入文字を指定しないで複数の値を出力する処理を追加しました。

◆実行結果

実行結果の説明 3行目で改行が行われないで4行目が同じ行に出力されました。
また4行目は、"Hello"と"world!"の間にデフォルトの挿入文字の半角スペースが挿入されました。

標準出力以外の出力先は?

先ほどのテストコードで、print関数のvalue,sep,endパラメータの使い方がわかりました。
では、fileパラメータに何が指定できるのかChatGPTに聞いてみました。

◆テストコード

with open("output.txt", "w") as f: print("Hello, world!", file=f)

コードの説明 ChatGPTの回答通りにoutput.txtファイルに出力するテストコードを作成しました。

◆実行結果

実行結果の説明 output.txtファイルが生成されて、ファイルの内容が"Hello, World!"でした。
Pythonでは、ファイル出力が簡単に行えることがわかりました。
次回以降でopen関数について学習したいと思います。

文字列型の出力方法は?

先ほどの質問で、文字列へ出力する方法はわかりましたが、
文字列を出力する方法が記載されていなかったので、ChatGPTに聞いてみました。

◆テストコード

import io; buf=io.StringIO(); print("Hello, world!", file=buf); s = buf.getvalue()
print (s)

コードの説明 文字列へ出力するコードの次の行に文字列を出力するコードを追記しました。

◆実行結果

実行結果の説明 文字列の内容の"Hello, world!"が標準出力に出力されました。
Pythonでは、":"と";"に特別な意味がありそうです。次回以降で学習したいと思います。

広告の下に続きます。

標準エラー出力は?

標準出力があるのですから、標準エラー出力もあると思いますので、ChatGPTに聞いてみました。

◆テストコード

import sys

print("Error: something went wrong", file=sys.stderr)

コードの説明 ChatGPTの回答通りです。

◆実行結果

実行結果の説明 "Error: something went wrong"が出力されました。

Go言語からPythonを実行する方法は?

標準エラー出力に出力する方法がわかりましたが、本当に標準エラー出力に出力されたか確認したいのでGo言語からPythonを実行する方法をChatGPTに聞いてみました。

ChatGPTから2種類の回答が得られましたが、2つ目はGo言語の中で実行しているため、 本ブログの主旨から外れてしまいます。ですので、今回は1つ目の方法で試します。

◆テストコード

Go言語

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("python3", "hello.py")
    out, err := cmd.Output()
    if err != nil {
        fmt.Println("Error:", err)
    }
    fmt.Println(string(out))
}

コードの説明 ChatGPTの回答通りです。

◆実行結果

実行結果の説明 Goが起動したpython3コマンドでhello.pyが実行されて、"Hello, World!"が出力されました。

◆テストコード

Python

import sys

print("Hello, world!", file=sys.stdout)
print("Error: something went wrong", file=sys.stderr)

Go言語

package main

import (
    "fmt"
    "os/exec"
    "strings"
)

func main() {
    var sout, serr strings.Builder
    c := exec.Command("python3", "test5.py")
    c.Stdout = &sout
    c.Stderr = &serr

    e := c.Run()

    if e != nil {
        fmt.Println("Error:", e)
    }
    fmt.Printf("stdout=%s", sout.String())
    fmt.Printf("stderr=%s", serr.String())
}

コードの説明 Pythonは、標準出力に"Hello, world!"、標準エラー出力に"Error: something went wrong"を出力します。
Goは、標準出力に"stdout="+実行したコマンドの標準出力、
標準エラー出力に"stderr="+実行したコマンドの標準エラー出力を出力します。

◆実行結果

実行結果の説明 Pythonで標準出力と標準エラー出力ができていることが確認できました。

宿題

今回の学習で次の疑問が発生しましたので、いつか学習したいと思います。

  • open関数の構文と使い方
  • ":"と";"の意味

最後までご覧いただきありがとうございます