■ ラズベリーパイでのパイソンのプログラム作成

▼実行方法その 1
メニュー → プログラミング → Thonny を開いて、上段のスペースにプログラムを書いて、Run ボタンを押すと実行できます。

▼実行方法その 2
適当なファイル test.py を作成します。
ファイルの最初の1行目にに次の文字を書き込んでコード内に実行環境を記述する。
今回は python3 を指定しています、2行目からプログラムを書き込みます。
#!/usr/bin/env python3

ターミナルでファイルに実行権限を追加する。
chmod 755 test.py

ターミナルで、ファイル名の前に ./ を付けると実行できます。
./test.py


● Pythonと他の言語との違い
C言語とPythonでの同一の動作をするプログラムを作成しました。
▼ C言語
if(a){
	printf("1\n");
}else if(b){
	printf("2\n");
}else{
	printf("3\n");
}
printf("end\n");
▼ Python
if(a):
	print("1")
elif(b):
	print("2")
else:
	print("3")
print("end")
C言語では{}がブロックになるのに対して、pythonでは文字 ":" で終わる次の行のインデントの高さによりブロックが表現されます。
行端の ; は必要なく、1行単位で解釈されるようです。
変数の型を指定した変数宣言は必要なく、使用する変数は初期化した時点で作成されるようです。
(型宣言する方法もあるようだが....)
どうしても、型を動的に確認したい場合には、
type(変数)==type(変数)
として型が同じかどうかを確認すると良いと思う。


● コメント文
# で始まる文はコメントとして扱われます。


● 文字の扱い
'' で囲っても、 "" で囲っても文字や文字列として扱われるようです。
エスケープシーケンスはC言語と同様のようです。
文字の連結は + で行い、* で指定した数だけ繰り返す "a"*3 だと aaa になるそうです。


● 演算子
//         割り算の結果の商のみ(結果が自動的に浮動小数点型になるため商のみ取り出す方法がこれしかない)
**         べき乗
not(True)  bool値の反転
and        and演算子
or         or演算子
他の演算子はC言語とほぼ同じでした。


● 変数の型が決まっていないので文字なのか数字なのか指定しないと演算がおかしな事になります。
int("1")    文字を数値に変換
str(1)      数値を文字に変換

● if文の形式
: で終わる次の行のインデントの高さによりブロックが表現されます。
if 条件式1:
	条件式1のブロック内
	条件式1のブロック内
elif 条件式2:
	条件式2のブロック内
	条件式2のブロック内
else:
	else のブロック内
ブロックの外

● match 文 C言語のswitchですが Python3.10から追加された機能のようです。
i=2
match i:
    case 1:
        print("1")
    case 2:
        print("2")
    case 3:
        print("3")
    case _:
        print("その他")
print("end")
実行結果
2
end


● タプル
タプルとは、リストと同じように見えますが変更できない物だそうです。
C言語のマクロみたいな物でしょうか。
▼ タプルに含まれるか
ar=("a","b","c","d")
print("a" in(ar))
実行結果
True


● forループ
ループ自体がデータ構造により動いているような気がします。
for i in(1,10,2):
    print(i)
実行結果
1
10
2


▼ タプルでのforループ
for i in("a","b","c"):
    print(i)
実行結果
a
b
c


▼ タプルでのforループ2
for i in("abcde",1):
    print(i)
実行結果
abcde
1


▼ 文字列でのforループ
for i in("abcde"):
    print(i)
実行結果
a
b
c
d
e


▼ リストでのforループ
ar=["a","b","c","d"]
for i in(ar):
    print(i)
実行結果
a
b
c
d


▼ rangeを使った forループ
1-9までのループ
for i in range(1,10):
    print(i)
実行結果
1
2
3
4
5
6
7
8
9


▼ rangeを使った forループ (2づつ増加)
for i in range(1,10,2):
    print(i)
実行結果
1
3
5
7
9


● while文
0〜9までの繰り返し
i=0
while i<10:
    print(i)
    i=i+1
実行結果
0
1
2
3
4
5
6
7
8
9

i=i+1i+=1 としても良いそうです。
ただし、i++ は使えないようですし、++i にすると加算されないためループが止まらなくなります。


● 文字列操作
▼ 前から2文字目と3文字目を出力
str="abcde"
print(str[2]+str[3])
実行結果
cd


▼ 後ろから1文字目と2文字目を出力
str="abcde"
print(str[-2]+str[-1])
実行結果
de


▼ 文字数を取得
str="abcde"
print(len(str))
実行結果
5


▼ 文字を置換
str="abcde"
print(str.replace("bc","-"))
実行結果
a-de


▼ 切り出し
str="abcde"
print(str[1:3])
実行結果
bc


▼ 検索
str="abcde"
print(str.find("bc"))
実行結果
1

見つからない場合は-1を返す


▼ 文字が存在するか
str="abcde"
print("cd" in(str))
実行結果
True


● リスト
▼ リストに含まれるかどうか
ar=["a","b","c","d"]
print("a" in(ar))
実行結果
True


▼ 要素へのアクセス
ar=["a","b","c","d"]
print(ar[1])
実行結果
b


▼ 最後の要素を取り出す
ar=["a","b","c","d"]
print(ar[-1])
実行結果
d


▼ リストを切り出す
ar=["a","b","c","d"]
ar2=ar[1:3]
print(ar2)
実行結果
['b', 'c']


▼ リストを切り出す2
ar=["a","b","c","d"]
ar2=ar[-3:-1]
print(ar2)
実行結果
['b', 'c']


▼ 要素の変更
ar=["a","b","c","d"]
ar[2]="_"
print(ar)
実行結果
['a', 'b', '_', 'd']


▼ 要素の追加
ar=["a","b","c","d"]
ar.append("e")
print(ar)
実行結果
['a', 'b', 'c', 'd', 'e']


▼ 挿入
ar=["a","b","c","d"]
ar.insert(2,"_")
print(ar)
実行結果
['a', 'b', '_', 'c', 'd']


▼ 要素の内容を削除
ar=["a","_","b","_","c","d"]
ar.remove("_")
print(ar)
実行結果
['a', 'b', '_', 'c', 'd']

複数がマッチした場合には最初の一つ目が削除されます


▼ インデックスで削除
ar=["a","b","_","c","d"]
del ar[2:4]
print(ar)
実行結果
['a', 'b', 'd']


● ファイル処理
▼ ファイルを開く
file = open('test.txt', 'w')
r 読み込みモード、ファイルが見つからない場合には FileNotFoundError
w ファイルが存在しない場合には新規で作成して書き込み
a ファイルに追記
x ファイルが存在しない場合には新規で作成して書き込み、存在している場合には FileExistsError
b バイナリ―モード 'rb' 'wb' 'ab' 'xb' のように組み合わせて使用

エンコーディングを指定する
file = open('test.txt', encoding="utf_8")
encoding="euc_jp"encoding="shift_jis" のように指定する


▼ ファイル書き込み
ファイルに文字を書き込み
file.write("")

ファイルにリストの内容を書き込み(終端に改行文字なし)
list=["test","aaa","bbb"]
file.writelines(list)

▼ ファイル読み込み
ファイル全体を読み込む(引数に文字数を指定するとその文字数までを読み込む)
str = file.read()

ファイルを改行で読み込む(引数に文字数を指定するとその文字数までを読み込む)
読み込む行を超えた場合には空の文字を返す。
str = file.readline()
文字列には改行コードが含まれているで、
str = str.replace("\n", "")
として削除する

readline自体がリストを返すようになっており、リストに分割された文字を表示する事ができます。
data = file.readlines()
for str in data:
  print(str)
もしくは、配列のようにアクセスする 要素の外にアクセスすると IndexError
data = file.readlines()
print (data[0])
print (data[1])

▼ ファイルを閉じる
file.close()

▼ファイルの保存されたパス
相対パスで保存した場合には保存個所がよくわかりません、そこでカレントディレクトリを表示しパスを取得します。
import os
print(os.getcwd())

● エラー処理
ファイル処理でのエラーを取得する
try:
    file = open('test.txt', 'r')
    file.close()
except Exception as e:
    print(e)

エラーを細かく取得する
try:
    file = open('test.txt', 'r')
    file.close()
except FileExistsError:
    print("ファイル存在エラー")
except FileNotFoundError:
    print("ファイルが見つからない")
except PermissionError:
    print("アクセス権エラー")
except IOError:
    print("ファイルIOエラー")
except Exception as e:
    # その他のエラー
    print(e)
finally:
    print("finally")



▲トップページ > マイコンなど