В настоящее время я беру свой первый курс по Python, и у меня нет опыта в CS. Я работаю над гипотетической программой, которая включает в себя небольшие проблемы из наших тем для обсуждения и задания по критическому мышлению, чтобы попрактиковаться в использовании кода таким способом, который имеет смысл для меня (я публицист и фотограф). На данный момент программа представляет собой клиентскую базу данных для публициста, которая добавляет информацию о клиенте, печатает полный список клиентов и рассчитывает удержание налогов.
Я изо всех сил пытаюсь создать бесконечный вложенный словарь, который заполняется через пользовательский ввод. Я искал в Интернете, но не могу найти решение, которое соответствует моим гипотетическим требованиям.
Для ветки программы "ДОБАВИТЬ" я хотел бы иметь возможность добавлять новые клиенты / информацию во вложенный словарь (client_info). Программа задает пользователю ряд вопросов, таких как идентификатор клиента, название группы, дата окончания контракта, оплата и управление. Я надеюсь использовать какой-то цикл, чтобы пользователь мог добавить несколько полос в словарь client_info, и программа автоматически обновит и создаст новый словарь для каждой полосы в словаре client_info.
Сначала я заполнил client_info четырьмя группами и их информацией. Затем я создал пустые словари (с присвоением номеров для каждого пустого словаря) и написал индивидуальный код для каждого пустого словаря (всего 10), но это означало, что у меня было много кода, и я не мог найти способ переработать код для оптимизировать программу.
Я также пытался использовать инициалы для полос вместо числа, полагая, что может быть простой способ присвоить идентификатор клиента, но это с треском провалилось, и я не смог найти способ заставить программу работать.
# Define dictionary for client information
client_info = {1: {'band' : 'colfax_speed_queen','email' : 'csq@colfaxspeedqueen.com', 'contract' : '20190808', 'pay' : int(800), 'mgmt' : 'MGI'},
2: {'band' : 'the_ghoulies', 'email' : 'tg@theghoulies.com', 'contract' : '20191031', 'pay' : int(250), 'mgmt' : 'DIY'},
3: {'band' : 'hail_satan', 'email' : 'hs@hailsatan.com', 'contract' : '20190606', 'pay' : int(700), 'mgmt' : 'APG'},
4: {'band' : 'plastic_daggers', 'email' : 'pd@plasticdaggers.com', 'contract' : '20190420', 'pay' : int(1000), 'mgmt' : 'DIY'}}
# Pretend to create infinite nested dictionary for client information, but ultimately fail
c = 4
while c <= 19:
c += 1
client_info[c] = {}
# General greeting
print("Welcome to the client database.")
# Directions to use database
main_menu = str("""You can:
PRINT your client list.
ADD a new client to the database.
Calculate your TAX withholding.""")
print(main_menu, "\nWhat would you like to do?")
access_client = input()
# Add client to database
elif access_client.lower() == 'add':
while access_client.lower() == 'add':
# Request user input for client id
print("\nWhat is the client id?")
# Update client id
c = int(input())
# Request user input for client_info[c]['band']
print("What is the name of the band?")
# Update client_info[c]['band']
client_info[c]['band'] = input()
# Request user input for client_info[c]['email']
print("What is " + client_info[c]['band'] + "\'s email address?")
# Update client_info[c]['email']
client_info[c]['email'] = input()
# Request user input for client_info[c]['contract']
print("When does " + client_info[c]['band'] + "\'s contract end?")
# Update client_info[c]['contract']
client_info[c]['contract'] = int(input())
# Request user input for client_info[c]['pay']
print("What is your payment from " + client_info[c]['band'] + "?")
# Update client_info[c]['pay']
client_info[c]['pay'] = int(input())
# Request user input for client_info[c]['mgmt']
print("Who is managing " + client_info[c]['band'] + "?")
# Update client_info[c]['mgmt']
client_info[c]['mgmt'] = input()
# Notify user that system has been updated with client information
print("\nThank you for adding " + client_info[c]['band'] + "\'s information to the client database. The database has been updated.")
print(client_info[c])
print(client_info)
# Ask user to add another client
print("\nType ADD to add another client. Hit any other key to return to the main menu.")
add_client = input()
if add_client.lower() != 'add':
break
print(main_menu)
Цикл while c <= 19 работает так, как я хочу, но если пользователь не знает номер последнего идентификатора клиента, он может случайно перезаписать предыдущую запись.
Если вы напечатаете полный словарь, то будут напечатаны все пустые словари до 20. Если бы я хотел иметь возможность иметь 200 записей в своем словаре, было бы неприятно, чтобы все эти пустые словари распечатывались, когда я хочу увидеть полный список клиентов.
Поскольку в данный момент у меня есть 4 записи в словаре, у меня должно быть c = 4 выше цикла while c <= 19. (Мы не обсуждали, как сохранить содержимое пользовательского ввода в данный момент, но я предполагаю, что это будет проблемой, когда я знаю, как сохранить.) Мне нужно будет обновлять c = # каждый раз, когда я использовал программу. И если я использую c = 0, он удаляет записи, которые я уже сохранил в словаре. </p>
Я думаю, что я близко, но это не так эффективно, как хотелось бы. Я был бы признателен за любую помощь, которую вы мне могли бы оказать, поскольку я абсолютный нуб и понятия не имею, что я делаю!
Спасибо!