Pythonコードの練習にいろいろ作りました。その2
- 生成AIに「初心者向けのPython学習用のコードを作成して」と指示し、提案された練習用のコードを写経。思いついた機能があれば随時追加
- 生成AIには「ステップごとに解説をしながら教えて」と指示
その1はこちら![]()
以下、作ったもの
作成物
九九の表
ルール
・1から9の段まで、九九の計算式を出力する
・九九の解の表を出力する
使ったモジュール
なし
気づき
・{xxx:2}で2桁の右揃えができる
| コード | 出力結果 | 備考 |
|---|---|---|
| {xx:>幅} | 右揃え | デフォルト >は省略可 |
| {xx:<幅} | 左揃え | 明示が必要 |
| {xx:^幅} | 中央揃え | 明示が必要 |
・end=" "で空白を調整するのが難しい
・\tはtabインデントの挿入
こだわり
なし
コードはこちら
### 九九の計算式を表示する
for i in range (1,10):
for j in range (1,10):
result = i * j
# {xxx:2}…2桁で右揃え
print(f"{i}x{j}={result:2}", end= "\n")
# print()…jがループするたびに改行
print()
### 九九の解の表を表示する
# ヘッダー部分を作る
print (" ",end="")
for j in range(1,10):
# {j:3},end=" "…3桁で右揃え、右揃え後にさらに空白1つ
print(f"{j:3}", end=" ")
# jのループ終了後にヘッダーと表部分を区切る
# "-"*40…-の出力を40回繰り返す
print("\n" + "-" * 40)
# 表の本体
for i in range(1,10):
# 行のラベル
print(f"{i:2} |",end=" ")
# 九九の表部分
for j in range(1,10):
print(f"{i*j:^3}", end=" ")
print()
カレンダー
ルール
・指定した年月のカレンダーを表示する
使ったモジュール
・calendar
⇒カレンダーを呼び出すため
ファイル名をcalendar.pyにすると、モジュールではなく自分自身のファイルを読み込もうとする
気づき
・三項演算子(条件式)の書き方 ifの前に結果Aがくる
A if 条件 else B
================
print(f"{day:>2}" if day !=0 else " " ,end=" ")
----------------- ------- -----
A 条件 B
こだわり
・ヘッダー用の曜日をprintに直接羅列せずにリストweekdayに格納した
コードはこちら
import calendar
## 年月を指定
year = 2025
months = [9,10,11]
## ヘッダー出力
# リストに曜日を格納
weekdays = ["月","火","水","木","金","土","日"]
# 月ヘッダー
for month in months:
print(f"\n📅 {year}年{month}月".center(20))
# 曜日ヘッダー
for day in weekdays:
print(f"{day:>2}", end=" ")
print()
## カレンダー本体
cal = calendar.monthcalendar(year, month)
for week in cal:
for day in week:
print(f"{day:>2}" if day !=0 else " ",end=" ")
print()
いつどこで誰が誰と何をした?
ルール
・「いつ」「どこで」「だれが」「だれと」「なにをした」という構成の文章をランダムで作成する
使ったモジュール
・random
⇒リストから無作為抽出するため
気づき
・random.choiceは重複あり random.sampleは重複無し
こだわり
・はじめて生成AIに聞かずにすべてのコードを書いた![]()
・リストにもっと多くの要素を格納したい
⇒CSVにリストを保管し呼び出す形式に作り直す
コードはこちら
import random
when = [
"朝早く", "昼休みに", "放課後に", "夜遅く", "夕方に",
"真夜中に", "月曜日に", "クリスマスに", "お正月に", "雨の日に"
]
where = [
"空き地", "学校", "家", "裏山", "公園", "未来", "南極", "宇宙", "秘密基地"
]
who = [
"のび太", "ドラえもん", "しずかちゃん", "スネ夫", "ジャイアン", "出木杉くん",
"ママ", "パパ", "先生", "ドラミ", "セワシ", "ジャイ子"
]
do = [
"野球をした", "勉強をした", "喧嘩した", "空を飛んだ", "タイムマシンに乗った",
"おやつを食べた", "かくれんぼをした", "映画を見た", "冒険した"
]
print("いつどこでだれがだれと何をした?")
#### whoが重複する可能性あり
#random_when = random.choice(when)
#random_where = random.choice(where)
#random_who1 = random.choice(who)
#random_who2 = random.choice(who)
#random_do = random.choice(do)
## whoが重複しない
random_when = random.choice(when)
random_where = random.choice(where)
random_who1, random_who2 = random.sample(who,2)
random_do = random.choice(do)
print(f"{random_when}{random_where}で{random_who1}が{random_who2}と{random_do}")
いつどこで誰が誰と何をした?(CSV呼び出し)
ルール
・「いつ」「どこで」「だれが」「だれと」「なにをした」という構成の文章をランダムで作成する
・単語リストはcsv形式で管理する ←追加!
使ったモジュール
・random
⇒リストから無作為抽出するため
・csv
⇒csvファイルを開き文字列を呼び出すため
気づき
・with open("words.csv", encoding="utf-8") as f: 末尾のfはファイルオブジェクトを受け取る変数名なのでなんでもよい。cでもfileでもOK
・csv.DictReader(変数)…列名をキーとした辞書として扱うクラス
・単純にループさせたい場合はwhile True:でよい
こだわり
・words.csvを変えたらどんな雰囲気のものでも作れるようにした
AIに「物語が始まりそうなものにして」と指示したwordsで作ったもの![]()
風が踊る夜、雲の迷宮で空を駆ける馬が星を描く画家と空を飛んだ
風がささやく夕暮れ、静かな湖畔で踊るペンギンが羽のある少年と夢を見た
夜が明ける瞬間、月の神殿で光を集めるリスが夢を語るフクロウと炎を灯した
創作のアイディア出しに使えるかも…?
コードはこちら
import random
import csv
while True:
when = []
where = []
who = []
do = []
with open("words.csv", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
when.append(row["when"])
where.append(row["where"])
who.append(row["who"])
do.append(row["do"])
random_when = random.choice(when)
random_where = random.choice(where)
random_who1, random_who2 = random.sample(who,2)
random_do = random.choice(do)
print(f"{random_when}{random_where}で{random_who1}が{random_who2}と{random_do}")
again = input("\nへんなのできた~?\nもう一度あそぶ? (y/n): ").strip().lower()
if again != 'y':
print("👋 ばいば~い")
break