Basic Operators

基本オペレータ


この節ではPythonで基本的な演算子を使う方法を説明します。

算術演算子

他のプログラミング言語と同じように、加算、減算、乗算、除算の演算子を数値と共に使用できます。

number = 1 + 2 * 3 / 4.0
print(number)

答えがどうなるかを予測してみてください。Pythonは操作の順番に従いますか?

利用可能な別の演算子は、除算の整数剰余を返すモジュロ(%)演算子です。配当率%divisor =剰余。

remainder = 11 % 3
print(remainder)

2つの乗算記号を使用すると、べき乗の関係になります。

squared = 7 ** 2
cubed = 2 ** 3
print(squared)
print(cubed)

文字列で演算子を使用する

Pythonは、加算演算子を使った文字列の連結をサポートしています。

helloworld = “hello” + ” ” + “world”
print(helloworld)

Pythonは、文字列を繰り返して連続する文字列を形成することもサポートしています。

lotsofhellos = “hello” * 10
print(lotsofhellos)

リストでの演算子の使用

リストは加算演算子で結合することができます。

even_numbers = [2,4,6,8]
odd_numbers = [1,3,5,7]
all_numbers = odd_numbers + even_numbers
print(all_numbers)

文字列の場合と同様に、Pythonは乗算演算子を使用して繰り返しシーケンスで新しいリストを作成することをサポートします。

print([1,2,3] * 3)

演習課題

この課題の目標は、x_listand という2つのリストを作成することです。y_listこれらのリストには、それぞれ変数xandの10個のインスタンスが含まれていますy。あなたはとも呼ばれるリストを作成するために必要とされているbig_list変数が含まれ、xそしてyあなたが作成した二つのリストを連結して、10回ずつ。

x = object()
y = object()

# TODO: change this code
x_list = [x]
y_list = [y]
big_list = []

print("x_list contains %d objects" % len(x_list))
print("y_list contains %d objects" % len(y_list))
print("big_list contains %d objects" % len(big_list))

# testing code
if x_list.count(x) == 10 and y_list.count(y) == 10:
    print("Almost there...")
if big_list.count(x) == 10 and big_list.count(y) == 10:
    print("Great!")

 

Lists

リスト


リストは配列と非常によく似ています。それらは任意のタイプの変数を含むことができ、それらはあなたが望むだけ多くの変数を含むことができます。リストは非常に簡単な方法で反復することもできます。これはリストを作成する方法の例です。

mylist = []
mylist.append(1)
mylist.append(2)
mylist.append(3)
print(mylist[0]) # prints 1
print(mylist[1]) # prints 2
print(mylist[2]) # prints 3

# prints out 1,2,3
for x in mylist:
    print(x)

 

存在しないインデックスにアクセスすると、例外(エラー)が発生します。

mylist = [1,2,3]
print(mylist[10])

 

課題

この課題では、 “append”リストメソッドを使って正しいリストに数字と文字列を追加する必要があります。「数」リストに数字1、2、および3を追加し、文字列変数に単語「hello」と「world」を追加する必要があります。

角かっこ演算子を使用して、変数second_nameに名前リストの2番目の名前を入力する必要もあります[]。インデックスは0から始まるので、リストの2番目の項目にアクセスする場合、そのインデックスは1になります。

参考

https://www.learnpython.org/en/Lists

Variables and Types

変数と型


Pythonは完全にオブジェクト指向であり、「静的に型付け」されていません。使用する前に変数を宣言したり、型を宣言する必要はありません。Pythonのすべての変数はオブジェクトです。

このチュートリアルでは、いくつかの基本的な種類の変数について説明します。

数値

Pythonは2種類の数をサポートします – 整数と浮動小数点数。(これは複素数もサポートします。このチュートリアルでは説明しません)。

整数を定義するには、次の構文を使用します。

myint = 7
print(myint)

 

浮動小数点数を定義するには、次の表記法のいずれかを使用します。

myfloat = 7.0
print(myfloat)
myfloat = float(7)
print(myfloat)

 

文字列

文字列は、一重引用符または二重引用符で定義されます。

mystring = 'hello'
print(mystring)
mystring = "hello"
print(mystring)

 

この2つの違いは、二重引用符を使用するとアポストロフィを簡単に含めることができるという点です(これに対して、一重引用符を使用すると文字列が終了します)。

mystring = "Don't worry about apostrophes"
print(mystring)

 

代入は、このように同じ行にある「同時に」複数の変数に対して行うことができます。

a, b = 3, 4
print(a,b)

 

課題

この課題の目標は、文字列、整数、および浮動小数点数を作成することです。文字列には名前を付けmystring、 “hello”という単語を含める必要があります。浮動小数点数には名前を付けてmyfloat10.0の数を入れ、整数には名前を付けてmyint20の数を入れなければなりません。

参考

https://www.learnpython.org/en/Variables_and_Types

Python Hello, World!

VS Code install

  1. ウェブページを開く
    https://code.visualstudio.com/ 
  2. Visual Studio Code」の「 ダウンロード」をクリック.※ Linux 版, Mac 版が欲しいときは「さらに詳しく」をクリック
  3. ダウンロードした .exeファイルを実行する.

Pythonスクリプトを書いてみる

  1. Documentsの下にPythonというフォルダを作る。
  2. VS Codeのメニューから「フォルダを開く」を選択し、1で作成したフォルダを指定する。
  3. 同じくメニューから「新規ファイル」を選択し、hello.pyなどのファイル名を付ける。拡張子から自動的にpythonスクリプトと認識される。
  4. VS Codeから、勧めExtensionsが表示され、好みでインストールする。
  5. 何か適当なコードを書く。
hello.py
if True:
    print('Hello world')
  1. VS Codeのターミナル(開いてなければメニューから「新規ターミナル」を開き)で実行する。
ターミナル
/Users/chen/Documents/C >  python hello.py
Hello world

これで最低限、pythonを快適に編集できるようになった。

 

PHP(7) Log file with jpgraph for php7

サーバのメンテナンス、以前作ったjpgraphを利用した、Log file画像プログラムが機能しなくなって、白画面になった。

調べてみたら、2019年から、php5, php7.1はサポート外になり、古いバージョンのjpgraphは動作しなくなった。

急遽最新版のjpgraphをダウンロードして入れ替えたが、依然おかしい。

問題点:

  1. カラーは3色まで、それ以上しても緑のまま。
  2. markerが表示されない
  3. legend(凡例)にもmarkerが表示されない

以前正常に動作したプログラムだから、動かないと困る。

プログラムの書き方、そして jpgraph と php7関連情報を色々と調べても、わからない。

jpgraphは、php7に完全対応してないから、このような問題は発生する可能性がある。

PHP(6) Log file graph

ログファイルからデータの取得と描画

TinyWebDBに、センサーデータ収集ログを解析して、画像にした!表示したのでは、温度(最高、最低)、気圧、バッテリー電圧。

ハードウェアの制作はこちら

https://uc4.net/2018/04/02/wemos-d5-weather-bureau/

送信プログラムはこちら

https://github.com/edu2web/TinyWebDB-WeatherStation

今回は、受信データの描画方法を説明する。

  1. fileを配列に読み込む
  2. json_decodeでディコード
  3. 描画データ配列生成
  4. jpgraphで描画する

データの取得

ファイル名draw.phpとする。

<?php
include ("./jpgraph/jpgraph.php");
include ("./jpgraph/jpgraph_line.php");

$tempers = file($_GET['logfile']);
$p_time = 0;
$datax = array();  // Local time p_time, "2001-04-01","2001-04-02","2001-04-03",...
$datay = array();  // temperature p_low
$data2y = array(); // temperature p_high
$datap = array();  // pressure
$datab = array();  // battery

foreach($tempers as $temper) {
        list($dummy,$tagValue) = explode('--', $temper);

        $obj = json_decode($tagValue);
        $temp = round($obj->{'temperature'}, 2);
        $localt = $obj->{'localTime'};
        $pressure = $obj->{'pressure_hpa'};
        $battery = $obj->{'battery_Vcc'};
        list($ldate,$ltime) = explode(' ', $localt);
        $p_time2 = $ldate . " " . substr($ltime, 0, 2); // Truncat to Hour

        if ($p_time2 != $p_time) {
                if ($p_time) {
                        array_push( $datax, $p_time);
                        array_push( $datay, $p_low);
                        array_push( $data2y, $p_high);
                        array_push( $datap, $pressure);
                        array_push( $datab, $battery);
                        // echo "$p_time, $p_low, $p_high <br>";
                }
                $p_time = $p_time2;
                $p_high = $temp;
                $p_low = $temp;
        } else {
                $p_low = ($p_low > $temp or $p_low == 0) ? ($temp) : ($p_low);
                $p_high = ($p_high < $temp or $p_high == 0) ? ($temp) : ($p_high);
        }
}

array_push( $datax, $p_time);
array_push( $datay, $p_low);
array_push( $data2y, $p_high);
array_push( $datap, $pressure);
array_push( $datab, $battery);

// data ready for JpGraph

データの描画

TinyWebDBに、センサーデータ収集ログを解析した画像でした!

PHP(5) Use JpGraph

JpGraphとは

JpGraphはAditus Consultingが開発しているグラフ生成ライブラリ。
JpGraphを利用することで、数行のコーディングで簡単に動的にグラフを生成することができる。

JpGraphダウントード

JpGraphのダウンロードは下記URLから行える。
http://jpgraph.net/download/

JpGraphインストール

PHPでグラフを出力する方法はいくつかあり、何れにしてもGDライブラリがインストールされていることが前提条件となっている。

この記事は、DreamHostで演習を前提とするので、GDライブラリがすでに用意されている。日本語の表示はフォントのインストールなど必要だが、省略する。そのためソースコードに日本語の表示に関連する箇所はコメントアウトする。

JpGraphはどこに設置しても動作する。

この演習では、jpgraphと言うフォルダに入れて、ソースから直接インクルードする。

// 折れ線グラフ描画に必要なライブラリ
include (“./jpgraph/jpgraph.php”);
include (“./jpgraph/jpgraph_line.php”);

JpGraphサンプル

折れ線グラフを生成するプログラムtest.php

<?php
// 折れ線グラフ描画に必要なライブラリ
include ("./jpgraph/jpgraph.php");
include ("./jpgraph/jpgraph_line.php");

// データ、凡例、描画色を準備
$data = array(
  'data' => array(
    array(151, 170, 140, 116, 157),
    array(161, 147, 182, 105, 140),
    array(115, 110, 90, 93, 88),
  ),
  'legends' => array('Tokyo', 'Akihabara', 'Ueno'),
  'colors' => array('red', 'green', 'blue'),
);

// グラフの描画先
$g = new Graph(400, 400); // サイズ
$g->setScale('textlin'); // 目盛り
// $g->title->setFont(FF_MINCHO, FS_NORMAL, 14); // タイトルフォント
// $g->title->set('上半期 店舗別販売件数'); // タイトル
// $g->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント

// 配列から順に折れ線グラフを生成&キャンバスに追加
for ($i = 0; $i < count($data['data']); $i++) {
  $l[] = new LinePlot($data['data'][$i]); // データ
  $l[$i]->setLegend($data['legends'][$i]); // 凡例
  $l[$i]->setColor($data['colors'][$i]); // 描画色
  $g->add($l[$i]); // 追加
}

// グラフを描画
$g->stroke();

作成方法は、

  1. グラフの描画キャンバスのGraphオブジェクトを生成
  2. 配列から順に折れ線グラフを生成
  3. LinePlotクラスを直接にaddメソッドでキャンバスのGraphオブジェクトに追加
  4. グラフを描画

参考

  1. https://www.buildinsider.net/web/bookphplib100/025

PHP(4) Search a tag

処理内容

tagを検索する実装

  1. tag Search form
  2. tag Search Action
    1. Search file database for a tag
    2. return value

検索フォーム

GetValueForm.phpと保存してください。

<h3> Search database for a tag</h3>
<form action="GetValueAction.php" method="post" enctype=application/x-www-form-urlencoded>
   <p>Tag:<input type="text" name="tag" /></p>
   <input type="hidden" name="fmt" value="html">
   <input type="submit" value="Get value">
</form>

 

検索Action

  • tag Search Action
    1. Search file database for a tag
    2. return value

GetValueAction.phpと保存してください。

// JSON_API , Post Parameters : tag
$tagName  = $_REQUEST['tag'];
$tagValue = '';
is_file($tagName . ".txt") && ($tagValue = file_get_contents($tagName . ".txt"));
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
echo json_encode(array(
    "VALUE",
    $tagName,
    $tagValue
));

 

 

PHP(3) Store file

処理内容

受け取ったデータは、2種類のファイルに保存する。

  1. tag-valueペアをファイルに保存する。
  2. ログファイル

accept form date and store to file.

  1. Store a tag-value pair in the file
  2. Append log on logfile

tag-valueペアをファイルに保存する

受信したtag-valueペアをファイルに保存する。ファイル名はtagNameそのまま、拡張子はtxtになる。

[tagName].txt

ソースコード

$fh = fopen($tagName . “.txt”, “w”) or die(“check file write permission.”);
fwrite($fh, $tagValue);
fclose($fh);

ログを保存する

error_log関数を利用して、ログファイルを生成する。

$file_name = ‘tinywebdb_’ . date(‘Y-m-d’) . ‘.log’;
error_log($log_message, 3, $file_name);

処理をまとめる

一連の処理を StoreAValueAction,php と保存してください。

<?php
            // JSON_API , Post Parameters : tag,value
            $tagName     = $_POST['tag'];
            $tagValue    = $_POST['value'];
            $apiKey      = '';	// $_POST['apikey'];
            $log_message = sprintf("%s:%s\n", date('Y-m-d H:i:s'), "storeavalue: ($apiKey) $tagName -- $tagValue");
            echo $log_message;
            $fh = fopen($tagName . ".txt", "w") or die("check file write permission.");
            fwrite($fh, $tagValue);
            fclose($fh);

            $file_name = 'tinywebdb_' . date('Y-m-d') . '.log';
            error_log($log_message, 3, $file_name);
?>

受け取ったデータは表示、そしてファイルに保存されるはず。

wp-api & sample apps