def main(): name = request_data() session = connect_db() user = load_user(name, session) if not user: print(f'Пользователь с именем {name} не найден.') else: nearest_height(user, session) nearest_date(user, session)
def main(): """ Осуществляет взаимодействие с пользователем, обрабатывает пользовательский ввод """ session = users.connect_db() id = input("Введи id пользователя для поиска (1,2,..,201..,1003): ") user_db, user_height = find(id, session) if user_db != -1 and user_height != -1: find_athlete_height(user_height, session) find_athlete_db(user_db, session)
def main(): """ Осуществляет взаимодействие с пользователем, обрабатывает пользовательский ввод """ session = connect_db() user_id = request_data() user = session.query(User).filter(User.id == user_id).first() if not user: print("Такого пользователя не нашлось:(") else: bd_athlete, bd = nearby_birth(user, session) height_athlete, height = nearby_height(user, session) print( "Ближайший по дате рождения атлет: {}, его дата рождения: {}".format(bd_athlete, bd) ) print( "Ближайший по росту атлет: {}, его рост: {}".format(height_athlete, height) )
def main(): session = users.connect_db() user_id = request_data() user = session.query(users.User).filter(users.User.id == user_id).first() if user: nearest_birth_athelete = session.query(Athelete)\ .filter(Athelete.birthdate.isnot(None))\ .order_by(func.abs(func.julianday(Athelete.birthdate) - func.julianday(user.birthdate))).first() nearest_height_athelete = session.query(Athelete)\ .filter(Athelete.height.isnot(None))\ .order_by(func.abs(Athelete.height - user.height)).first() print( f'Ближайший по дате рождения атлет: id: {nearest_birth_athelete.id}, имя: {nearest_birth_athelete.name}, дата рождения: {nearest_birth_athelete.birthdate}' ) print( f'Ближайший по росту атлет: id: {nearest_height_athelete.id}, имя: {nearest_height_athelete.name}, рост: {nearest_height_athelete.height}' ) else: print('Пользовалель с таким id не найден')
def find(): session = connect_db() find_id = input("Ввведите идентификатор пользователя: ") user = session.query(User).filter(User.id == find_id).first() atheletes = session.query(Athelete).filter(Athelete.birthdate).all() atheletes_height = session.query(Athelete).filter(Athelete.height).all() session.close() if user: candidate1 = atheletes[0] candidate2 = atheletes[1] for athelete in atheletes: date1 = datetime.strptime(athelete.birthdate, '%Y-%m-%d') date2 = datetime.strptime(user.birthdate, '%Y-%m-%d') date3 = datetime.strptime(candidate1.birthdate, '%Y-%m-%d') diff_athelete = abs(date1 - date2).days diff_candidate1 = abs(date3 - date2).days if diff_athelete < diff_candidate1: candidate2 = candidate1 candidate1 = athelete print("Первый атлет-" + candidate1.name, candidate1.birthdate, "\nВторой атлет-" + candidate2.name, candidate2.birthdate) candidate_height = atheletes_height[0] for ath_height in atheletes_height: diff_athelete_height = abs(ath_height.height - user.height) diff_candidate_height = abs(candidate_height.height - user.height) if diff_athelete_height < diff_candidate_height: candidate_height = ath_height print(candidate_height.name, candidate_height.height) else: print("Пользователя с таким идентификатором нет")
def main(): session = users.connect_db() id = int(input("Введите id пользователя (целое число):")) user = users.find_user(id, session) if user != None: find_athelete(user, session)
import users, find_athlete from users import connect_db, request_data from find_athlete import find_similiar session = connect_db() mode = input( "Выберите режим \n1 - ввести данные нового пользователя\n2 - ближайшего к пользователю атлета\n " ) if mode == "1": user = request_data() # добавляем нового пользователя в сессию session.add(user) session.commit() print("Спасибо, данные сохранены!") elif mode == "2": name = input("Введите имя пользователя для поиска: ") find_similiar(name, session) else: print("Неверно ввели режим. До свидания!")
def main(): """ Осуществляет взаимодействие с пользователем, обрабатывает пользовательский ввод """ session = u.connect_db() # просим пользователя выбрать режим mode = input( "Выбери режим.\n1 - выбрать пользователя по индентификатору\n2 - добавить нового пользователя\n" ) # проверяем режим if mode == "1": query_user = session.query(u.User) # выгружаем список идентификаторов таблицы user user_ids = [user.id for user in query_user.all()] query_athelete = session.query(Athelete) # выгружаем список идентификаторов таблицы athelete athelete_ids = [user.id for user in query_athelete.all()] # создаем словарь, где ключ - это идентификатор пользователя, а значение - дата рождения athelete_birthdates = { user.id: user.birthdate for user in query_athelete.all() } # сортируем словарь по значениям(по дате рождения) athelete_birthdates = sorted(athelete_birthdates.items(), key=lambda kv: kv[1]) # создаем словарь, где ключ - это идентификатор пользователя, а значение - рост athelete_heights = { user.id: user.height for user in query_athelete.all() } # если рост у атлета не указан - принимаем его рост равным нулевому значению for key, value in athelete_heights.items(): if athelete_heights[key] is None: athelete_heights[key] = 0 # сортируем словарь по значениям(по росту) athelete_heights = sorted(athelete_heights.items(), key=lambda kv: kv[1]) # запрашиваем идентификатор пользователя user_id = int(input("Введите идентификатор пользователя: ")) if user_id in user_ids: # если такой пользователь существует - ищем ему атлета, ближайшего по дате рождения, по росту query = session.query(u.User).filter(u.User.id == user_id).first() # сохраним дату рождения пользователя birthdate = query.birthdate # сохраним рост пользователя height = query.height print("Выбранный пользователь родился {}, его рост: {}\n".format( birthdate, height)) # формируем список дат рождения атлетов, при этом преобразовывая даты в тип datetime datalist = [] for item in athelete_birthdates: datalist.append(datetime.strptime(item[1], "%Y-%m-%d")) # получаем в переменной res значение ближайшей даты, а в ind - значение, по которму определим идентификатор атлета res, ind = nearest(datalist, datetime.strptime(birthdate, "%Y-%m-%d")) print("Ближайший атлет по дате рождения:{}, его дата {}".format( athelete_birthdates[ind][0], res)) # далее по аналогии делаем то же самое с ростом datalist.clear() for item in athelete_heights: datalist.append(item[1]) res, ind = nearest(datalist, height) print("Ближайший атлет по росту:{}, его рост {}".format( athelete_heights[ind][0], res)) else: print( "К сожалению, пользователя с таким идентификатором в базе нет :(" ) elif mode == "2": # запрашиваем данные пользоватлея user = u.request_data() # добавляем нового пользователя в сессию session.add(user) # сохраняем все изменения, накопленные в сессии session.commit() print("Спасибо, данные сохранены!") else: print("Некорректный режим:(")