ソースコード一覧
目次
price = 300
print(price)
tax = price * 0.1
print(tax)
print(12345)
print(12.345)
print(12+345j)
print("123")
print("a")
print("")
print("こんにちは")
print("안녕하세요")
print('それは"イチゴ"です')
message = """こんにちは!
これは複数行に渡る
文字列です。"""
print(message)
print(True)
print(False)
print([10, 20, 30])
print([True, True, False])
print(["田中宏", 18, 68.2, 175.5])
x = 1.5
y = x * 13
print(y)
x = 3.2
y = x * 13
print(y)
a = 10
print(a)
a = 10
a = 20
print(a)
a, b, c = 10, 20, 30
print(a, b, c)
a = b = c = 0
print(a, b, c)
name = input()
print(name)
price = input() # 300を入力します
tax = int(price) * 0.1
print(tax)
price = int(input()) # 300を入力します
tax = price * 0.1
print(tax)
price = int(input("価格>"))
print(price)
print("こんにちは!")
print(42)
name="太郎"
print(name)
name, age, addr= "田中", 20, "東京"
print(name, age, addr)
print("-" * 20)
msg = input() # "こんにちは"を入力します
print(f"入力した文字列は{msg}です")
var = int(input()) # 100を入力します
print(f"入力値+20 = {var + 20}")
print("apple\nbanana\ncherry")
print("apple\tbanana\tcherry")
print("こんにちは")
print("田中さん")
print("こんにちは", end="")
print("田中さん")
print("こんにちは", end=" ")
print("田中さん")
print(100, 120, 80, sep="\t")
print(90, 50, 130, sep="\t")
n = 1234567
print(f"[{n:15,}]") # [ 1,234,567] 15桁、デフォルト(数値は右寄せ)、コンマ区切り
print(f"[{n:<15,}]") # [1,234,567 ] 15桁、左寄せ、コンマ区切り
print(f"[{n:>15,}]") # [ 1,234,567] 15桁、右寄せ、コンマ区切り
print(f"[{n:^15,}]") # [ 1,234,567 ] 15桁、中央寄せ、コンマ区切り
import math
print(math.log(10))
print(math.log(20))
from tkxlib import dice
number = dice()
print(number)
ans1 = 6 + 3 * 2 # 12
ans2 = (6 + 3) * 2 # 18
print(ans1, ans2)
n = 10 / 3
print(n)
mod = 10 % 3 # 1
print(mod)
mod = 15 % 4 # 3
print(mod)
mod = 20 % 2 # 0、 20は2の倍数
print(mod)
n = 2 ** 3
print(n)
n = 2 ** 0.5
print(n)
var = 10
var = var + 1
print(var)
var = 10
var += 1 # var = var + 1 と同じ
print(var)
a, b = 10, 20
print(a == b)
print(a != b)
a, b = 10, 20
print(a < b)
print(a > b)
a, b = 10, 10
print(a <= b)
print(a >= b)
x = 13
print(10 < x < 20)
a, b = 6, [2,4,6,8]
print(a in b)
print(a not in b)
a = 1024
b = 1024
print(id(a))
print(id(b))
a = None
b = None
print(id(a))
print(id(b))
a = None
print(a is None)
x = 20
print(10 <= x < 100) # 比較演算子だけで書ける
color = "白"
print((color == "白") or (color == "黒"))
color = "白"
print(not (color == "青"))
drinking, smoking = 5, 0
print((drinking >= 2) and (smoking == 0))
from tkxlib import dice
number = dice()
if number == 6:
print("当たり") # ifのコードブロック
else:
print("はずれ") # elseのコードブロック
from tkxlib import dice
number = dice()
# 出目に応じて結果を表示する
if number == 6:
print("当たり")
else:
print("はずれ")
from tkxlib import dice
number = dice()
if number == 1:
print("出目は1")
elif number == 2:
print("出目は2")
elif number == 3:
print("出目は3")
else:
print("出目は1、2、3ではない")
from tkxlib import dice
number = dice()
# 出目に応じて表示内容を分岐する
if number == 1:
print("出目は1")
elif number == 2:
print("出目は2")
elif number == 3:
print("出目は3")
else:
print("出目は1、2、3ではない")
height = float(input("身長(cm)> "))
weight = float(input("体重(kg)> "))
bmi = weight / ((height / 100) ** 2)
bmi = round(bmi, 1)
# BMIの値に応じて区分を表示する
if bmi >= 30:
print("肥満:", bmi)
elif bmi >= 25:
print("太りすぎ:", bmi)
elif bmi >= 18.5:
print("健康:", bmi)
else:
print("低体重:", bmi)
x = int(input("整数> "))
if x < 0:
x *= -1
print(x ** 0.5)
from tkxlib import dice
number = dice()
message = "当たり" if number == 6 else "はずれ"
print(message)
for num in [21, 35, 16]:
print(num)
numbers = [21, 35, 16]
for num in numbers:
print(num)
for i in range(3):
print("Hello")
"""
3回繰り返す
│
└─↻─for: i ← range(3)
│
└─ iと "Hello" をスペースで区切って表示する
"""
# 3回繰り返して番号とメッセージを表示する
for i in range(3):
print(i, "Hello")
# 得点のリストを用意する
scores = [85, 92, 45, 78, 55, 95]
# 各得点の合否を判定して表示する
for score in scores:
if score >= 60:
grade = "合格"
else:
grade = "不合格"
print(f"{score}:{grade}")
scores = [
66, 95, 58, 72, 45, 80, 61, 75, 35, 88,
64, 53, 70, 40, 78, 63, 82, 55, 67, 48,
73, 68, 50, 62, 77, 74, 71, 60, 69, 65,
]
out = exe = pro = bas = ins = 0
# 得点を階級別に集計する
for score in scores:
# 得点に応じて該当する階級の人数を増やす
if score >= 90:
out += 1
elif score >= 80:
exe += 1
elif score >= 70:
pro += 1
elif score >= 60:
bas += 1
else:
ins += 1
print(f"out: {out}")
print(f"exe: {exe}")
print(f"pro: {pro}")
print(f"bas: {bas}")
print(f"ins: {ins}")
data = [42.7, 8.3, 91.5, 15.0, 3.9, 67.2, -24.8, 0.6, 59.1, 88.4]
# データを順番に処理して平方根を計算する
for x in data:
# 負の値なら警告して処理を終了する
if x < 0:
print(f"負の値です: {x}")
break
square_root = round(x**0.5, 2)
print(f"{x}:\t{square_root}")
print("=処理終了=")
data = [42.7, 8.3, 91.5, 15.0, 3.9, 67.2, -24.8, 0.6, 59.1, 88.4]
# リストの各要素を順に処理する
for x in data:
# 値が負の場合の処理を行う
if x < 0:
print(f"負の値です: {x}")
continue
square_root = round(x**0.5, 2)
print(f"{x}:\t{square_root}")
print("=処理終了=")
from tkxlib import get_int
total = 0
# 0が入力されるまで整数を受け取り、合計する
while True:
value = get_int()
if value == 0:
break
print(value)
total += value
# 合計結果を表示する
print("-----")
print("合計:", total)
from tkxlib import get_int
total = 0
# 入力された整数を合計する
while (value := get_int()) != 0:
print(value)
total += value
# 集計結果を表示する
print("-----")
print("合計:", total)
names = ["Tom", "Mary", "John", "Alice"]
weights = [70.5, 55.0, 71.2, 50.1]
print(names)
print(weights)
mix = ["Tom", 18, 70.5, 175.5]
print(mix)
numbers = list(range(10))
print(numbers)
ls1 = []
ls2 = list() # コンストラクタ呼び出し
data = [[65.5, 172.8],[50.8, 158.2],[75.7, 178.3]]
print(data)
data = [{"weight":65.5, "height":172.8},{"weight":50.8, "height":158.2}]
print(data)
# [0] [1] [2] [3]
names = ["Tom", "Mary", "John", "Alice"]
print(names[2])
# [-4] [-3] [-2] [-1]
names = ["Tom", "Mary", "John", "Alice"]
print(names[-1])
names = ["Tom", "Mary", "John", "Alice"]
names[1] = "Bob"
print(names)
data = [ [65.5, 172.8],
[50.8, 158.2],
[75.7, 178.3] ]
print(data[0][0], data[0][1])
print(data[1][0], data[1][1])
print(data[2][0], data[2][1])
names = ["Tom", "Mary", "John", "Alice"]
for name in names:
print(name)
data = [[65.5, 172.8], [50.8, 158.2], [75.7, 178.3]]
for person in data:
print(person)
data = [[65.5, 172.8], [50.8, 158.2], [75.7, 178.3]]
for person in data:
print(person[0], person[1])
data = [[65.5, 172.8], [50.8, 158.2], [75.7, 178.3]]
for weight, height in data:
print(weight, height)
a, b = (10, 20) # タプル
c, d = {"name": "田中", "score": 90} # 辞書
print(a, b)
print(c, d)
s = "hello".upper()
print(s)
b = (255).bit_length()
print(b)
msg = "hello"
s = msg.upper()
print(s)
number = 255
b = number.bit_length()
print(b)
fruits = ["apple", "banana"]
fruits.append("orange")
print(fruits)
numbers = [1, 2, 3]
numbers.extend([4, 5, 6])
print(numbers)
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c)
colors = ["red", "blue"]
colors.insert(1, "green")
print(colors)
animals = ["cat", "dog", "cat", "bird"]
animals.remove("cat")
print(animals)
stack = [1, 2, 3, 4, 5]
elm = stack.pop()
print(elm, stack)
stack = [1, 2, 3, 4, 5]
elm = stack.pop(2)
print(elm, stack)
data = [1, 2, 3, 4, 5]
data.clear()
print(data)
animals = ["dog", "cat", "rabbit", "cat", "bird"]
pos = animals.index("cat")
print(pos)
animals = ["dog", "cat", "rabbit", "cat", "bird"]
count = animals.count("cat")
print(count)
numbers = [8, 2, 5, 7, 6, 3, 4, 1]
numbers.sort()
print(numbers)
names = ["Mary", "Tom", "Alice", "Jon"]
names.sort()
print(names)
numbers = [8, 2, 5, 7, 6, 3, 4, 1]
numbers.sort(reverse=True)
print(numbers)
names = ["Mary", "Tom", "Alice", "Jon"]
names.reverse()
print(names)
original = [1, 2, 3]
copied = original.copy()
print(copied)
csv = "山田太郎,65.5,172.8"
data = csv.split(",")
print(data)
ls = ['山田太郎', '65.5', '172.8']
csv = ",".join(ls)
print(csv)
scores = [55, 75, 58, 66, 81, 72, 95, 68, 71, 85]
max_score = max(scores)
min_score = min(scores)
mean_score = round(sum(scores) / len(scores), 1)
print(f"最大値={max_score}、最小値={min_score}、平均値={mean_score}")
scores = [55, 75, 58, 66, 81, 72, 95, 68, 71, 85]
sorted_scores = sorted(scores)
print(sorted_scores)
data = [
"名前,体重(kg),身長(cm)",
"山田太郎,65.5,172.8",
"佐藤花子,50.8,158.2",
"鈴木一郎,75.7,178.3",
"== end of data ==",
]
rows = data[1:-1]
# rowsの要素を1つずつ順に処理する
for csv in rows:
people = csv.split(",")
print(people)
numbers = [3, 2, 5]
new_numbers = [x * 2 for x in numbers]
print(new_numbers)
numbers = [2, 7, 8, 5, 6]
new_numbers = [x * 2 for x in numbers if x % 2 == 0]
print(new_numbers)
data = [[65.5, 172.8], [50.8, 158.20], [75.7, 178.3]]
bmi = [weight / (height / 100) ** 2 for weight, height in data]
print(bmi)
animals = ["dog", "cat", "rabbit"]
for i, animal in enumerate(animals):
print(i, animal)
animals = ["dog", "cat", "rabbit"]
for i, animal in enumerate(animals, start=1):
print(i, animal)
names = ["田中","佐藤", "山田"]
heights = [175.3, 163.5, 182.1]
for name, height in zip(names, heights):
print(name, height)
names = ["田中", "佐藤", "山田"]
weights = [70.2, 55.0, 68.4]
heights = [175.3, 163.5, 182.1]
people = list(zip(names, weights, heights))
print(people)
t1 = (1, 2, 3)
t2 = (1,) # 要素が1つの時は末尾にコンマが必要です
t3 = () # 空のタプル
t4 = tuple([1, 2, 3]) # リストから生成
t = (1, 2, 3, 4, 5)
print(t[1])
print(t[2:])
t1 = (1, 2, 3) + (4, 5) # 結合
t2 = (0,) * 3 # 繰り返し
print(t1)
print(t2)
a, b, c = (1, 2, 3)
print(a, b, c)
a, *b = (1, 2, 3) # *bは、拡張アンパック:残りの要素をリストにしてbに代入する
print(a, b)
t = (10, 20, 30, 40, 50)
print(len(t))
t = ("apple", "banana", "cherry", "banana", "date")
print(t.index("banana"))
t = ("apple", "banana", "cherry", "banana", "date")
print(t.count("banana"))
s1 = {1, 2, 3}
s2 = set() # 空のセット。 {}は空の辞書になるので使いません。
s3 = set([1, 2, 3]) # リストから生成
numbers = [5, 3, 2, 5, 1, 2]
set_numbers = set(numbers) # セットを作って重複を削除する
print(set_numbers)
s = {10, 20, 30, 40, 50}
print(len(s))
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b) # 和
print(a & b) # 積
print(a - b) # 差
print(a ^ b) # 対称差
a = {1, 2, 3, 4, 5}
b = {2, 3, 4}
print(a >= b) # aはbのスーパーセットか
print(a <= b) # aはbのサブセットか
fset = frozenset({4, 5, 6})
s1 = {"apple", "banana", "orange", "grape", "kiwi"}
s1.add("peach")
print(s1)
s1 = {"apple", "banana", "orange", "grape", "kiwi"}
s1.remove("orange")
print(s1)
s1 = {"apple", "banana", "orange", "grape", "kiwi"}
s1.discard("watermelon") # 存在しない要素をdiscardしてもエラーにならない
print(s1)
s1 = {"apple", "banana", "orange", "grape", "kiwi"}
removed = s1.pop()
print(removed)
print(s1)
s1 = {"apple", "banana", "orange", "grape", "kiwi"}
s1.clear()
print(s1)
s1 = {"apple", "banana", "orange", "grape", "kiwi"}
s2 = s1.copy()
print(s2)
# すべての型のオブジェクトを作成しておく
ls = list(range(1, 4))
tp = tuple([1, 2, 3])
st = set([1, 2, 3])
fs = frozenset({1, 2, 3})
# リストへの変換
ls = list(tp)
ls = list(st)
ls = list(fs)
# タプルへの変換
tp = tuple(ls)
tp = tuple(st)
tp = tuple(fs)
# セットへの変換
st = set(tp)
st = set(ls)
st = set(fs)
# frozensetへの変換
fs = frozenset(tp)
fs = frozenset(ls)
fs = frozenset(st)
user = {"id": 1001, "name": "田中太郎", "mail": "tanaka@mail.jp"}
user = {
"id": 1001,
"name": "田中太郎",
"mail": "tanaka@mail.jp",
}
# 2次元グリッドの例(ゲームのマップ)
grid = {
(0, 0): "スタート",
(1, 0): "壁",
(1, 1): "落とし穴",
(2, 2): "ゴール",
}
user = {
"id": 1001,
"name": "田中太郎",
"mail": "tanaka@mail.jp",
}
print(user["id"])
print(user["name"])
print(user["mail"])
user = {
"name": "田中太郎",
"id": 1001,
"mail": "tanaka@mail.jp",
}
# "mail"の値を変更する
user["mail"] = "tanaka@mail.com"
print(user)
user = {
"name": "田中太郎",
"id": 1001,
"mail": "tanaka@mail.jp",
}
# 新しい要素age:20を追加する
user["age"] = 20
print(user)
user = {
"name": "田中太郎",
"id": 1001,
"mail": "tanaka@mail.jp",
"age": 20,
}
age = user.pop("age")
print(age)
print(user)
user = {
"name": "田中太郎",
"id": 1001,
"mail": "tanaka@mail.jp",
}
del user["mail"]
print(user)
book = {"title": "坊ちゃん", "author": "夏目漱石", "stock": 10}
if "price" in book:
print(book["price"])
else:
print("キー'price'がない")
book = {"title": "坊ちゃん", "author": "夏目漱石", "stock": 10}
print(book.get("price", "価格の情報はありません"))
default_config = {"debug": False, "port": 8080}
user_config = {"debug": True, "output": "file"}
final_config = default_config | user_config
print(final_config)
score = {"id": 1201, "English": 90, "Math": 85, "Language": 92}
# 辞書のキーと値を順番に表示する
for key in score:
print(f"{key}:{score[key]}")
score = {"id": 1201, "English": 90, "Math": 85, "Language": 92}
keys = score.keys() # キーのビュー
values = score.values() # 値のビュー
items = score.items() # キーと値のビュー
print(keys)
print(values)
print(items)
score = {"id": 1201, "English": 90, "Math": 85, "Language": 92}
# 辞書のキーと値を順に表示する
for key, value in score.items():
print(f"{key}:{value}")
users = [
{"id": 103, "name": "tanaka", "role": "admin"},
{"id": 105, "name": "sasaki", "role": "user"},
{"id": 100, "name": "maeda", "role": "user"},
]
users = [
{"id": 103, "name": "tanaka", "role": "admin"},
{"id": 105, "name": "sasaki", "role": "user"},
{"id": 100, "name": "maeda", "role": "user"},
]
# ユーザー一覧からsasakiを検索して表示する
for user in users:
if user["name"] == "sasaki":
print(user["id"], user["name"], user["role"])
break
user_map = {
"tanaka": {"id": 103, "role": "admin"},
"sasaki": {"id": 105, "role": "user"},
"maeda": {"id": 100, "role": "user"},
}
users = [
{"id": 103, "name": "tanaka", "role": "admin"},
{"id": 105, "name": "sasaki", "role": "user"},
{"id": 100, "name": "maeda", "role": "user"},
]
user_map = {}
# ユーザー一覧から名前をキーにした辞書を作成する
for user in users:
user_id, name, role = user["id"], user["name"], user["role"]
user_map[name] = {"id": user_id, "role": role}
user = user_map["sasaki"]
print("sasaki", user["id"], user["role"])
numbers = [1, 2, 3]
# 数値をキー、2乗値を値にした辞書を作成する
square_map = {n: n ** 2 for n in numbers}
print(square_map)
users = [
{"id": 103, "name": "tanaka", "role": "admin"},
{"id": 105, "name": "sasaki", "role": "user"},
{"id": 100, "name": "maeda", "role": "user"},
]
# ユーザー一覧から検索用の辞書を作成する
user_map = {
user["name"]: {"id": user["id"], "role": user["role"]}
for user in users
}
user = user_map["sasaki"]
print("sasaki", user["id"], user["role"])
func = lambda x: x**2 + 1
ans = func(3.0)
print(ans)
users = [
{"id": 103, "name": "tanaka", "role": "admin"},
{"id": 105, "name": "sasaki", "role": "user"},
{"id": 100, "name": "maeda", "role": "user"},
]
# ユーザーのリストをidの降順にソートする
users.sort(key=lambda user: user["id"], reverse=True)
for user in users:
print(user)
def print_message():
"""メッセージを表示する。"""
print("こんにちは")
print_message()
def print_message(name):
print(f"こんにちは{name}さん")
print_message("太郎")
def function(x):
"""式の値を計算して返す。"""
return x**2 + x + 1
print(function(10))
def score(math, science, english):
"""3科目の合計と平均を返す。"""
total = math + science + english
average = round(total / 3, 1)
return total, average
total, average = score(80, 70, 60)
print(f"合計={total}、平均={average:.1f}")
def calc_price(price, tax_rate=0.1):
return int(price * (1 + tax_rate))
print(f"価格={calc_price(1000)}")
print(f"価格={calc_price(1000, 0.08)}")
"""
BMI計算プログラム
体重(kg)と身長(cm)をキーボードから入力し、
BMIを計算してコンソールに表示する。
"""
from tkxlib import get_float
def calculate_bmi(weight_kg, height_cm):
"""
体重と身長からBMIを計算する関数
引数:
weight_kg (float): 体重(kg)
height_cm (float): 身長(cm)
戻り値:
float: 小数点以下1桁のBMI
"""
# 身長をcmからmに変換
height_m = height_cm / 100
# BMIを計算
bmi_value = weight_kg / (height_m * height_m)
# 小数点以下1桁までに丸める
return round(bmi_value, 1)
# 体重をキーボード入力
weight = get_float("体重(kg単位)> ")
# 身長をキーボード入力
height_cm = get_float("身長(cm単位)> ")
# BMIを計算
bmi_result = calculate_bmi(weight, height_cm)
# 結果をコンソール表示
print(f"体重:{weight}kg 身長:{height_cm}cm BMI:{bmi_result}")
# インポートされる変数(定数)
APP_NAME = "MyApp"
MAX_COUNT = 100
# インポートされる関数
def greet(name):
return f"こんにちは、{name}さん!"
# インポートされるクラス
class User:
def __init__(self, name):
self.name = name
import math
print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0
from math import pi, sqrt
print(pi) # 3.141592653589793
print(sqrt(16)) # 4.0
import tkxlib as kb
bank = kb.get_str("銀行名 >") # 文字列のキーボード入力
rate = kb.get_float("利率 >") # 浮動小数点数のキーボード入力
import bmi
print("bmiモジュールをインポートしました")
import travel
print("travelモジュールをインポートしました")
from tkxlib import get_float
def calculate_bmi(weight_kg, height_cm):
height_m = height_cm / 100
bmi_value = weight_kg / (height_m * height_m)
return round(bmi_value, 1)
if __name__ == "__main__":
weight = get_float("体重(kg単位)> ")
height_cm = get_float("身長(cm単位)> ")
bmi_result = calculate_bmi(weight, height_cm)
print(f"体重:{weight}kg 身長:{height_cm}cm BMI:{bmi_result}")
from tkxlib import get_float
def calculate_bmi(weight_kg, height_cm):
height_m = height_cm / 100
bmi_value = weight_kg / (height_m * height_m)
return round(bmi_value, 1)
def main():
weight = get_float("体重(kg単位)> ")
height_cm = get_float("身長(cm単位)> ")
bmi_result = calculate_bmi(weight, height_cm)
print(f"体重:{weight}kg 身長:{height_cm}cm BMI:{bmi_result}")
if __name__ == "__main__":
main()
from pathlib import Path
cwd = Path.cwd()
print(cwd)
from pathlib import Path
path = Path("sample.txt")
from pathlib import Path
path = Path("sample.txt")
print(path)
print(path.absolute())
from pathlib import Path
base_path = Path("c:/temp/data")
file_name = input("ファイル名: ")
path = base_path / file_name
print(path)
from pathlib import Path
path = Path("C:/portable-python-vscode/workspace/chapter14/sample.txt")
print(path.name)
print(path.parent)
from pathlib import Path
p = Path("C:/portable-python-vscode/workspace/chapter14/sample.txt")
print(p.exists())
p = Path("C:/portable-python-vscode/workspace/chapter14")
print(p.exists())
from pathlib import Path
p = Path("C:/portable-python-vscode/workspace/chapter14/sample.txt")
print(p.is_file())
print(p.is_dir())
from pathlib import Path
wkspc = Path("C:/portable-python-vscode/workspace")
for p in wkspc.rglob("*"):
if p.is_file():
print(p.name)
# 一括入力して変数に入れる
from pathlib import Path
file_path = Path("sample.txt")
data = file_path.read_text(encoding="utf-8")
print(data)
# (\nを含む)1行ずつ読み出す
from pathlib import Path
file_path = Path("sample.txt")
with file_path.open("r", encoding="utf-8") as f:
for line in f:
print(line, end="")
from pathlib import Path
file_path = Path("sample2.txt")
with file_path.open("w", encoding="utf-8") as f:
f.write("1行目\n")
num = 123
f.write(f"2行目:{num}\n")
f.write(str(num))
from pathlib import Path
data = "1行目の出力データ\n2行目の出力データ\n3行目の出力データ\n"
file_path = Path("sample2.txt")
file_path.write_text(data, encoding="utf-8")
from pathlib import Path
data = ["apple", "banana", "cherry"]
# リスト内包表記で、行末に改行コード(\n)を含むリストを作成する
new_data = [item + "\n" for item in data]
file_path = Path("list.txt")
# テキストファイルを開いてリストを一括出力する。
with file_path.open("w", encoding="utf-8") as f:
f.writelines(new_data)
from pathlib import Path
file_path = Path("no_exist.txt")
try:
data = file_path.read_text(encoding="utf-8")
print(data)
except FileNotFoundError as e:
print(f"ファイルが見つかりません:\n{e}")
from pathlib import Path
file_path = Path("sample.txt")
try:
data = file_path.read_text(encoding="utf-8")
print(data)
except (OSError, UnicodeDecodeError) as e:
print(f"ファイル入力エラーです:\n{e}")
from pathlib import Path
file_path = Path("output.txt")
data = "apple\nbanana\ncherry\n"
try:
file_path.write_text(data, encoding="utf-8")
except (OSError, UnicodeEncodeError) as e:
print(f"ファイル出力エラーです:\n{e}")
from tkxlib import get_float
def sqrt(x):
"""平方根を計算します。"""
# 負の値の平方根計算を防ぐ
if x < 0:
raise ValueError("負の平方根は計算できません")
else:
return x ** 0.5
number = get_float()
# 例外を補足して分かりやすく表示する
try:
result = sqrt(number)
print(f"平方根={round(result, 1):.1f}")
except ValueError as e:
print("エラー\n", e)
import csv
from pathlib import Path
file_path = Path("data.csv")
with file_path.open("r", encoding="utf-8", newline="") as f:
reader = csv.reader(f)
header = next(reader) # readerから1行読み出す
for row in reader:
print(row, "->", row[0], row[1], row[2]) # 要素をインデックスでアクセス
import csv
from pathlib import Path
data = [
["名前","年齢","住所"],
["田中","30","東京"],
["佐藤","25","大阪"],
["鈴木","28","福岡"]
]
file_path = Path("data.csv")
with file_path.open("w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(data)
import csv
from pathlib import Path
file_path = Path("data.csv")
with file_path.open("r", encoding="utf-8", newline="") as f:
dict_reader = csv.DictReader(f)
for row in dict_reader:
# キーでアクセスする
print(row, "->", row["名前"], row["年齢"], row["住所"])
import csv
from pathlib import Path
dict_data = [
{"名前": "田中", "年齢": "30", "住所": "東京"},
{"名前": "佐藤", "年齢": "25", "住所": "大阪"},
{"名前": "鈴木", "年齢": "28", "住所": "福岡"}
]
file_path = Path("data.csv")
with file_path.open("w", encoding="utf-8", newline="") as f:
dict_writer = csv.DictWriter(f, fieldnames=["名前", "年齢", "住所"])
dict_writer.writeheader() # ヘッダー行を書き込む
dict_writer.writerows(dict_data) # データ行を書き込む
from datetime import date
class Person:
"""個人を表すクラス。"""
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
def birth_year(self) -> int:
today = date.today()
return today.year - self.age
# 使い方の例 --------------------------------------
person1 = Person("田中", 15)
person2 = Person("鈴木", 25)
print(person1.name, person1.age, person1.birth_year())
print(person2.name, person2.age, person2.birth_year())
def add(a: str, b: int) -> str:
return a + str(b)
def total(numbers: list[int]) -> int:
return sum(numbers)
def power(base: int, exponent: int = 2) -> int:
return base ** exponent
def func(var):
var[0] = 10 # リストは要素の値を変更できるので、要素[0]の内容を変更します。
data = [1, 2, 3]
func(data)
print(data)
data = 10
print(id(data))
data = 100
print(id(data))
"""インスタンスの作成数をカウントする"""
class User:
count = 0 # インスタンスの作成数
def __init__(self, name) -> None:
self.name = name
User.count += 1 # インスタンスが作成されるたびにカウントを1増やす
# 使用例
print(User.count) # クラスの変数なのでインスタンスがなくても使用できる
user1 = User("田中")
user2 = User("鈴木")
print(User.count) # インスタンスの作成数
class Member:
"""個人を表すクラス。"""
def __init__(self, uid: int, name: str, age: int) -> None:
self.uid = uid
self.name = name
self.age = age
def __str__(self) -> str:
return f"Member(uid={self.uid}, name={self.name}, age={self.age})"
def __repr__(self) -> str:
return f"Member(uid={self.uid!r}, name={self.name!r}, age={self.age!r})"
def __eq__(self, other: object) -> bool:
if not isinstance(other, Member):
return NotImplemented
return self.uid == other.uid
def __hash__(self) -> int:
return hash(self.uid)
class Member:
"""個人を表すクラス。"""
def __init__(self, uid: int, name: str, age: int) -> None:
self.uid = uid
self.name = name
self.age = age
def __str__(self) -> str:
return f"Member(uid={self.uid}, name={self.name}, age={self.age})"
def __repr__(self) -> str:
return f"Member(uid={self.uid!r}, name={self.name!r}, age={self.age!r})"
def __eq__(self, other: object) -> bool:
# 同じMember型同士のみを比較する。
if not isinstance(other, Member):
return NotImplemented
return self.uid == other.uid
def __hash__(self) -> int:
return hash(self.uid)
member1 = Member(100, "田中宏", 18)
print(member1)
print(repr(member1))
member2 = Member(200, "鈴木隆", 20)
# uidを基準に、2つのインスタンスが同一かを判定する。
if member2 == member1:
print("同じインスタンスです")
else:
print("同じインスタンスではありません")
from dataclasses import dataclass
@dataclass(frozen=True)
class Person:
"""個人を表すクラス。"""
name: str
age: int
class Member:
"""会員を表すクラス。"""
FEE: int = 5000
def __init__(self, uid: int, name: str) -> None:
self.uid = uid
self.name = name
def membership_fee(self) -> int:
"""会費額を返します。"""
return Member.FEE
class GeneralMember(Member):
"""一般会員を表すクラス。"""
def __init__(self, uid: int, name: str, lesson_menu: list[str]) -> None:
super().__init__(uid, name) # スーパークラスのコンストラクタを実行
self.lesson_menu = lesson_menu # サブクラスのデータ属性を初期化する
from members import GeneralMember
# サブクラスのインスタンスを作る
gm = GeneralMember(1001, "田中花子", ["ヨガ", "ピラティス"])
# スーパークラスのデータ属性とメソッドにアクセスする
print(f"会員番号={gm.uid}")
print(f"会員名={gm.name}")
print(f"会費額={gm.membership_fee()}")
# 自クラスのデータ属性にアクセスする
print(f"レッスンメニュー={gm.lesson_menu}")
class SeniorMember(Member):
"""シニア会員を表すクラス。"""
def membership_fee(self) -> int:
"""会費額を返す。"""
return round(Member.FEE * 0.6)
from members import SeniorMember
# Memberクラスのコンストラクタが使われます
senior_member = SeniorMember(2001, "佐藤一郎")
# スーパークラスのデータ属性とメソッドを使用する
print(senior_member.uid)
print(senior_member.name)
print(senior_member.membership_fee())
class Phone:
pass
class Computer:
pass
class SmartPhone(Phone, Computer):
pass
import json
class JsonMixin:
def to_json(self):
return json.dumps(self.__dict__, ensure_ascii=False)
from jsonmix import JsonMixin
class GeneralMember(JsonMixin, Member):
-- 省略 --
from members import GeneralMember
gm = GeneralMember(1001, "田中花子", ["ヨガ", "ピラティス"])
print(gm.to_json())
from members import GeneralMember, SeniorMember
members = [
GeneralMember(1001, "田中花子", ["ヨガ", "ピラティス"]),
SeniorMember(2001, "佐藤一郎"),
SeniorMember(2002, "伊藤京子"),
GeneralMember(1003, "高橋健太", ["水泳", "筋力トレーニング"]),
GeneralMember(1002, "鈴木美咲", ["ダンス", "エアロビクス"]),
SeniorMember(2003, "山本次郎"),
]
# 同名メソッドを持つ会員オブジェクトを順番に処理する
for member in members:
print(f"{member.name}の会費={member.membership_fee()}円")
class Taro:
def talk(self):
print("こんにちは、太郎です")
class Hanako:
def talk(self):
print("こんにちは、花子です")
class Jiro:
def talk(self):
print("こんにちは、次郎です")
# 使用例 ---------------------
person_list = [Taro(), Hanako(), Jiro()]
# リストの各インスタンスに同じメソッド名で順番に処理を行う
for person in person_list:
person.talk()
"""CSVファイルからBMIを計算して表示する。"""
import csv
from pathlib import Path
class Person:
"""1人分の測定データを表すクラス。"""
def __init__(self, name: str, weight_kg: float, height_cm: float) -> None:
"""名前、体重、身長を受け取って初期化する。"""
# オブジェクト生成時に値の妥当性を確認する。
if name == "":
raise ValueError("名前は空文字にできません")
if weight_kg <= 0:
raise ValueError("体重は正の数である必要があります")
if height_cm <= 0:
raise ValueError("身長は正の数である必要があります")
self.name = name
self.weight_kg = weight_kg
self.height_cm = height_cm
@classmethod
def from_csv_row(cls, row_data: list[str]) -> "Person | None":
"""CSVの1行データを検証し、有効なら Person を返す。"""
# 項目数が正しいか確認する。
if len(row_data) != 3:
return None
name = row_data[0].strip()
weight_text = row_data[1].strip()
height_text = row_data[2].strip()
# 空文字の項目がないか確認する。
if (name == "") or (weight_text == "") or (height_text == ""):
return None
try:
weight_kg = float(weight_text)
height_cm = float(height_text)
except ValueError:
return None
# 体重と身長が正の数か確認する。
if (weight_kg <= 0) or (height_cm <= 0):
return None
# インスタンスを生成して返す。
try:
return cls(name, weight_kg, height_cm)
except ValueError:
return None
def calculate_bmi(self) -> float:
"""BMIを計算し、小数点以下1桁に丸めて返す。"""
height_m = self.height_cm / 100
bmi_value = self.weight_kg / (height_m * height_m)
return round(bmi_value, 1)
def get_display_text(self) -> str:
"""表示用の文字列を返す。"""
bmi_value = self.calculate_bmi()
return (
f"名前:{self.name} 体重:{self.weight_kg}kg "
f"身長:{self.height_cm}cm BMI:{bmi_value}"
)
def read_person_csv(file_path) -> list[list[str]]:
"""person.csv を読み込み、ヘッダーを除くデータ行を返す。"""
try:
with open(file_path, "r", newline="", encoding="utf-8") as file:
reader = csv.reader(file)
next(reader, None)
return list(reader)
except (OSError, UnicodeDecodeError, csv.Error) as error:
print(f"ファイルの読み込みに失敗しました: {error}")
return []
def main():
"""CSVを読み込み、BMIを計算して表示する。"""
file_path = Path("person.csv")
data_rows = read_person_csv(file_path)
# 各行を順に確認し、有効なデータだけを表示する。
for record_no, row_data in enumerate(data_rows, start=1):
person = Person.from_csv_row(row_data)
# 不正なデータは件数付きのメッセージを表示して読み飛ばす。
if person is None:
print(f"{record_no}件目は不正なデータです")
continue
print(person.get_display_text())
if __name__ == "__main__":
main()