初学者向け Python入門トレーニング
- Hello Worldを表示
- print文
- 変数と定数
- データ型
- 演算子
- 関数_スコープ
- リスト型_タプル型
- 集合型
- 辞書型
- if文
- for文
- while文
- イテレータ_ジェネレータ
- Lambda
- リスト操作
- クラス
- 継承
- 型判定
- モジュール分割_パッケージ分割
- 日付関数
- 数学関数
- 例外処理
- ファイルの入出力
- with文
- TypeAliases
- Generics
- 文字列操作_正規表現
- Webスクレイピング
- Python 3.6.5 以上
・Pycharm
https://www.jetbrains.com/pycharm/
任意のディレクトリ作成し、その中にmain.pyを作成して以下のコードを実装してください。
print('Hello World')
プログラムの実行方法は以下の通りです。
# 実行
# python3 <実行したいpyファイルのパス>
$ python3 lesson/lessonHelloWorld/main.py
# 実行結果が表示される
Hello World
これで環境構築は完了です。
pythonの文法を学びます。サンプルコードを写経し実行した後、課題を進めてください。
# 実行
$ python3 lesson/lessonPrint/main.py
「Good Job!」を表示してください。
# 実行
$ python3 answer/lessonPrint/task1.py
# 出力
Good Job!
# 実行
$ python3 lesson/lessonVarConst/main.py
二つの文字列(HelloとWorld)を連結して表示してください。
# 実行
$ python3 answer/lessonVarConst/task1.py
# 出力
Hello World
二つの数字を足し算した結果を表示してください。
# 実行
$ python3 answer/lessonVarConst/task2.py
# 出力
7
# 実行
$ python3 lesson/lessonDataType/main.py
20.123をfloat型で表示してください。またfloat型であることを証明してください。
# 実行
$ python3 answer/lessonDataType/task1.py
# 出力
20.123 <class 'float'> True
float型の20.123をstr型で表示してください。またstr型であることを証明してください。
# 実行
$ python3 answer/lessonDataType/task2.py
# 出力
20.123 <class 'str'> True
# 実行
$ python3 lesson/lessonOperator/main.py
20と7の二つの数字をそれぞれ計算した結果を表示してください。
足し算、掛け算、割り算、除算、余り、べき乗。
# 実行
$ python3 answer/lessonOperator/task1.py
# 出力
23 60 6.666666666666667 6 2 8000
以下の文字列からマッチする単語を見つけてin演算子で単語が含まれていることを証明してください。
文字列:Attention: Mr. John Smith Human Resources Department AAA Company
# 実行
$ python3 answer/lessonOperator/task2.py
# 出力
Attention: Mr. John Smith Human Resources Department AAA Company
Attention True
Resources True
Company True
# 実行
$ python3 lesson/lessonFunctionScope/main.py
「こんにちは」と返す関数を実装してください。
# 実行
$ python3 answer/lessonFunctionScope/task1.py
# 出力
こんにちは
デフォルト引数を使って変数の指定有無に関わらず文字列を表示する関数を実装してください。
# 実行
$ python3 answer/lessonFunctionScope/task2.py
# 出力
# func1()
Hello
# func1("Good Morning")
Good Morning
「足し算」「引き算」「掛け算」「割り算」するそれぞれ4つの関数を実装してください。
# 実行
$ python3 answer/lessonFunctionScope/task3.py
# 出力
10 + 2 = 12
10 - 2 = 8
10 * 2 = 20
10 / 2 = 5
# 実行
$ python3 lesson/lessonListTuple/main.py
文字列のリスト型を作り、全ての要素を表示してください。
# 実行
$ python3 answer/lessonListTuple/task1.py
# 出力
['a', 'i', 'u', 'e', 'o']
文字列のリスト型を2つを連結して新しいリスト型を作り、全ての要素を表示してください。
# 実行
$ python3 answer/lessonListTuple/task2.py
# 出力
values1 ['a', 'i', 'u', 'e', 'o']
values2 ['ka', 'ki', 'ku', 'ke', 'ko']
values3 ['a', 'i', 'u', 'e', 'o', 'ka', 'ki', 'ku', 'ke', 'ko']
文字列のリスト型を作り、「リストの長さ」「先頭の要素」「末端の要素」を表示してください。
# 実行
$ python3 answer/lessonListTuple/task3.py
# 出力
values1 ['a', 'i', 'u', 'e', 'o']
length 5
first a
last o
以下のリスト型から "World" が格納されている位置と "!" の個数を表示してください。
["Hello", "World", "!", "Good", "Morning", "!"]
["World", "Wide", ".", "!", "Morning", "!"]
# 実行
$ python3 answer/lessonListTuple/task4.py
# 出力
values1 ['Hello', 'World', '!', 'Good', 'Morning', '!']
values1 index:1 count:2
values2 ['World', 'Wide', '.', '!', 'Morning', '!']
values2 index:0 count:2
タプル型を作り、全ての要素を表示してください。
# 実行
$ python3 answer/lessonListTuple/task5.py
# 出力
('Hello', 100, 'World', 0.123)
# 実行
$ python3 lesson/lessonSet/main.py
以下の集合型データから "Hello" が含まれていることを証明してください。
values = {0, "H", "e", "Good", "Hello", "Morning", 100}
# 実行
$ python3 answer/lessonSet/task1.py
# 出力
{0, 'Morning', 100, 'Good', 'e', 'H', 'Hello'}: Hello is True
以下の二つの集合型データの和集合・積集合・差集合した結果を表示してください。
values1 = {0, 10, 200, 1000, 2, 100}
values2 = {0, 0.01, 2, 600, 10, 100}
# 実行
$ python3 answer/lessonSet/task2.py
# 出力
OR: {0, 2, 100, 1000, 200, 10, 0.01, 600}
AND: {0, 2, 10, 100}
DIFF: {1000, 200}
# 実行
$ python3 lesson/lessonDictionary/main.py
以下の情報の辞書型データを作成してください。
name: Sakurai
age: 20
hobby: eating
like: music
girlfriend: nothing
# 実行
$ python3 answer/lessonDictionary/task1.py
# 出力
{'name': 'Sasuke', 'age': 20, 'hobby': 'eating', 'like': 'music', 'girlFriend': 'nothing'}
以下の辞書型データから"hobby"と"isHasGirldFriend"の値を表示してください
values = {"name": "Sasuke", "age": 20, "hobby": "running", "like": "music", "isHasGirlFriend": False}
# 実行
$ python3 answer/lessonDictionary/task1.py
# 出力
hobby is running
isHasGirlFriend is 0
# 実行
$ python3 lesson/lessonIf/main.py
valueの値に応じて以下の文字列を返す関数を実装してください。
範囲: 1 <= value <= 10 文字列: "Top Ranker"
範囲: 10 < value < 50 文字列: "Ranker"
範囲: 50 < value <= 100 文字列: "Normal Ranker"
範囲: else 文字列: "Unknow"
# 実行
$ python3 answer/lessonIf/task1.py
# 出力
value 1: Top Ranker
value 13: Ranker
value 90: Normal Ranker
value 200: Unknow
足し算、引き算、掛け算、割り算する関数を実装してください。
ただし計算の種別の引数を指定して条件判断を行い計算するようにしてください。
# 実行
$ python3 answer/lessonIf/task2.py
# 出力
10 + 3: 13
10 - 3: 7
10 * 3: 30
10 / 3: 3.333333
コンソール上から Hello を入力すると Nice to meet you. と返し、それ以外の文字列の場合は Unknow と表示する条件判断式を実装してください。
コンソールからの入力は input 構文を使います。
# 実行
$ python3 answer/lessonIf/task3.py
# 出力
Please input text > Hello
Nice to meet you.
Please input text > Good
Unknow
# 実行
$ python3 lesson/lessonFor/main.py
range(5)をforループで実装してください。
# 実行
$ python3 answer/lessonFor/task1.py
# 出力
0
1
2
3
4
forループを使って以下のリストの全ての要素を2倍にして表示してください。
values = [2, 4, 5, 7, 8, 12]
# 実行
$ python3 answer/lessonFor/task2.py
# 出力
4
8
10
14
16
24
for文を2つ使ってrange(size)を表示してください。
sizeは任意の数字が入ります。
# 実行
$ python3 answer/lessonFor/task3.py
# 出力
size: 3
i: 0 j: 0
i: 0 j: 1
i: 0 j: 2
i: 1 j: 0
i: 1 j: 1
i: 1 j: 2
i: 2 j: 0
i: 2 j: 1
i: 2 j: 2
forループとif文を使って*を以下のように表示してください。
但し inputでsizeを入力し、size分表示するようにしてください。
*
**
***
****
*****
# 実行
$ python3 answer/lessonFor/task4.py
# 出力
Please input size > 3
*
**
***
Please input size > 5
*
**
***
****
*****
forループとif文を使って*を以下のように表示してください。
但し inputでsizeを入力し、size分表示するようにしてください。
*
**
***
****
*****
# 実行
$ python3 answer/lessonFor/task5.py
# 出力
Please input size > 3
*
**
***
Please input size > 5
*
**
***
****
*****
# 実行
$ python3 lesson/lessonWhile/main.py
5回ループするwhile文を実装し、5回ループ後に Good を表示してください。
# 実行
$ python3 answer/lessonWhile/task1.py
# 出力
loop i 0
loop i 1
loop i 2
loop i 3
loop i 4
Good
5回ループするwhile文を実装し、1回目はDog、2回目はCatを表示して3回目でbreakしてループを抜けてください。
# 実行
$ python3 answer/lessonWhile/task2.py
# 出力
loop i 0
Dog
loop i 1
Cat
loop i 2
Break
# 実行
$ python3 lesson/lessonIterGene/main.py
以下のリストをイテレータ化して全て取り出してください。
values = ["Hello", "world", "Good", "morning"]
# 実行
$ python3 answer/lessonIterGene/task1.py
# 出力
Hello
world
Good
morning
以下のリストをジェネレータ化して全て取り出してください。
values = ["Hello", "world", "Good", "morning"]
# 実行
$ python3 answer/lessonIterGene/task2.py
# 出力
Hello
world
Good
morning
# 実行
$ python3 lesson/lessonLambda/main.py
値を10倍にするLambda関数を実装してください。
# 実行
$ python3 answer/lessonLambda/task1.py
# 出力
5 => 50
以下の関数をLambda関数で実装してください。
def func1(a, b):
return a - b
# 実行
$ python3 answer/lessonLambda/task2.py
# 出力
5 - 2 = 3
# 実行
$ python3 lesson/lessonListOperate/main.py
sortを使って以下のリストを昇順・降順に並べ替えてください。
values = [10, 2, 300, 1, 0, 6, 9]
# 実行
$ python3 answer/lessonListOperate/task1.py
# 出力
asc [0, 1, 2, 6, 9, 10, 300]
desc [300, 10, 9, 6, 2, 1, 0]
mapを使って以下のリストの要素を全て10倍にしてください。
values = [10, 2, 300, 1, 0, 6, 9]
# 実行
$ python3 answer/lessonListOperate/task1.py
# 出力
[100, 20, 3000, 10, 0, 60, 90]
filterを使って以下のリストを10以上の要素だけをフィルタリングしてください。
values = [12, 2, 300, 1, 0, 6, 9]
# 実行
$ python3 answer/lessonListOperate/task3.py
# 出力
filter [12, 300]
sortedを使って以下のリストのageの値で昇順・降順に並べ替えてください。
values = [
{"name": "taro", "age": 20},
{"name": "ueno", "age": 32},
{"name": "tanaka", "age": 10},
]
# 実行
$ python3 answer/lessonListOperate/task4.py
# 出力
asc [{'name': 'tanaka', 'age': 10}, {'name': 'taro', 'age': 20}, {'name': 'ueno', 'age': 32}]
desc [{'name': 'ueno', 'age': 32}, {'name': 'taro', 'age': 20}, {'name': 'tanaka', 'age': 10}]
mapを使って以下のリストのscoreの値を全て10倍にしてください。
values = [
{"name": "taro", "score": 1},
{"name": "ueno", "score": 4},
{"name": "tanaka", "score": 8},
]
# 実行
$ python3 answer/lessonListOperate/task5.py
# 出力
map [{'name': 'taro', 'score': 10}, {'name': 'ueno', 'score': 40}, {'name': 'tanaka', 'score': 80}]
filterを使って以下のリストのscoreを100以上の要素だけをフィルタリングしてください。
values = [
{"name": "taro", "score": 10},
{"name": "ueno", "score": 40},
{"name": "tanaka", "score": 200},
{"name": "hanako", "score": 90},
{"name": "baba", "score": 120},
]
# 実行
$ python3 answer/lessonListOperate/task6.py
# 出力
filter [{'name': 'tanaka', 'score': 200}, {'name': 'baba', 'score': 120}]
# 実行
$ python3 lesson/lessonClass/main.py
以下のクラス変数をもったクラスを作成してください。クラス変数に値を設定した後に、クラス関数でクラス変数の内容を表示してください。
name = "Taro"
score = 100
# 実行
$ python3 answer/lessonClass/task1.py
# 出力
My name is Taro. My score is 100.
「足し算」「引き算」「掛け算」「割り算」するそれぞれ4つの関数をもったクラスを実装してください。
# 実行
$ python3 answer/lessonClass/task2.py
# 出力
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3.333333
# 実行
$ python3 lesson/lessonInheritance/main.py
Bossクラスを継承したクラスでBossクラスのshow_otakaraを実行してotakaraを表示してください。
Bossクラス
class Boss:
def __init__(self):
self.otakara = "Otakara is shinsaibashi."
def show_otakara(self):
print(self.otakara)
# 実行
$ python3 answer/lessonInheritance/task1.py
# 出力
Otakara is shinsaibashi.
Bossクラスを継承したKobunクラスのshow_my_salaryを実行してBossクラスのkobun_salaryを表示してください。
BossクラスとKobunクラス
class Boss:
def __init__(self):
self.kobun_salary = 200000
def get_salary(self):
return self.kobun_salary
class Kobun(Boss):
def __init__(self):
super().__init__()
def show_my_salary(self):
"""
ここでget_salaryを呼んでkobun_salaryを表示してください
"""
# 実行
$ python3 answer/lessonInheritance/task2.py
# 出力
My salary is 200000.
# 実行
$ python3 lesson/lessonType/main.py
str, int, float, bool型の値に応じて任意の文字列を返す関数を実装してください。
型の判定は type() を使ってください。
# 実行
$ python3 answer/lessonType/task1.py
# 出力
value -> This is str.
100 -> This is int.
1.230000 -> This is float.
True -> This is bool.
str, int, float, bool型の値に応じて任意の文字列を返す関数を実装してください。
型の判定は isinstance() を使ってください。
# 実行
$ python3 answer/lessonType/task2.py
# 出力
value -> This is str.
100 -> This is int.
1.230000 -> This is float.
True -> This is bool.
# 実行
$ python3 lesson/lessonModulePackage/main.py
「Hello World」と表示する hello_world.py を作成し、main.pyから呼び出してください。
また「足し算」「引き算」「掛け算」「割り算」するそれぞれ4つの関数を実装した calc.py を作成し、main.pyでcalc.pyをimportしてそれぞれの計算結果を表示してください。
ディレクトリ構成は以下の通りです
.
└── lessonModulePackage
├── hello_world.py
├── main.py
└── util
├── __init__.py
└── calc.py
# 実行
$ python3 answer/lessonModulePackage/main.py
# 出力
Hello world
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3.333333
# 実行
$ python3 lesson/lessonDate/main.py
日付型で現在日時を表示してください。さらに "2019/1/1 18:20:30" のフォーマットで現在日時を文字列へ変換して表示してください。
# 実行
$ python3 answer/lessonDate/task1.py
# 出力
2019-04-26 06:58:56.406846
2019/04/26 06:58:56
"2019/1/1 18:20:30"の文字列を日付型へ変換して表示してください。
# 実行
$ python3 answer/lessonDate/task2.py
# 出力
2019-01-01 18:20:30
時間によって挨拶を表示する関数を実装してください。
- 5時 - 11時: おはようございます
- 12時 - 18時: こんにちは
- 18時 - 0時: こんばんは
- 1時 - 4時: 夜更かしさん
# 実行
$ python3 answer/lessonDate/task3.py
# 出力
5時 -> おはようございます
13時 -> こんにちは
20時 -> こんばんは
0時 -> 夜更かしさん
# 実行
$ python3 lesson/lessonMath/main.py
-20.310 の「2乗して四捨五入した整数」「絶対値」「切り上げ」「小数点以下を切り捨た最大整数」を表示してください。
# 実行
$ python3 answer/lessonMath/task1.py
# 出力
412
20.31
-20
-21
# 実行
$ python3 lesson/lessonExcept/main.py
100 / 0 を行いエラーを発生させて例外処理でエラー要因を表示させてください。
# 実行
$ python3 answer/lessonExcept/task1.py
# 出力
except division by zero
forループを利用して「0から5までカウントする処理」を実装し、3の段階で例外処理を発生させるよう実装してください。
# 実行
$ python3 answer/lessonExcept/task2.py
# 出力
0
1
2
3
except error by raise
# 実行
$ python3 lesson/lessonFile/main.py
コードからディレクトリとファイルを作成してください。
ディレクトリ構成は以下の通りです。
.
└── Dir
├── file.py
└── Child
├── __init__.py
└── file.py
また ファイルの内容は以下の通りです。
file.py
print("Hello world")
_init_.py
# none
作成後、コードからtreeを呼び出しディレクトリ構成をコンソール上に表示してください。
コードからtreeを呼び出す際は subprocess をimportして利用してください。
https://docs.python.org/ja/3/library/subprocess.html
# 実行
$ python3 answer/lessonFile/task1.py
# 出力
├── Dir
│ ├── Child
│ │ ├── __init__.py
│ │ └── file.py
│ └── file.py
└── task1.py
2 directories, 4 files
# 実行
$ python3 lesson/lessonWith/main.py
__enter__, __exit__, __del__
を実装したクラスを作成し、with文で実行されることを確認してください。
# 実行
$ python3 answer/lessonWith/task1.py
# 出力
enter <__main__.Model object at 0x10e3f2be0>
exit <__main__.Model object at 0x10e3f2be0>
del <__main__.Model object at 0x10e3f2be0>
# 実行
$ python3 lesson/lessonTypeAliases/main.py
str型とstrのList型を別名で定義してそれぞれの型のデータを表示する関数を実装してください。
# 実行
$ python3 answer/lessonTypeAliases/task1.py
# 出力
show_value: a
show_values: ['a', 'b', 'c']
# 実行
$ python3 lesson/lessonGenerics/main.py
何も制約されていないGenericsを作成し、Genericsのデータリストを表示する関数を実装してください。
# 実行
$ python3 answer/lessonGenerics/task1.py
# 出力
[1, 2, 3]
['a', 'b', 'c']
Genericsをクラス内部で扱えるよう定義し、そのGenericsのsetとget関数を持ったクラスを作成してください。
作成したクラスの使い方は以下の通りです。
model1 = Model[int]()
model1.set_value(123)
print(model1.get_value())
model2 = Model[str]()
model2.set_value('aiueo')
print(model2.get_value())
# 実行
$ python3 answer/lessonGenerics/task2.py
# 出力
123
aiueo
文字列の置換、分割、検索操作を行い、正規表現を利用して操作できることを確認する。
正規表現とは様々な文字列を一つの文字列で表現する。文字列の検索、置換、分割する際に利用される
# 実行
$ python3 lesson/lessonRegx/main.py
課題で利用する文字列です。
content: str = 'abcdefg:-:12345678:ABCD:abc:efg:?:123efg456'
正規表現を用いて、文字列の数字を全て"!"に置換してください。
# 実行
$ python3 answer/lessonRegx/task1.py
# 出力
abcdefg:-:!:ABCD:abc:efg:?:!efg!
正規表現を用いて、文字列の「数字」と「大文字の英語」を全て"!"に置換してください。
複数の正規表現のパターンを用いる場合はパイプか文字クラスを使ってOR、ANDを表現します。
# 実行
$ python3 answer/lessonRegx/task2.py
# 出力
abcdefg:-:!:!:abc:efg:?:!efg!
splitを用いて":"区切りで文字列を分割し、正規表現を用いて分割した文字列の「数字」と「大文字の英語」を全て"!"に置換した文字列を表示してください。
# 実行
$ python3 answer/lessonRegx/task3.py
# 出力
abcdefg-!!abcefg?!efg!
正規表現を用いて、以下の文字列がメールアドレスかどうか判定できるよう実装してください。
content1: str = 'test@test.com'
content2: str = 'dummy'
content3: str = 'https://google.com'
メールアドレスの正規表現は以下の通りです。
pattern: str = r'^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$'
# 実行
$ python3 answer/lessonRegx/task4.py
# 出力
test@test.com -> True
dummy -> False
https://google.com -> False
beautifulsoup4 ライブラリをインストール。
$ pip3 install beautifulsoup4
[Windowsの場合] (http://tamadasoft.com/index.php/2018/05/01/pycharm_beautifulsoup_import/)
# 実行
$ python3 lesson/lessonScraping/main1.py
# 実行
$ python3 lesson/lessonScraping/main2.py
以下のHTML要素からcontent内のtitleとhrefを取得してCSVファイルへ出力し、CSVファイルが正常に出力されていることを確認してください。
<!DOCTYPE html>
<html>
<head>
<title>Webスクレイピング</title>
</head>
<body>
<div id="wrapper">
<h1>タイトル</h1>
<div class="content">
<a href="https://newspicks.com/">NewsPicks</a>
<a href="https://www.yahoo.co.jp/">Yahoo Japan</a>
<a href="https://www.nikkei.com/">日本経済新聞</a>
</div>
</div>
</body>
</html>
# 実行
$ python3 answer/lessonScraping/task1.py
# 出力
['0', 'NewsPicks', 'https://newspicks.com/']
['1', 'Yahoo Japan', 'https://www.yahoo.co.jp/']
['2', '日本経済新聞', 'https://www.nikkei.com/']
任意のWebサイトをスクレイピングした情報をCSVへ出力し、CSVファイルが正常に出力されていることを確認してください。
# 実行
$ python3 answer/lessonScraping/task2.py
# 出力
url is https://www.nikkei.com 2019/05/03 15:19:17
['0', '5G特許出願、**が最大\u3000世界シェア3分の1', 'https://www.nikkei.com/article/DGXMZO44412620T00C19A5MM8000/']
['1', '幼少から深めた自覚\u3000歴代の姿も探求', 'https://www.nikkei.com/article/DGXMZO44412580S9A500C1CZ8000/']
['2', ' 「大きな道しるべ」\u3000象徴天皇のバトン', 'https://www.nikkei.com/article/DGXMZO44407820S9A500C1EA1000/']
['3', '訪日客が招く「観光公害」\u3000川越・京都…住民に影響も', 'https://www.nikkei.com/article/DGXMZO44266480W9A420C1SHA000/']
['4', '**、AIで7つの優位(FT)', 'https://www.nikkei.com/article/DGXMZO44244690W9A420C1TCR000/']
['5', '「変化受け止め、次の革新へ」\u3000経団連・中西宏明会長', 'https://www.nikkei.com/article/DGXMZO44277290W9A420C1SHA000/']
['6', '**対抗へ「官民学で連携強化を」\u3000前米大統領補佐官', 'https://www.nikkei.com/article/DGXMZO44415700T00C19A5000000/']