Pythonコードの練習にいろいろ作りました。
- 生成AIに「初心者向けのPython学習用のコードを作成して」と指示し、提案された練習用のコードを写経。思いついた機能があれば随時追加
- 生成AIには「ステップごとに解説をしながら教えて」と指示
- FizzBuzzが終わったら「どんなコードが練習にふさわしいか」を聞き、数字あてゲーム、ToDoリスト…と提案通りに作成を進めた
以下、作ったもの
作成物
FizzBuzz
ルール
・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)
数字あてゲーム
ルール
・CPが1~100の任意の数字を決定する
・PLがその数字を当てる
使ったモジュール
・random
⇒ 出題のためにランダムに数字を持ち出す必要があったため
・time
⇒ スリープを設けて最後のメッセージを出力するため
気づき
・While True
のTrueは最初が大文字でないといけない
・continue
は上のWhile
に戻り、break
はwhile
が終了する
こだわり
・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リスト
ルール
・タスクの登録、一覧表示、削除ができる
・プログラム終了時にタスクを保存し、継続管理できるようにする
使ったモジュール
・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化)
ルール
・タスクの登録、一覧表示、削除ができる
・プログラム終了時にタスクを保存し、継続管理できるようにする
・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()