Я только начинаю изучать Python, пытаюсь учиться.
Концепция программы - "Приложение" для приема заказов в кофейне [![введите здесь описание изображения][1]][1]
if Customer_Name in Customers:
Customers[Customer_Name]['Orders'] += 1
Customers[Customer_Name]['TotalAmount'] = Total_Amount
else:
Customers[Customer_Name] = {}
Customers[Customer_Name]['Name'] = Customer_Name
Customers[Customer_Name]['Address'] = Customer_Address
Customers[Customer_Name]['ID'] = uuid.uuid1()
Customers[Customer_Name]['Orders'] = 1
Customers[Customer_Name]['TotalAmount'] = 0
print(Customer_Name, "has ordered {} time(s)".format(Customers[Customer_Name]['Orders']))
if Customers[Customer_Name]['TotalAmount'] == 0:
print("This is the first time", Customer_Name, "orders")
else:
print(Customer_Name, "has spent", Customers[Customer_Name]['TotalAmount'], "in total")
print("Current Date is: {}".format(Today_Date))
Order_Price = float(input("Total amount of order:"))
Total_Amount = Order_Price + Total_Amount
if Print_Today != Today_Date:
print("Total amount of orders today is: ", float(Total_Amount))
answer1 = input("Send another order? (Y/N)").lower()
process2 = answer1 == "y"
LengthCustomersList = len(Customer_List)
length += 1
in_list += 1
file.write(str(Customer_List[0:]) + '\n') # TAKE CARE FOR DUPLICATE NAMES FROM SAME ADDRESS
file1.write(Customer_Name + " has ordered " + str(Customers[Customer_Name]['Orders']) + " times in total\n")
# FIX DUPLICATES SAME NAME SAME ADDRESS
csv_writer = DictWriter(open('data_entered.csv','a'), fieldnames=['Customer Name', 'Customer Address', 'Customer ID', 'Total Orders',
'Total Amount'])
csv_writer.writeheader()
csv_writer.writerows([{'Customer Name': Customers[Customer_Name]['Name'],'Customer Address': Customers[Customer_Name]['Address'],
'Customer ID': Customers[Customer_Name]['ID'],
'Total Orders': Customers[Customer_Name]['Orders'],
'Total Amount': Customers[Customer_Name]['TotalAmount']}]) # TOTAL AMOUNT= 0 IF NOT MORE THAN 2 TIMES ORDER
if int(length) == int(LengthCustomersList):
process1 = False
file.close()
file1.close()
file2.close()
Это вывод, который я сейчас получаю
[![Вывод][2]][2]
Возникает вопрос: почему он импортирует только то имя, которое вводится дважды, а не Мишель в данном случае.
PS*. Я хотел бы понять, как это исправить. Поэтому, пожалуйста, не давайте мне решение сразу.
Теперь должно быть хорошо.
Похоже, вы не просматриваете словарь Customers
, чтобы добавить его в файл CSV. Вы можете использовать атрибут .keys()
вложенного словаря Customers
и перебирать каждый клиентский словарь. Внутри цикла используйте функцию .writerow()
, чтобы добавить данные текущего клиента.
Мои изменения в коде:
# Rest of the code
csv_writer = DictWriter(open('data_entered.csv', 'a'),
fieldnames=['Customer Name', 'Customer Address', 'Customer ID', 'Total Orders',
'Total Amount'])
csv_writer.writeheader()
for customer_name in Customers.keys():
csv_writer.writerows(
[{'Customer Name': Customers[customer_name]['Name'], 'Customer Address': Customers[customer_name]['Address'],
'Customer ID': Customers[customer_name]['ID'],
'Total Orders': Customers[customer_name]['Orders'],
'Total Amount': Customers[customer_name]['TotalAmount']}]) # TOTAL AMOUNT= 0 IF NOT MORE THAN 2 TIMES ORDER
Полный код:
import uuid # GET A RANDOM ID FOR THE CUSTOMER
from datetime import date # GET CURRENT DATE
from csv import DictWriter
file = open('CustomerNames.txt', 'w')
file1 = open('Orders_Per_Users.txt', 'a')
file2 = open('data_entered.csv', 'a')
x = -1
in_list = -1
length = 0
Total_Amount = 0.0
Customer_List = []
Address_List = []
Today_Key = date.toordinal(date.today())
Today_Date = date.today()
Print_Today = Today_Date
Customers = {}
Dates = {}
FirstEmployeeAccountUsername = "coffee1"
FirstEmployeeAccountPassword = "coffeeshop1"
SecondEmployeeAccountUsername = "coffee2"
SecondEmployeeAccountPassword = "coffeeshop2"
ThirdEmployeeAccountUsername = "coffee3"
ThirdEmployeeAccountPassword = "coffeeshop3"
print("Welcome to our coffee shop!")
print("Login")
# EMPLOYEE LOGIN PROCESS STARTS
LoginEnter = True
while LoginEnter:
username = input("Username: ")
password = input("Password: ")
if username == FirstEmployeeAccountUsername and password == FirstEmployeeAccountPassword or username == SecondEmployeeAccountUsername and password == SecondEmployeeAccountPassword or username == ThirdEmployeeAccountUsername and password == ThirdEmployeeAccountPassword:
print("Login Successful")
LoginEnter = False
else:
print("Invalid Login. Try again")
# EMPLOYEE LOGIN PROCESS ENDS
# PROCESS AFTER ORDER PLACEMENT STARTS
process1 = True
process2 = True
while process1:
while process2:
x += 1
Customer_Name = input("Customer's Name:")
Customer_Address = input("Customer's Address:")
Address_List.append(Customer_Address)
Customer_List.append(Customer_Name)
if x == 1:
if Customer_Address in Address_List:
First_Index = Address_List.index(Customer_Address)
if Customer_Name == Customer_List[First_Index]:
Customer_List.pop(First_Index)
Address_List.pop(First_Index)
x = x - 1
if Today_Key not in Dates:
Dates[Today_Key] = {}
if Customer_Name not in Dates[Today_Key]:
Dates[Today_Key][Customer_Name] = 1
else:
Dates[Today_Key][Customer_Name] += 1
if Customer_Name in Customers:
Customers[Customer_Name]['Orders'] += 1
Customers[Customer_Name]['TotalAmount'] = Total_Amount
else:
Customers[Customer_Name] = {}
Customers[Customer_Name]['Name'] = Customer_Name
Customers[Customer_Name]['Address'] = Customer_Address
Customers[Customer_Name]['ID'] = uuid.uuid1()
Customers[Customer_Name]['Orders'] = 1
Customers[Customer_Name]['TotalAmount'] = 0
print(Customer_Name, "has ordered {} time(s)".format(Customers[Customer_Name]['Orders']))
if Customers[Customer_Name]['TotalAmount'] == 0:
print("This is the first time", Customer_Name, "orders")
else:
print(Customer_Name, "has spent", Customers[Customer_Name]['TotalAmount'], "in total")
print("Current Date is: {}".format(Today_Date))
Order_Price = float(input("Total amount of order:"))
Total_Amount = Order_Price + Total_Amount
if Print_Today != Today_Date:
print("Total amount of orders today is: ", float(Total_Amount))
answer1 = input("Send another order? (Y/N)").lower()
process2 = answer1 == "y"
LengthCustomersList = len(Customer_List)
length += 1
in_list += 1
file.write(str(Customer_List[0:]) + '\n') # TAKE CARE FOR DUPLICATE NAMES FROM SAME ADDRESS
file1.write(Customer_Name + " has ordered " + str(Customers[Customer_Name]['Orders']) + " times in total\n")
# FIX DUPLICATES SAME NAME SAME ADDRESS
csv_writer = DictWriter(open('data_entered.csv', 'a'),
fieldnames=['Customer Name', 'Customer Address', 'Customer ID', 'Total Orders',
'Total Amount'])
csv_writer.writeheader()
for customer_name in Customers.keys():
csv_writer.writerows(
[{'Customer Name': Customers[customer_name]['Name'], 'Customer Address': Customers[customer_name]['Address'],
'Customer ID': Customers[customer_name]['ID'],
'Total Orders': Customers[customer_name]['Orders'],
'Total Amount': Customers[customer_name]['TotalAmount']}]) # TOTAL AMOUNT= 0 IF NOT MORE THAN 2 TIMES ORDER
if int(length) == int(LengthCustomersList):
process1 = False
file.close()
file1.close()
file2.close()
Дополнительная информация о .keys()
и других встроенных методах словаря: https://www.w3schools.com/python/python_ref_dictionary.asp
Можете ли вы объяснить или дать мне ссылку, чтобы я мог понять команду .keys(). Я новичок в словарях и еще не совсем в них разобрался
Вот: w3schools.com/python/python_ref_dictionary.asp
Пожалуйста, исправьте отступ кода, это важно для Python.