Приключения Питона и Дракона CSV 🐉

🐍 Приключения Питона и Дракона CSV 🐉

🐉✨

Жил-был маленький Питончик 🐍

Он жил в волшебном королевстве Программия и очень хотел стать великим волшебником данных! Однажды к нему прилетел добрый Дракон CSV 🐉 и сказал:

"Я научу тебя хранить сокровища — имена героев, годы их подвигов и даже знаки зодиака! Мы будем записывать всё в мой магический свиток под названием Books.csv!"

Как открывать сундук с сокровищами?

Дракон научил Питончика трем волшебным заклинаниям:

  • "w"сжечь старый сундук и создать новый ⚠️
  • "a"добавить сокровище в конец сундука
  • "r"только посмотреть, что внутри 👀
# Волшебная палочка для работы с CSV-свитками
import csv

# Создаём НОВЫЙ сундук (старый исчезнет!)
file = open("Stars.csv", "w")
newRecord = "Brian, 73, Taurus\n"
file.write(newRecord)
file.close() # Обязательно закрываем — иначе сокровища потеряются!

# Добавляем ещё одного героя в конец
file = open("Stars.csv", "a")
name = input("Имя героя: ")
age = input("Возраст: ")
star = input("Знак зодиака: ")
newRecord = name + ", " + age + ", " + star + "\n"
file.write(newRecord)
file.close()

# Читаем весь сундук
file = open("Stars.csv", "r")
for row in file:
    print(row.strip()) # strip() убирает лишние переносы
file.close()

🗡️ Задание 112

Помоги Питончику добавить нового героя в сундук Books.csv, а потом вывести всех героев по одному на строку!

# Добавляем новую книгу
file = open("Books.csv", "a", encoding="utf-8")
author = input("Введите автора: ")
title = input("Введите название книги: ")
year = input("Введите год издания: ")
newRecord = author + ", " + title + ", " + year + "\n"
file.write(newRecord)
file.close()

# Выводим все книги красиво
file = open("Books.csv", "r", encoding="utf-8")
print("\n📚 Вот все книги в королевской библиотеке:")
for row in file:
    print(row.strip())  # strip() убирает \n в конце
file.close()

🗡️ Задание 113

Сколько героев хочет добавить король? Пусть введёт число, добавит книги, а потом найдём все книги одного автора!

num = int(input("Сколько книг добавить в библиотеку? "))
file = open("Books.csv", "a", encoding="utf-8")

for i in range(num):
    print(f"\n--- Книга {i+1} ---")
    author = input("Автор: ")
    title = input("Название: ")
    year = input("Год: ")
    file.write(author + ", " + title + ", " + year + "\n")

file.close()

# Теперь ищем книги автора
searchAuthor = input("\nЧьи книги ищем? ")
file = open("Books.csv", "r", encoding="utf-8")
found = False
for row in file:
    if searchAuthor.lower() in row.lower():
        print("Найдено: " + row.strip())
        found = True
if not found:
    print("Такого автора в библиотеке нет 😢")
file.close()

🗡️ Задание 114

Какие книги вышли между двумя годами? Помоги найти древние и новые фолианты!

start = int(input("Начальный год: "))
end = int(input("Конечный год: "))

file = open("Books.csv", "r", encoding="utf-8")
print(f"\nКниги с {start} по {end} год:")
for row in file:
    parts = row.strip().split(",")
    if len(parts) == 3:
        year = int(parts[2])
        if start < = year <= end:
            print(f"✨ {parts[1]} — {parts[0]} ({year})")
file.close()

🗡️ Задание 115

Выведи книги с номерами — как в настоящем каталоге!

file = open("Books.csv", "r", encoding="utf-8")
print("📖 Каталог королевской библиотеки:\n")
count = 1
for row in file:
    print(f"{count}. {row.strip()}")
    count += 1
file.close()

🗡️ Задание 116 — Самое сложное!

Загрузи книги в список, удали одну, измени другую — и сохрани обратно!

# Читаем всё в список
file = open("Books.csv", "r", encoding="utf-8")
lines = file.readlines()
file.close()

# Показываем и удаляем
print("Текущие книги:")
for i, line in enumerate(lines):
    print(f"{i}: {line.strip()}")

delete = int(input("\nКакую строку удалить? (номер): "))
del lines[delete]

change = int(input("Какую строку изменить? (номер): "))
print("Текущая:", lines[change].strip())
newAuthor = input("Новый автор: ")
newTitle = input("Новое название: ")
newYear = input("Новый год: ")
lines[change] = f"{newAuthor}, {newTitle}, {newYear}\n"

# Сохраняем обратно
file = open("Books.csv", "w", encoding="utf-8")
file.writelines(lines)
file.close()
print("Библиотека обновлена! 🏰")

🎯 Задание 117 — Математическая битва с драконом!

Создай игру: имя → 2 вопроса → сохрани всё в QuizResults.csv

import random

name = input("Введи своё имя, герой: ")

score = 0
results = [name]  # будем собирать в список

for q in range(2):
    a = random.randint(1, 10)
    b = random.randint(1, 10)
    correct = a * b
    question = f"{a} × {b} = "
    answer = int(input(question))
    results.append(question.strip())
    results.append(str(answer))
    if answer == correct:
        score += 1
        results.append("Верно!")
    else:
        results.append(f"Неверно (правильно: {correct})")

results.append(str(score))

# Сохраняем в CSV
file = open("QuizResults.csv", "a", encoding="utf-8")
file.write(", ".join(results) + "\n")
file.close()

print(f"Игра окончена! Твой счёт: {score}/2 🎉")
print("Результаты сохранены в QuizResults.csv")

🔒 Введи секретный код, чтобы увидеть все решения сразу:

Молодец! Ты прошёл путь от маленького Питончика до настоящего Хранителя Данных! 🐉✨

Теперь ты можешь управлять любыми сокровищами в CSV-файлах!

Великое Приключение Питончика: Подпрограммы и Магия Tkinter

Великое Приключение Питончика

Подпрограммы и Магия Графического Интерфейса Tkinter

Что такое подпрограммы? (Функции)

Подпрограммы — это как маленькие волшебные помощники в королевстве Python! Представь, что у тебя есть гномики, каждый из которых умеет делать что-то одно, но делает это идеально.

def get_name():
    user_name = input("Enter your name: ")
    return user_name

def print_Msg(user_name):
    print("Hello", user_name)

def main():
    user_name = get_name()
    print_Msg(user_name)

main()

Почему подпрограммы — это круто?

  • Код можно использовать много раз
  • Программа становится понятнее и красивее
  • Легче находить и исправлять ошибки
  • Можно давать задания разным гномикам-подпрограммам

Важно помнить:

  • Подпрограмма должна быть определена до её вызова
  • Если хочешь передать данные из подпрограммы — используй return
  • Если подпрограмма получает данные — пиши их в скобках: def имя(переменная):

Задача 118

Определите подпрограмму, которая предлагает пользователю ввести число и сохраняет его в переменной num.
Определите другую подпрограмму, которая использует значение num и проводит отсчёт от 1 до этого числа.

def get_number():
    num = int(input("Введи число, до которого считать: "))
    return num

def count_to_number(n):
    print("Начинаем отсчёт!")
    for i in range(1, n + 1):
        print(i)

def main():
    number = get_number()
    count_to_number(number)

main()

Задача 119

Игра "Угадай число" с тремя подпрограммами:

  • Одна генерирует случайное число в заданном диапазоне
  • Вторая спрашивает у пользователя догадку
  • Третья проверяет ответ и подсказывает "больше" или "меньше"
import random

def generate_secret():
    low = int(input("Минимальное число: "))
    high = int(input("Максимальное число: "))
    return random.randint(low, high)

def get_guess():
    return int(input("Твой вариант: "))

def play_game():
    secret = generate_secret()
    print("Я загадал число! Попробуй угадать!")
    
    guess = get_guess()
    while guess != secret:
        if guess < secret:
            print("Моё число БОЛЬШЕ!")
        else:
            print("Моё число МЕНЬШЕ!")
        guess = get_guess()
    
    print("ПОЗДРАВЛЯЮ! Ты угадал!")

play_game()

Задача 120

Математическая викторина с меню:

Addition / Subtraction
В зависимости от выбора — разные задания и проверка ответа.

import random

def addition_quiz():
    a = random.randint(5, 20)
    b = random.randint(5, 20)
    answer = int(input(f"{a} + {b} = "))
    correct = a + b
    return answer == correct, correct

def subtraction_quiz():
    a = random.randint(25, 50)
    b = random.randint(1, 25)
    answer = int(input(f"{a} - {b} = "))
    correct = a - b
    return answer == correct, correct

def show_menu():
    print("1. Addition")
    print("2. Subtraction")
    return input("Enter 1 or 2: ")

def main():
    choice = show_menu()
    if choice == "1":
        correct, real = addition_quiz()
    elif choice == "2":
        correct, real = subtraction_quiz()
    else:
        print("Неверный выбор!")
        return
    
    if correct:
        print("Correct!")
    else:
        print(f"Incorrect, the answer is {real}")

main()

Задача 121

Полноценная программа-менеджер списка имён с меню:

  • Добавить имя
  • Изменить имя
  • Удалить имя
  • Показать все
  • Выход
def show_menu():
    print("\n" + "="*30)
    print("   МЕНЕДЖЕР ИМЁН")
    print("="*30)
    print("1. Добавить имя")
    print("2. Изменить имя")
    print("3. Удалить имя")
    print("4. Показать все имена")
    print("5. Выйти")
    print("="*30)

def add_name(names):
    name = input("Введи имя: ").strip()
    if name:
        names.append(name)
        print(f"Имя '{name}' добавлено!")

def edit_name(names):
    if not names:
        print("Список пуст!")
        return
    for i, n in enumerate(names):
        print(f"{i}. {n}")
    idx = int(input("Номер имени для изменения: "))
    if 0 < = idx < len(names):
        new_name = input("Новое имя: ")
        names[idx] = new_name
        print("Изменено!")

def delete_name(names):
    if not names:
        print("Список пуст!")
        return
    for i, n in enumerate(names):
        print(f"{i}. {n}")
    idx = int(input("Номер имени для удаления: "))
    if 0 < = idx < len(names):
        removed = names.pop(idx)
        print(f"Имя '{removed}' удалено!")

def show_names(names):
    if names:
        print("\nСписок имён:")
        for i, name in enumerate(names, 1):
            print(f"{i}. {name}")
    else:
        print("Список пуст!")

def main():
    names = []
    while True:
        show_menu()
        choice = input("Выбери действие (1-5): ")
        if choice == "1":
            add_name(names)
        elif choice == "2":
            edit_name(names)
        elif choice == "3":
            delete_name(names)
        elif choice == "4":
            show_names(names)
        elif choice == "5":
            print("До свидания!")
            break
        else:
            print("Неверный выбор!")

main()

Магия Tkinter — Создаём окошки!

Теперь Питончик научился создавать настоящие графические окна с кнопками, полями и списками!

from tkinter import *
window = Tk()
window.title("Моё окно")
window.geometry("400x300")
label = Label(text="Привет!")
label.pack()
button = Button(text="Нажми меня!", command=click)
button.pack()
window.mainloop()

Задача 124

Создайте окно, которое предлагает пользователю ввести имя. При нажатии кнопки — "Hello [имя]" с красивым оформлением!

from tkinter import *

def say_hello():
    name = entry.get()
    if name.strip():
        output["text"] = f"Hello {name}!"
        output["bg"] = "#4CAF50"
        output["fg"] = "white"
        output["font"] = ("Arial", 20, "bold")
    else:
        output["text"] = "Введи имя!"

window = Tk()
window.title("Привет, друг!")
window.geometry("500x400")
window.configure(bg="#E8F5E9")

Label(text="Введи своё имя:", font=("Comic Sans MS", 16), bg="#E8F5E9").pack(pady=20)

entry = Entry(font=("Arial", 18), width=20, justify="center")
entry.pack(pady=10)

Button(text="Поздороваться!", font=("Arial", 14), command=say_hello, bg="#FF4081", fg="white").pack(pady=20)

output = Message(text="Жду твоё имя...", width=300, font=("Arial", 18), bg="#FFEB3B", fg="#D50000")
output.pack(pady=30, expand=True)

window.mainloop()

Секретный код Великого Волшебника

Только настоящие маги знают его...

Ты прошёл путь от новичка до Великого Волшебника Python!
Теперь ты умеешь создавать подпрограммы и настоящие графические программы!
Продолжай творить магию кода!

Питончик и Волшебные Подпрограммы + GUI-приключение

Питончик и Волшебные Подпрограммы + GUI-Магия

Жил-был маленький Питончик

Он устал писать одно и то же снова и снова. И тогда к нему прилетела Фея Подпрограмм

— "Я научу тебя создавать волшебные заклинания-функции! Напишешь один раз — используешь тысячу!"

А потом появилась ещё и Фея Tkinter с блестящими окошками

Что такое подпрограмма?

Это как маленький помощник-гномик, который умеет делать одну работу идеально:

  • Ты говоришь: "Гномик, принеси имя!" → он спрашивает у пользователя и приносит
  • Ты говоришь: "Гномик, поздоровайся!" → он машет ручкой и говорит "Привет!"
  • Главный гномик main() командует всеми остальными
# Волшебные гномики в действии!
def get_name():
    name = input("Как тебя зовут? ")
    return name

def say_hello(name):
    print("Привет,", name + "!")

def main():
    person = get_name()
    say_hello(person)

main() # Запускаем главного гномика!

Задание 118 — Обратный отсчёт

Создай двух гномиков: один спрашивает число, второй считает от 1 до него!

def get_number():
    num = int(input("До скольки считать? "))
    return num

def countdown(n):
    for i in range(1, n+1):
        print(i)

def main():
    number = get_number()
    countdown(number)

main()

Задание 119 — Угадай число!

Три гномика играют в "Угадайку"

import random

def generate_number():
    low = int(input("Маленькое число: "))
    high = int(input("Большое число: "))
    return random.randint(low, high)

def ask_guess():
    print("Я загадал число...")
    return int(input("Твой вариант: "))

def check_guess(secret, guess):
    while guess != secret:
        if guess < secret:
            print("Больше!")
        else:
            print("Меньше!")
        guess = int(input("Попробуй ещё: "))
    print("Угадал! Ты победил!")

def main():
    secret = generate_number()
    guess = ask_guess()
    check_guess(secret, guess)

main()

Задание 120 — Математический дворец

Меню: сложение или вычитание?

import random

def addition_quiz():
    a = random.randint(5,20)
    b = random.randint(5,20)
    ans = int(input(f"{a} + {b} = "))
    return ans == a + b, a + b

def subtraction_quiz():
    a = random.randint(25,50)
    b = random.randint(1,25)
    ans = int(input(f"{a} - {b} = "))
    return ans == a - b, a - b

def check_answer(correct, real):
    if correct:
        print("Правильно!")
    else:
        print(f"Неправильно! Правильный ответ: {real}")

def main():
    print("1. Сложение\n2. Вычитание")
    choice = input("Выбери 1 или 2: ")
    if choice == "1":
        correct, real = addition_quiz()
    elif choice == "2":
        correct, real = subtraction_quiz()
    else:
        print("Такого варианта нет!")
        return
    check_answer(correct, real)

main()

Задание 121 — Менеджер имён

Полноценная программа с меню!

def show_menu():
    print("\nУПРАВЛЕНИЕ СПИСКОМ ИМЁН")
    print("1. Добавить имя")
    print("2. Изменить имя")
    print("3. Удалить имя")
    print("4. Показать все имена")
    print("5. Выход")

def add_name(names):
    name = input("Введи имя: ")
    names.append(name)
    print("Добавлено!")

def change_name(names):
    for i, n in enumerate(names):
        print(i, n)
    idx = int(input("Какой номер изменить? "))
    if 0 < = idx < len(names):
        new = input("Новое имя: ")
        names[idx] = new

def dele we ete_name(names):
    for i, n in enumerate(names):
        print(i, n)
    idx = int(input("Какой номер удалить? "))
    if 0 < = idx < len(names):
        names.pop(idx)

def show_names(names):
    if names:
        for i, n in enumerate(names):
            print(f"{i+1}. {n}")
    else:
        print("Список пуст!")

def main():
    names = []
    while True:
        show_menu()
        choice = input("Выбери действие: ")
        if choice == "1":
            add_name(names)
        elif choice == "2":
            change_name(names)
        elif choice == "3":
            delete_name(names)
        elif choice == "4":
            show_names(names)
        elif choice == "5":
            print("До свидания!")
            break
        else:
            print("Неверный выбор!")

main()

Задание 124 — Первое GUI-окошко!

Фея Tkinter машет волшебной палочкой!

from tkinter import *

def click():
    name = entry.get()
    output["text"] = f"Hello {name}!"
    output["bg"] = "#FF5252"
    output["fg"] = "white"

window = Tk()
window.title("Приветствие")
window.geometry("400x300")

label = Label(text="Введи своё имя:")
label.pack(pady=10)

entry = Entry()
entry.pack(pady=10)

button = Button(text="Поздороваться!", command=click)
button.pack(pady=10)

output = Message(text="", width=200)
output.pack(pady=20)
output["bg"] = "black"
output["fg"] = "lime"

window.mainloop()

Задание 125 — Бросок кубика

from tkinter import *
import random

def roll():
    result["text"] = str(random.randint(1,6))
    result["font"] = ("Arial", 48)

window = Tk()
window.title("Кубик")
window.geometry("300x400")

Label(text="Нажми, чтобы бросить кубик!", font=("Arial", 14)).pack(pady=30)
Button(text="БРОСИТЬ!", command=roll, font=("Arial", 16)).pack(pady=20)

result = Label(text="?", font=("Arial", 80))
result.pack(expand=True)

window.mainloop()

Задание 132 — Полноценный CSV + GUI менеджер!

Вершина мастерства!

from tkinter import *
import csv

def add_person():
    name = entry_name.get()
    age = entry_age.get()
    with open("people.csv", "a", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerow([name, age])
    entry_name.delete(0, END)
    entry_age.delete(0, END)

def show_all():
    listbox.delete(0, END)
    try:
        with open("people.csv", "r", encoding="utf-8") as f:
            reader = csv.reader(f)
            for row in reader:
                if row:
                    listbox.insert(END, f"{row[0]} — {row[1]} лет")
    except:
        listbox.insert(END, "Файл ещё пуст!")

window = Tk()
window.title("Люди и годы")
window.geometry("500x600")

Label(text="Имя:").pack()
entry_name = Entry(width=30)
entry_name.pack(pady=5)

Label(text="Возраст:").pack()
entry_age = Entry(width=30)
entry_age.pack(pady=5)

Button(text="Добавить человека", command=add_person).pack(pady=10)
Button(text="Показать всех", command=show_all).pack(pady=10)

listbox = Listbox(width=50, height=20)
listbox.pack(pady=20)

window.mainloop()

Секретный код для настоящих волшебников:

Ты прошёл путь от новичка до Великого Волшебника Python!

Теперь ты умеешь создавать гномиков-подпрограммы и настоящие окошки с Tkinter!

Продолжай творить магию кода!

Великое Приключение Питончика — Подпрограммы и Магия Tkinter

Великое Приключение Питончика

Подпрограммы + Магия графических окон Tkinter

Что такое подпрограммы (функции)?

Подпрограммы — это маленькие волшебные помощники, которые делают одну работу, но делают её идеально.

def get_name():
    user_name = input("Enter your name: ")
    return user_name

def print_Msg(user_name):
    print("Hello", user_name)

def main():
    user_name = get_name()
    print_Msg(user_name)

main()

Подпрограммы должны быть определены до их вызова, а данные передаются через return и параметры в скобках.

Задача 118

Определите подпрограмму, которая предлагает пользователю ввести число и сохраняет его в переменной num.
Определите другую подпрограмму, которая использует значение num и проводит отсчёт от 1 до этого числа.

def get_number():
    num = int(input("Введи число, до которого будем считать: "))
    return num

def count_up(n):
    for i in range(1, n+1):
        print(i)

def main():
    number = get_number()
    count_up(number)

main()

Задача 119

Определите три подпрограммы для игры «Угадай число»:
• генерирует случайное число в диапазоне
• предлагает угадать
• проверяет, подсказывает «больше»/«меньше», пока не угадает

import random

def generate_number():
    low = int(input("Маленькое число: "))
    high = int(input("Большое число: "))
    return random.randint(low, high)

def guess_number():
    return int(input("Твой вариант: "))

def play():
    secret = generate_number()
    print("Я загадал число! Угадай!")
    guess = guess_number()
    while guess != secret:
        if guess < secret: print("Больше!")
        else: print("Меньше!")
        guess = guess_number()
    print("Угадал! Молодец!")

play()

Задача 120

Меню Addition / Subtraction. При выборе 1 — сложение двух чисел 5-20, при выборе 2 — вычитание (25-50 минус 1-25). Проверка ответа.

import random

def addition():
    a, b = random.randint(5,20), random.randint(5,20)
    ans = int(input(f"{a} + {b} = "))
    return ans == a+b, a+b

def subtraction():
    a, b = random.randint(25,50), random.randint(1,25)
    ans = int(input(f"{a} - {b} = "))
    return ans == a-b, a-b

def menu():
    print("1. Addition\n2. Subtraction")
    return input("Enter 1 or 2: ")

choice = menu()
if choice == "1":
    correct, real = addition()
elif choice == "2":
    correct, real = subtraction()
else:
    print("Неверный выбор!"); exit()

print("Correct" if correct else f"Incorrect, the answer is {real}")

Задача 121

Программа с меню: добавлять, изменять, удалять имена в списке, показывать все, выход. Меню повторяется.

def menu():
    print("\n1. Добавить имя\n2. Изменить имя\n3. Удалить имя\n4. Показать все\n5. Выход")

def add(names): names.append(input("Имя: "))
def edit(names):
    for i,n in enumerate(names): print(i, n)
    i = int(input("Номер: "))
    if 0<=i<len(names): names[i] = input("Новое имя: ")
def delete(names):
    for i,n in enumerate(names): print(i, n)
    i = int(input("Номер для удаления: "))
    if 0<=i<len(names): names.pop(i)
def show(names):
    for i,n in enumerate(names,1): print(f"{i}. {n}")

names = []
while True:
    menu()
    c = input("Выбор: ")
    if c=="1": add(names)
    elif c=="2": edit(names)
    elif c=="3": delete(names)
    elif c=="4": show(names)
    elif c=="5": break
    else: print("Ошибка!")

Магия графических окон — Tkinter

from tkinter import * window = Tk() window.title("Заголовок") window.geometry("400x300") label = Label(text="Привет!") entry = Entry() button = Button(text="Нажми", command=some_function) label.pack(); entry.pack(); button.pack() window.mainloop()

Задача 124

Создайте окно, которое предлагает пользователю ввести имя. Когда пользователь нажимает кнопку, в окне должно выводиться сообщение «Hello [имя]» с изменением цвета фона и цвета шрифта текстовой области.

from tkinter import *

def hello():
    name = entry.get()
    if name.strip():
        output["text"] = f"Hello {name}!"
        output["bg"] = "#FF4081"
        output["fg"] = "white"
    else:
        output["text"] = "Введите имя!"

window = Tk()
window.title("Приветствие")
window.geometry("500x400")

Label(text="Введите имя:", font=20).pack(pady=20)
entry = Entry(font=18, width=20, justify="center")
entry.pack(pady=10)
Button(text="Поздороваться!", command=hello, font=16).pack(pady=20)
output = Message(text="", width=300, font=20, bg="yellow")
output.pack(expand=True)

window.mainloop()

Задача 125

Напишите программу, моделирующую бросок шестигранного кубика. При нажатии кнопки выводится случайное число 1–6.

from tkinter import *
import random

def roll():
    result["text"] = str(random.randint(1,6))

window = Tk()
window.title("Кубик")
window.geometry("400x500")

Label(text="Брось кубик!", font=("Arial",20)).pack(pady=40)
Button(text="БРОСИТЬ!", command=roll, font=20, bg="#4CAF50").pack(pady=30)
result = Label(text="?", font=("Arial",100,"bold"), fg="#D500F9")
result.pack(expand=True)

window.mainloop()

Задача 126

Число вводится в поле → прибавляется к сумме → выводится. Кнопка «Обнулить» сбрасывает всё.

from tkinter import *

total = 0

def add():
    global total
    num = entry.get()
    if num.isdigit():
        total += int(num)
        label_total["text"] = str(total)
        entry.delete(0, END)

def reset():
    global total
    total = 0
    label_total["text"] = "0"
    entry.delete(0, END)

window = Tk()
window.title("Сумматор")
window.geometry("400x400")

Label(text="Введите число:").pack(pady=10)
entry = Entry(font=20, width=10, justify="center")
entry.pack(pady=10)
Button(text="Добавить", command=add).pack(pady=10)
Button(text="Обнулить", command=reset, bg="red", fg="white").pack(pady=10)
label_total = Label(text="0", font=("Arial",40))
label_total.pack(expand=True)

window.mainloop()

Задача 127

Ввод имени → добавление в Listbox. Кнопка «Очистить список».

from tkinter import *

def add_name():
    name = entry.get().strip()
    if name:
        listbox.insert(END, name)
        entry.delete(0, END)

def clear_list():
    listbox.delete(0, END)

window = Tk()
window.title("Список имён")
window.geometry("400x500")

Label(text="Введите имя:").pack(pady=10)
entry = Entry(width=30)
entry.pack(pady=5)
Button(text="Добавить", command=add_name).pack(pady=10)
Button(text="Очистить список", command=clear_list, bg="orange").pack(pady=5)

listbox = Listbox(width=40, height=15, font=14)
listbox.pack(pady=20)

window.mainloop()

Задача 128

Конвертер километров ↔ мили (1 км = 0.6214 мили).

from tkinter import *

def km_to_miles():
    km = entry.get()
    if km.replace('.','').isdigit():
        miles = float(km) * 0.6214
        result["text"] = f"{miles:.3f} миль"

def miles_to_km():
    miles = entry.get()
    if miles.replace('.','').isdigit():
        km = float(miles) / 0.6214
        result["text"] = f"{km:.3f} км"

window = Tk()
window.title("Конвертер")
window.geometry("450x350")

Label(text="Введите значение:").pack(pady=20)
entry = Entry(font=20, width=15, justify="center")
entry.pack(pady=10)

Button(text="км → мили", command=km_to_miles).pack(pady=10)
Button(text="мили → км", command=miles_to_km).pack(pady=5)
result = Label(text="", font=("Arial",20))
result.pack(expand=True, pady=30)

window.mainloop()

Задача 129

Проверка .isdigit(). Если целое число — добавить в список, иначе очистить поле.

from tkinter import *

def add_number():
    text = entry.get()
    if text.isdigit():
        listbox.insert(END, text)
        entry.delete(0, END)
    else:
        entry.delete(0, END)

def clear():
    listbox.delete(0, END)

window = Tk()
window.title("Только целые числа")
window.geometry("400x500")

entry = Entry(width=20, font=20, justify="center")
entry.pack(pady=20)
Button(text="Добавить", command=add_number).pack(pady=10)
Button(text="Очистить список", command=clear).pack(pady=5)
listbox = Listbox(width=30, height=15, font=16)
listbox.pack(pady=20)

window.mainloop()

Задача 130

Как 129 + кнопка «Сохранить в CSV».

import csv
from tkinter import *

def add():
    if entry.get().isdigit():
        listbox.insert(END, entry.get())
        entry.delete(0, END)

def save():
    data = listbox.get(0, END)
    with open("numbers.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        for n in data:
            writer.writerow([n])

window = Tk()
window.title("Сохранение в CSV")
Button(text="Добавить", command=add).pack()
Button(text="Сохранить в CSV", command=save, bg="green", fg="white").pack()
entry = Entry(width=20); entry.pack(pady=10)
listbox = Listbox(); listbox.pack()
window.mainloop()

Задача 131

Создать новый файл .csv, ввести имя и возраст → добавить запись.

import csv
from tkinter import *

def save_person():
    name = entry_name.get().strip()
    age = entry_age.get().strip()
    if name and age.isdigit():
        with open("people.csv", "a", newline="", encoding="utf-8") as f:
            writer = csv.writer(f)
            writer.writerow([name, age])
        entry_name.delete(0, END)
        entry_age.delete(0, END)

window = Tk()
window.title("Создать файл людей")
Label(text="Имя:").pack(); entry_name = Entry(width=30); entry_name.pack(pady=5)
Label(text="Возраст:").pack(); entry_age = Entry(width=30); entry_age.pack(pady=5)
Button(text="Сохранить в CSV", command=save_person, bg="#2196F3").pack(pady=20)
window.mainloop()

Задача 132

Добавлять записи (имя+возраст) в CSV + кнопка «Показать всех» (загружает из файла в Listbox).

import csv
from tkinter import *

def add():
    name = e_name.get().strip()
    age = e_age.get().strip()
    if name and age.isdigit():
        with open("people.csv","a",newline="",encoding="utf-8") as f:
            csv.writer(f).writerow([name,age])
        e_name.delete(0,END); e_age.delete(0,END)

def show():
    listbox.delete(0,END)
    try:
        with open("people.csv","r",encoding="utf-8") as f:
            for row in csv.reader(f):
                if row: listbox.insert(END, f"{row[0]} — {row[1]} лет")
    except: listbox.insert(END, "Файл пуст")

window = Tk()
window.title("Люди и возраст")
Label(text="Имя").pack(); e_name=Entry(width=30); e_name.pack(pady=5)
Label(text="Возраст").pack(); e_age=Entry(width=30); e_age.pack(pady=5)
Button(text="Добавить", command=add).pack(pady=10)
Button(text="Показать всех", command=show, bg="#4CAF50", fg="white").pack(pady=10)
listbox = Listbox(width=50, height=15); listbox.pack(pady=20)
window.mainloop()

Секретный код Великого Волшебника

Ты стал настоящим Мастером Python! Продолжай творить магию!