0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのPython学習塾 その2

Posted at

Pythonコードの練習にいろいろ作りました。その2

  • 生成AIに「初心者向けのPython学習用のコードを作成して」と指示し、提案された練習用のコードを写経。思いついた機能があれば随時追加
  • 生成AIには「ステップごとに解説をしながら教えて」と指示

その1はこちら:point_down:

以下、作ったもの

作成物

九九の表

:nine: ルール
・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
⇒カレンダーを呼び出すため

ファイル名を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()

いつどこで誰が誰と何をした?

:sun_with_face: ルール
・「いつ」「どこで」「だれが」「だれと」「なにをした」という構成の文章をランダムで作成する

使ったモジュール
・random
⇒リストから無作為抽出するため

気づき
random.choiceは重複あり random.sampleは重複無し

こだわり
・はじめて生成AIに聞かずにすべてのコードを書いた:raised_hands:
・リストにもっと多くの要素を格納したい
⇒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呼び出し)

:full_moon_with_face: ルール
・「いつ」「どこで」「だれが」「だれと」「なにをした」という構成の文章をランダムで作成する
・単語リストは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で作ったもの:point_down:

風が踊る夜、雲の迷宮で空を駆ける馬が星を描く画家と空を飛んだ
風がささやく夕暮れ、静かな湖畔で踊るペンギンが羽のある少年と夢を見た
夜が明ける瞬間、月の神殿で光を集めるリスが夢を語るフクロウと炎を灯した

創作のアイディア出しに使えるかも…?

コードはこちら
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
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?