Найти - Пользователи
Полная версия: Опять вопрос про функции...
Начало » Python для новичков » Опять вопрос про функции...
1
Yurka
Здравствуйте уважаемые, я недавно изучаю python и вот поставил себе задачу написать консольный менеджер sqlite(ну или хотя бы попытаюсь) застрял вот на чём:
import sqlite3
import os
def menu():
    name_base = vhod_bd()
    col_col = None
    while True:
        print("работаем с <<", name_base, ">>")
        print("""
        ================================================
                    УПРАВЛЕНИЕ БАЗОЙ ДАННЫХ
        ================================================
        1 - Создание или открытие базы данных
        2 - Добавление записей в таблицу
        3 -
        ...
        0 - Выход
        """)
        response = input("Ввод: ")
        if response == "1":
            sozd_db(name_base)
        elif response == "2":
            pass
        elif response == "3":
            pass
        elif response == "4":
            pass
        elif response == "5":
            pass
        elif response == "0":
            print("Выходим")  # доработать
            break
        else:
            print("Что-то не то, попробуйте еще раз.")
def vhod_bd():
    name_base = input("Введите имя базы данных(если её нет, она будет создана): ")
    # здесь будет несколько проверок ввода :)(для теста сойдет и так)
    # проверим существует ли файл базы данных или нет
    if os.path.exists(name_base):
        print("База данных <<{0}>> открыта.".format(name_base))
    else:
        print("База данных <<{0}>> создана.".format(name_base))
    return name_base
    # подсоединимся к базе данных
def sozd_db(name_base):
    # подсоединимся к базе
    conn = sqlite3.connect(name_base)
    curs = conn.cursor()
    tblname = input("Введите имя таблицы: ")
    kol_sbl()
    stroka_sbl = named_stbl()
    try:
        tblcmd = ("create table {0} ({1})".format(tblname, stroka_sbl))
        curs.execute(tblcmd)
    except sqlite3.OperationalError:
        print("Не получилось")
def kol_sbl():  # количество столбцов
    global col_col
    while True:
        try:
            col_col = int(input("Введите количество столбцов:(не более 10)"))
            if col_col in range(0, 11):  # здесь можно поменять кол-во столбцов
                print("Количество ячеек: ", col_col)
            else:
                print("не то")
                continue
            break
        except ValueError:
            print("Что-то не то! ")
    return col_col
def named_stbl():
    str_pol1 = []   # здесь вводим имена для выбранного количества столбцов
    for i in range(1, col_col + 1):
        i = input("Введите имя столбца: ")
        # data_types()
        str_pol1.append(i)
    stro1 = ", ".join(str_pol1)
    return stro1
def data_types():
    # tup = ("NULL", "INTEGER", "REAL", "TEXT", "BLOB")
    tup1 = None
    while True:
        print("""Нажмите <<n>> для выбора типа 'NULL'
                         <<i>> для выбора типа 'INTEGER'
                         <<r>> для выбора типа 'REAL'
                         <<t>> для выбора типа 'TEXT'
                         <<b>> для выбора типа 'BLOB'
                         или <<0>> для отмены""")
        tup1 = input("....")
        tup1.lower()
        if tup1 == "n":
            print("Вы выбрали тип 'NULL'")
            tup1 = "NULL"
            break
        elif tup1 == "i":
            print("Вы выбрали тип 'INTEGER'")
            tup1 = "INTEGER"
            break
        elif tup1 == "r":
            print("Вы выбрали тип 'REAL'")
            tup1 = "REAL"
            break
        elif tup1 == "t":
            print("Вы выбрали тип 'TEXT'")
            tup1 = "TEXT"
            break
        elif tup1 == "b":
            print("Вы выбрали тип 'BLOB'")
            tup1 = "BLOB"
            break
        elif tup1 == "0":
            print("вы не выбрали тип")
            tup1 = None
            break
        else:
            print("что-то не то")
    return tup1
def vvod_znach():
    col_stbl = None
menu()
как передавать значения из функции в функцию, например если открыл бд и в цикле я работаю с ней пока не закрою и т. д., или кто подскажет в какую сторону двигаться? Может вообще gui надо или в данном случае проще классом? Надеюсь понятно объяснил проблему, спасибо
FishHook
1. Функции - это хорошо, но ООП - лучше. Используйте классы и объекты, они как раз для того и придуманы, чтобы инкапсулировать внутри себя некие действие и относящиеся к ним данные.
2. Не бойтесь словарей!
if response == "1":
    sozd_db(name_base)
elif response == "2":
    pass
elif response == "3":
некрасиво
actions = {
"1": func1,
"2": func2
}
py.user.next
Yurka
кто подскажет в какую сторону двигаться?
Нужно сделать исполнитель, который умеет открывать базу, создавать таблицу, читать из таблицы, писать в таблицу, проверять наличие таблицы. А потом пишешь функцию, которая с его помощью делает определённый набор действий.
Yurka
Всем спасибо, буду копать в сторону ООП
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB