3.3 ファイル入出力

(準備中)

例えば、 C 言語の次のようなプログラムと同じようなことをするにはどうしたら良いか。
#include <stdio.h>
#include <math.h>

int main(void)
{
  int N, i;
  double dx, x;
  FILE *f;
  char line[512];
  f=fopen("test.txt", "w");
  N=90;
  dx=4*atan(1.0)/2/N;
  for (i = 0; i <= N; i++) {
    x = i * dx;
    printf("%d %f %f\n", i, sin(x), cos(x));
  }
  fclose(f);

  f=fopen("test.txt", "r");
  while	(fgets(line,sizeof(line),f) != NULL) {
    double s, c;
    sscanf(line, "%d%lf%lf", &i, &s, &c);
    printf("%d %f %f\n", i, s, c);
  }
}
要するに、0 度から $ 90$ 度までの$ 1$度刻みで、 $ \sin$, $ \cos$ の値を出力したファイルを作り、それを読み込んで表示する、 という内容である。 行単位でお仕事をする、というクラシックなプログラムである。

さすがに scanf() 系統の関数は Python には用意されていないようだ。 空白などで区切られているならば、split() を使えばバラせるだろう。


# sincostable.py
import math
with open('test.txt', mode='w') as f:
    N=90
    dx=math.pi/2/N
    for i in range(N+1):
        x=i*dx
        print('%d %f %f' % (i,math.sin(x),math.cos(x)), file=f)

with open('test.txt', mode='r') as f:
    line=f.readline()
    while line != '':
        s=line.split()
        print('%d %f %f' % (int(s[0]), float(s[1]), float(s[2])))
        line=f.readline()



桂田 祐史