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学習塾

Posted at

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

  • 生成AIに「初心者向けのPython学習用のコードを作成して」と指示し、提案された練習用のコードを写経。思いついた機能があれば随時追加
  • 生成AIには「ステップごとに解説をしながら教えて」と指示
  • FizzBuzzが終わったら「どんなコードが練習にふさわしいか」を聞き、数字あてゲーム、ToDoリスト…と提案通りに作成を進めた

以下、作ったもの

作成物

FizzBuzz

:three: ルール
・1~100の数字を出力する
・3の倍数は”Fizz”、5の倍数は”Buzz”、3の倍数かつ5の倍数は"FizzBuzz"を出力する

使ったモジュール
なし

気づき
・if文は処理の順番がだいじ
if i % 3 and i % 5 == 0: はエラーが出なかったけど、3もfizzbuzzになった

こだわり
なし

コードはこちら
for i in range(1,101):
    if i % 3 == 0 and i % 5 == 0:
        print("fizzbuzz")
    elif i % 3 == 0:
        print ("fizz")
    elif i % 5 == 0:
        print("buzz")
    else:
        print(i)

数字あてゲーム

:slot_machine: ルール
・CPが1~100の任意の数字を決定する
・PLがその数字を当てる

使ったモジュール
・random
⇒ 出題のためにランダムに数字を持ち出す必要があったため
・time
⇒ スリープを設けて最後のメッセージを出力するため

気づき
While TrueのTrueは最初が大文字でないといけない
continueは上のWhileに戻り、breakwhileが終了する

こだわり
attempts += 1を回答ループの外に出して、回答数をカウントできるようにした
absで回答と解答の差を出力し、差の大きさで異なるヒントを出すようにした
・範囲外の数字と、数字でない文字列が入力された場合はValueErrorで検知できるようにした

コードはこちら
import random
import time

while True:
    secret_number = random.randint(1,100)
    attempts = 0

    while True:
        guess = input("1~100の数字を当ててね\n")

        try:
            guess = int(guess)
        except ValueError:
            print("ちがうよ、数字を入力してね")
            continue

        if guess < 1 or guess > 100:
            print("ちがうよ、1~100の数字を入力してね")
            continue

        attempts += 1
        difference = abs(secret_number - guess)

        if guess == secret_number:
            print(f"だいせいかい!\n{attempts}回で正解したよ")
            break
        elif guess < secret_number:
            if difference <= 5:
                print("めっちゃおしい!あと少し大きいよ")
            elif difference <= 10:
                print("おしい!もう少し大きいよ")
            else:
                print("もっと大きいよ")
        elif guess > secret_number:
            if difference <= 5:
                print("めっちゃおしい!あと少し小さいよ")
            elif difference <= 10:
                print("おしい!もう少し小さいよ")
            else :
                print("もっと小さいよ")

    play_again = input("もう一回あそぶ?(y/n)").lower()
    if play_again != 'y':
        print("ばいば~い👋")
        time.sleep(1)
        break

ToDoリスト

:pencil: ルール
・タスクの登録、一覧表示、削除ができる
・プログラム終了時にタスクを保存し、継続管理できるようにする

使ったモジュール
・OS
⇒タスクを保存したテキストを呼び出すため

気づき
・Path指定の\は2つにしないといけない ex) C:\\work\\hogehoge.txt
enumerateは「リストの中身を番号付きで取り出す」
⇒関数は英単語を覚えるのと一緒だな~

こだわり
なし
出力が見づらくて\nを多用。結果可読性が失われる
⇒TkinterでGUI表示にチャレンジする

コードはこちら
import os

file_path = "C://work//tasks_hoge.txt"
tasks = []
if os.path.exists(file_path):
    with open(file_path, "r", encoding="UTF-8")as f:
        tasks = [line.strip() for line in f.readlines()]
        print("保存されたタスクを読み込みました")

while True:
    print("1.タスクを追加")
    print("2.タスクを表示")
    print("3.タスクを削除")
    print("4.終了")
    choice = input("番号を選択してください\n")

    if choice == "1":
        task = input("追加するタスクを入力してください\n")
        tasks.append(task)
        print("タスクを追加しました\n\n")
        
    elif choice == "2":
        print("=== 現在のタスク一覧 ===")
        if not tasks:
            print("タスクはありません\n\n")
        else:
            for i, task in enumerate(tasks):
                print(f"{i + 1},{task}")

    elif choice == "3":
        if not tasks:
            print("削除できるタスクはありません\n\n")
        else:
            print("=== 現在のタスク一覧 ===")
            for i, task in enumerate(tasks):
                print(f"{i + 1},{task}")
 
            try:
                task_num = int(input("削除するタスクの番号を入力\n"))
                if 1 <= task_num <=len(tasks):
                    removed = tasks.pop(task_num -1)
                    print(f"タスクNo. {removed} を削除しました\n\n")
                else:
                    print("無効な番号です\n\n")
            except ValueError:
                print("数字を入力してください\n\n")
    elif choice == "4":
        with open("C:\\work\\tasks_hoge.txt", "w", encoding = "UTF-8") as f:
            for task in tasks:
                f.write(task + "\n")
        print("タスクを保存しました。\nToDoリストを終了します")
        break
    else :
        print("無効な選択です。1〜4の番号を入力してください。\n\n")

ToDoリスト(GUI化)

:pencil: ルール
・タスクの登録、一覧表示、削除ができる
・プログラム終了時にタスクを保存し、継続管理できるようにする
・GUIで見やすいものにする ☜ 追加

使ったモジュール
・Tkinter
⇒ GUIにするため
・OS
⇒タスクを保存したテキストを呼び出すため

気づき
・CLI版はfile_pathを呼び出した後にfor task in tasks:task_listbox.insert(tk.END,task)をしなくてもタスク表示されたが、きちんと代入してあげないと表示されない

こだわり
・複数のタスクを同時に削除するため、selectmode=tk.MULTIPLEを使用した

コードはこちら
import tkinter as tk
import os

file_path = "C:\\work\\tasks_hoge.txt"
tasks = []

if os.path.exists(file_path):
    with open(file_path,"r", encoding="utf-8") as f:
        tasks = [line.strip() for line in f.readlines()]

root = tk.Tk()
root.title("ToDoリスト")
root.geometry("500x380")
root.configure(bg="#e0ffff")

title_label = tk.Label(root,text="ToDoリスト",font=("游ゴシック",15),bg="#afeeee")
title_label.pack(pady=10)

task_listbox = tk.Listbox(root, height=10,width=50,selectmode=tk.MULTIPLE,font=("游ゴシック",10))
task_listbox.pack(pady=10)

for task in tasks:
    task_listbox.insert(tk.END,task)

task_entry = tk.Entry(root, width=40,font=("游ゴシック",12))
task_entry.pack(pady=5)

def add_task():
    task = task_entry.get()
    if task:
        tasks.append(task)
        task_listbox.insert(tk.END,task)
        task_entry.delete(0,tk.END)

add_button = tk.Button(root,text="タスクを追加",command=add_task,bg="#afeeee", font=("游ゴシック",8))
add_button.pack(pady=5)

def delete_task():
    selected_indices = task_listbox.curselection()
    if selected_indices:
        for i in reversed(selected_indices):
            task_listbox.delete(i)
            tasks.pop(i)

delete_button = tk.Button(root,text="選択したタスクを削除",command=delete_task,bg="#afeeee", font=("游ゴシック",8))
delete_button.pack(pady=5)

def on_closing():
    with open(file_path, "w", encoding="utf-8") as f:
        for task in tasks:
            f.write(task + "\n")
        root.destroy()

root.protocol("WM_DELETE_WINDOW", on_closing)

root.mainloop()
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?