LoginSignup
3
4

Pythonプログラミング練習

Last updated at Posted at 2021-04-03

最新記事は以下に作成しました。
BeautifulSoupライブラリの使い方
osモジュール,os.pathモジュールの使い方
Anacondaのインストール方法

#1 はじめに
Pythonプログラミング練習用に記事を作成しました。

#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンの版数は以下のとりです。

CentOSの版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
カーネル版数
[root@server ~]# uname -r
4.18.0-240.el8.x86_64
pythonの版数
[root@server ~]# python3 -V
Python 3.6.8

#3 Hello world!
文字列を表示してみます。
なお、#はコメント行を表します。

ソースコード
[root@server ~]# cat tp.py
#This line is a comment line.
print("Hello world!")
実行結果
[root@server ~]# python3 tp.py
Hello world!

#4 変数
変数はアンダーバーを含む英数字からなる名前で表します。
最初の1文字はアンダーバーまたは英字でなくてはなりません。

ソースコード
[root@server ~]# cat tp.py
x1=111
print(x1)
_x=222
print(_x)
1x=333
print(1x)

数字で始まる1xは変数として使用できないことがわかります。

実行結果
[root@server ~]# python3 tp.py
  File "tp.py", line 5
    1x=333
     ^
SyntaxError: invalid syntax

#5 コマンドライン引数の取得方法
##5.1 各引数を求める方法

ソースコード
[root@server ~]# cat tp.py
import sys
print (sys.argv[0])
print (sys.argv[1])
print (sys.argv[2])
実行結果
[root@server ~]# python3 tp.py 11 22
tp.py
11
22

##5.2 個数を求める方法

ソースコード
[root@server ~]# cat tp.py
import sys
argv = sys.argv
argc = len(argv)
print(argc)
実行結果
[root@server ~]# python3 tp.py
1
[root@server ~]# python3 tp.py aa
2
[root@server ~]# python3 tp.py aa bb
3

#6 リスト、タプル、セット、辞書の使い方
##6.1 リスト
リストは、[...]で表します。
他のプログラミング言語における「配列」に相当します。
任意の型(整数、浮動小数点数、文字列など)のデータを格納できます。

ソースコード
[root@server ~]# cat tp.py
fruits=['apple','lemon','peach']
print(fruits[0])
fruits[0]='grape'
print(fruits[0])
print(fruits[1:3])
print(fruits[2:])
実行結果
[root@server ~]# python3 tp.py
apple
grape
['lemon', 'peach']
['peach']

##6.2 タプル
タプルは、(...)で表します。
リストは要素の追加、削除が可能ですが、タプルは参照しかできません。

ソースコード
[root@server ~]# cat tp.py
fruits=('apple','lemon','peach')
print(fruits[0])
fruits[0]='peach'

タプルの場合、要素を書き換えようとすると、エラーが発生します。

実行結果
[root@server ~]# python3 tp.py
apple
Traceback (most recent call last):
  File "tp.py", line 3, in <module>
    fruits[0]='peach'
TypeError: 'tuple' object does not support item assignment

##6.3 セット
セットは、順序と重複のないデータ構造です。
セットには要素の追加、削除はできますが、重複する要素は扱うことができません。

まず、set()を使って要素を何も持たな空のオブジェクトを作成します。
その後、apple,lemon,appleと要素を追加してみます。

ソースコード
[root@server ~]# cat tp.py
s=set()
s.add('apple')
print(s)
s.add('lemon')
print(s)
s.add('apple')
print(s)

appleを2回追加しましたが、オブジェクトにはappleが1つしか存在しません。

実行結果
[root@server ~]# python3 tp.py
{'apple'}
{'apple', 'lemon'}
{'apple', 'lemon'}

##6.4 辞書
辞書は、{...}で表します。
辞書はキーとバリューの組で構成されます。
ここでは、果物と値段を辞書として登録してみます。

ソースコード
[root@server ~]# cat tp.py
d = { 'apple':100, 'lemon':200 }
print(d['apple'])
print(d['lemon'])
print('--- 要素からキーとバリューを取り出す ---')
for k,v in d.items():
  print(k, v)
print('--- 要素からキーを取り出す ---')
for k in d.keys():
  print(k)
print('--- 要素からバリューを取り出す ---')
for v in d.values():
  print(v)
実行結果
[root@server ~]# python3 tp.py
100
200
--- 要素からキーとバリューを取り出す ---
apple 100
lemon 200
--- 要素からキーを取り出す ---
apple
lemon
--- 要素からバリューを取り出す ---
100
200

#7 制御文
##7.1 if, else, elif文

ソースコード
[root@server ~]# cat tp.py
import sys
a=int(sys.argv[1])

if a > 10:
  print('big')
elif a >= 5 and a <= 10:
  print('medium')
else:
  print('small')
実行結果
[root@server ~]# python3 tp.py 100
big
実行結果
[root@server ~]# python3 tp.py 5
medium
実行結果
[root@server ~]# python3 tp.py 0
small

##7.2 for文

###7.2.1 基本のループ処理

ソースコード(その1)
[root@server ~]# cat tp.py
for i in 1,10,100:
  print(i)
実行結果
[root@server ~]# python3 tp.py
1
10
100
ソースコード(その2)
[root@server ~]# cat tp.py
for c in 'abc':
  print(c)
実行結果
[root@server ~]# python3 tp.py
a
b
c

###7.2.2 rangeを使ったループ処理

ソースコード
[root@server ~]# cat tp.py
for i in range(3):
  print(i)
実行結果
[root@server ~]# python3 tp.py
0
1
2

###7.2.3 リストを処理するループ処理

ソースコード
[root@server ~]# cat tp.py
fruits=['apple','lemon','peach']
for name in fruits:
  print(name)
実行結果
[root@server ~]# python3 tp.py
apple
lemon
peach

###7.2.4 break文を使ったループ処理
break は最も内側のwhile,forのループ処理を抜けるときに使います。

ソースコード
[root@server ~]# cat tp.py
for i in range(10):
  if i >= 2:
    break
  print(i)
実行結果
[root@server ~]# python3 tp.py
0
1

###7.2.5 continue文を使ったループ処理
continueは最も内側のwhile,forのループ処理を繰り返すときに使います。

ソースコード
[root@server ~]# cat tp.py
for i in range(3):
  if i == 1:
    continue
  print(i)
実行結果
[root@server ~]# python3 tp.py
0
2

##7.3 while文
事前にループが何回繰り返されるの分からない時にwhileを使います。

ソースコード
[root@server ~]# cat tp.py
fruits = ['apple','lemon','peach']
len = len(fruits)
i=0
while i < len:
  print(str(i) + ':' + fruits[i])
  i += 1
実行結果
[root@server ~]# python3 tp.py
0:apple
1:lemon
2:peach

#8 Python標準ライブラリの使い方

##8.1 組み込み関数の使い方
Pythonが提供する組み込み関数の使い方を説明します。関数一覧は以下を参照ください。
https://docs.python.org/ja/3.6/library/functions.html

###8.1.1 データの並べ替え(sorted)

ソースコード
[root@server ~]# cat tp.py
x = [4, 9, 1, 3, 0]
print(x)
y = sorted(x)
print(y)
y = sorted(x,reverse=True)
print(y)
実行結果
[root@server ~]# python3 tp.py
[4, 9, 1, 3, 0]
[0, 1, 3, 4, 9]
[9, 4, 3, 1, 0]

###8.1.2 最大、最小値の求め方(min,max)

ソースコード
[root@server ~]# cat tp.py
x = [4, 9, 1, 3, 0]
min=min(x)
print(min)
max=max(x)
print(max)
実行結果
[root@server ~]# python3 tp.py
0
9

###8.1.3 オブジェクトの長さを求める方法(len)

ソースコード
[root@server ~]# cat tp.py
x=len('abcde')
print(x)
x=len(['apple','lemon','peach'])
print(x)
実行結果
[root@server ~]# python3 tp.py
5
3

##8.2 モジュールの使い方
Python標準ライブラリには、組み込み関数以外に多くのモジュールが登録されています。
詳細は、以下のページを参照ください。
https://docs.python.org/ja/3.6/library/

###8.2.1 datetimeモジュールの使い方

ソースコード
[root@server ~]# cat tp.py
import datetime

now = datetime.datetime.now()
print(now)
実行結果
[root@server ~]# python3 tp.py
2021-04-03 20:43:34.993347

###8.2.2 timeモジュールの使い方
指定した時間、プロセスをスリープしてみます。

ソースコード
[root@server ~]# cat tp.py
import time

time.sleep(3)

スクリプトを実行します。3秒間スリープしていることがわかります。

実行結果
[root@server ~]# date; python3 tp.py; date
2021年  4月  3日 土曜日 20:57:18 JST
2021年  4月  3日 土曜日 20:57:21 JST

###8.2.3 subprocessモジュールの使い方
Pythonの中から外部のコマンドを実行する場合、subprocessというモジュールを使います。

ソースコード
[root@server ~]# cat tp.py
import subprocess
dir = input("Please input dir name:")
p = subprocess.run(args=["ls","-l", dir], stdout=subprocess.PIPE)
print(p.stdout.decode('utf-8'))
print("retcode:", p.returncode)
実行結果
[root@server ~]# python3 tp.py
Please input dir name:/usr/local/bin
合計 39712
-rwxr-xr-x. 1 root root 10763104  3月 18 22:10 cmake
-snip-

#9 自作関数の使い方
##9.1 基本的な使い方
my_printという名前の関数を作成します。my_printは文字列を出力するだけの関数です。
そのあと、my_printを呼び出します。

ソースコード
[root@server ~]# cat tp.py
def my_print():
  print('Hello World')
my_print()
実行結果
[root@server ~]# python3 tp.py
Hello World

##9.2 引数、戻り値の使い方

ソースコード
[root@server ~]# cat tp.py
def my_add(x, y):
  sum = x + y
  return sum

x = my_add(1,5)
print(x)
実行結果
[root@server ~]# python3 tp.py
6

##9.3 戻り値として文字列を返す方法

ソースコード
[root@server ~]# cat tp.py
def my_print():
  return 'abcde'

str=my_print()
print(str)
実行結果
[root@server ~]# python3 tp.py
abcde

#10 ファイルを読み込む方法(import)

##10.1 同じディレクトリのファイルを読み込む方法
tp.pyからcommon.pyを読み込んでみます。

ソースコード(読み込む側)
[root@server ~]# cat tp.py
import common

common.my_print()
ソースコード(読み込まれる側)
[root@server ~]# cat common.py
def my_print():
  print('Hello World')
実行結果
[root@server ~]# python3 tp.py
Hello World

##10.2 別ディレクトリのファイルを読み込む方法
testディレクトリの下に同じ階層のsrc,incディレクトリがあります。

ディレクトリ構成
test ---+--- src
        |     tp.py
        |
        |
        +--- inc
              common.py
ソースコード(読み込む側)
[root@server src]# cat tp.py
import sys
sys.path.append('../inc')
import common

common.my_print()
ソースコード(読み込まれる側)
[root@server inc]# cat common.py
def my_print():
  print('Hello World')
実行結果
[root@server src]# python3 tp.py
Hello World

#11 テキストファイルの読み書き方法
ファイルには、テキストファイルとバイナリファイルがあります。
ここでは、テキストファイルに対する読み書きを説明します。

##11.1 読み出す方法(r)

ソースコード
[root@server ~]# cat tp.py
f=open('test.txt','r')
text=f.read()
print(text)
f.close()
pythonが読み込むファイル
[root@server ~]# cat test.txt
12345
abcde
実行結果
[root@server ~]# python3 tp.py
12345
abcde

##11.2 書き込む方法(w)

ソースコード
[root@server ~]# cat tp.py
f=open('test.txt','a')
f.write('aaa\n')
f.close()
実行結果
[root@server ~]# python3 tp.py
[root@server ~]# cat test.txt
aaa
[root@server ~]# python3 tp.py
[root@server ~]# cat test.txt
aaa

##11.3 追記する方法(a)

ソースコード
[root@server ~]# cat tp.py
f=open('test.txt','a')
f.write('aaa\n')
f.close()
実行結果
[root@server ~]# python3 tp.py
[root@server ~]# cat test.txt
aaa
[root@server ~]# python3 tp.py
[root@server ~]# cat test.txt
aaa
aaa

#12 外部ライブラリの使い方
外部ライブラリは、ここよりインストールする。

#14 デバッグ方法
次のソースコードをデバッグしてみます。

デバッグ対象のソースコード
[root@server ~]# cat tp.py
for i in range(10):
  if i >= 2:
    break
  print(i)

デバッガは、次のようにして起動します。

デバッガの起動方法
[root@server ~]# python3 -m pdb tp.py
> /root/tp.py(1)<module>()
-> for i in range(10):
(Pdb)

lコマンドを使って、現在実行中の行を表示してみます。
現在は1行目を実行していることがわかります。

実行中の行番号表示
[root@server ~]# python3 -m pdb tp.py
> /root/tp.py(1)<module>()
-> for i in range(10):
(Pdb) l
  1  -> for i in range(10):
  2       if i >= 2:
  3         break
  4       print(i)
[EOF]

次にnコマンドで1行実行してみます。
そのあと、lコマンドで現在実行中の行を表示してみます。
1行進んで、2行目を実行していることがわかります。

ステップ実行
(Pdb) n
> /root/tp.py(2)<module>()
-> if i >= 2:
(Pdb) l
  1     for i in range(10):
  2  ->   if i >= 2:
  3         break
  4       print(i)
[EOF]

次に、ppコマンドを使って変数iの値を確認してみます。
変数iの値が0であることがわかります。

変数の値の確認
(Pdb) pp i
0

bコマンドで3行目にブレークポイントを設定してみます。

ブレークポイント設定
(Pdb) b 3
Breakpoint 1 at /root/tp.py:3

ブレークポイント一覧を確認してみます。
bコマンドを実行すると、さきほど設定したブレークポイントが
表示されることがわかります。

ブレークポイント一覧
(Pdb) b
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /root/tp.py:3

cコマンドを実行して、ブレークポイントまで一気に処理を進めてみます。
0,1と表示され、breakで停止していることがわかります。

ブレークポイントまで処理を進める
(Pdb) c
0
1
> /root/tp.py(3)<module>()
-> break

lコマンドを実行して状況を確認してみます。
ブレークポイントで停止していることがわかります。

ブレークポイントで停止
(Pdb) l
  1     for i in range(10):
  2       if i >= 2:
  3 B->     break
  4       print(i)
[EOF]

設定したブレークポイントを削除します。
clコマンドにはブレークポイント番号(num)を指定します。

ブレークポイントの削除
(Pdb) cl 1
Deleted breakpoint 1 at /root/tp.py:3

ブレークポイントを確認します。
ブレークポイントが削除されたことがわかります。

ブレークポイントの確認
(Pdb) b
(Pdb)

プログラムを再度デバッグするにはrestartコマンドを実行します。

プログラムの再実行
(Pdb) restart
Restarting tp.py with arguments:
        tp.py
> /root/tp.py(1)<module>()
-> for i in range(10):

qコマンドを実行して、デバッガを終了します。6

デバッガの終了
(Pdb) q
[root@server ~]#

なお、hコマンドを実行すると、コマンド一覧が表示されます。

コマンド一覧の表示方法
(Pdb) h

Documented commands (type help <topic>):
========================================
EOF    c          d        h         list      q        rv       undisplay
a      cl         debug    help      ll        quit     s        unt
alias  clear      disable  ignore    longlist  r        source   until
args   commands   display  interact  n         restart  step     up
b      condition  down     j         next      return   tbreak   w
break  cont       enable   jump      p         retval   u        whatis
bt     continue   exit     l         pp        run      unalias  where

Miscellaneous help topics:
==========================
exec  pdb

#Z 参考情報
Python チュートリアル
とほほのPython入門
たった1日で基本が身に付く! Python超入門
Python別ファイルを読み込む方法を現役エンジニアが解説【初心者向け】
[Python入門]リストの基本
処理を一時停止!Pythonでsleepを使う方法【初心者向け】
[Pythonチートシート]文字列/リスト/タプル/辞書/集合の操作編
Pythonでモジュールを作成する方法

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4