program pemesanan pizza pertama
Mencoba mempelajari keterampilan baru pada usia 40 tahun tanpa pengalaman terkait sebelumnya :-) Membeli buku 'Python crash course 2e' dan memutuskan untuk sedikit freewheel setelah seminggu dengan apa yang telah saya pelajari sejauh ini .. Saya memasukkan semuanya ke dalam program kecil untuk memesan pizza dan saya akan sangat senang dengan beberapa tanggapan sebelum saya mengambil kebiasaan buruk ..
pertama: meskipun saya pikir saya memahami konsep fungsi dan kelas, saya tidak melihat perlunya menggunakan ini karena cukup sederhana .. tetapi sekarang menjadi agak sulit. Saya mencoba lolos dengan daftar dan kamus sederhana untuk menyimpan pesanan dan harga .. Tetapi masalah muncul ketika Anda ingin memesan 2 pizza yang sama dengan topping berbeda (Anda mendapatkan kunci yang sama). Juga, memberikan harga untuk pesanan akhir itu bagus, tetapi jika Anda ingin menghapus pizza dari pesanan, saya tidak dapat memikirkan cara untuk menghapus item dari daftar.
Mungkin seseorang dapat memberi saya umpan balik tentang arah mana saya harus mencari solusi?
#making the lists
available_pizzas = ['margarita', 'pollo', '4cheese', 'bolognese', 'vegetarian']
available_toppings = ['mushroom', 'onions', 'green pepper', 'extra cheese']
pizza_prices = {'margarita': 5, 'pollo': 7, '4cheese': 6, 'bolognese': 8, 'vegetarian': 6.5}
topping_prices = {'mushroom':1, 'onions': 2, 'green pepper':3, 'extra cheese':4}
sub_total = []
final_order = {}
customer_adress = {}
#ordering a pizza
print("Hi, welcome to our text based pizza ordering")
order_pizza = True
while order_pizza:
print("Please choose a pizza: ")
print()
for pizzas in available_pizzas:
print(pizzas)
print()
while True:
pizza = input("which pizza would you like to order?")
if pizza in available_pizzas:
print(f"You have ordered a {pizza}.")
sub_total.append(pizza_prices[pizza])
break
if pizza not in available_pizzas:
print(f"I am sorry, we currently do not have {pizza}.")
#asking for extra toppings
order_topping = True
print("This is the list of available extra toppings: ")
for toppings in available_toppings:
print(toppings)
print()
while order_topping:
extra_topping = input("Would you like an extra topping? yes or no?")
if extra_topping == "yes":
topping = input("Which one would you like to add?")
if topping in available_toppings:
final_order.setdefault(pizza, [])
final_order[pizza].append(topping)
print(f"I have added {topping}.")
sub_total.append(topping_prices[topping])
else:
print(f"I am sorry, we don't have {topping} available.")
elif extra_topping == "no":
break
extra_pizza = input("Would you like to order another pizza?")
if extra_pizza == "no":
for key, value in final_order.items():
print(f"\nYou have order a {key} pizza with {value}")
check_order = True
while check_order:
print()
order_correct = input("Is this correct? yes/no ")
if order_correct == "yes":
check_order = False
order_pizza = False
if order_correct == "no":
print(final_order)
add_remove = input("would you like to add or remove? ")
if add_remove == "remove":
remove = input("Which pizza would you like to remove? ")
del final_order[remove]
print(final_order)
if add_remove == "add":
check_order = False
#finalizing the order
print(f"\nYour total order price is: ${sum(sub_total)}")
print("Please provide us with your name, adress and phonenumber")
customer_adress['name'] = input("what is your name?")
customer_adress['street_name'] = input("What is your streetname and housenumber?")
customer_adress['postalcode'] = input("What is the postalcode and cityname?")
customer_adress['phonenumber'] = input("What is your phonenumber?")
print()
print(f"Thank you for your order {customer_adress['name']}.")
print()
print("We will deliver your order to this adres ASAP")
print()
print(customer_adress['street_name'])
print(customer_adress['postalcode'])
print()
print(f"we will contact you on {customer_adress['phonenumber']} if anything comes up.")
Jawaban
Selamat datang di komunitas CR.
Pertahankan deklarasi konstan di atas. Meskipun Anda mengikuti konvensi penamaan PEP8 di seluruh (hampir) seluruh basis kode, konstanta (atau global) dinamai sebagai
UPPER_SNAKE_CASE. Jadi,pizza_pricesjadinyaPIZZA_PRICES.Gunakan string yang dikutip tiga kali dalam python untuk konten multiline. Pernyataan cetak Anda akan terlihat jauh lebih bersih (tidak perlu
print()pernyataan kosong ).Letakkan alur eksekusi kode Anda di dalamif __name__ == "__main__" blok.
Alih-alih memiliki variabel terpisah untuk daftar pizza / topping dan harganya, simpan hanya pemetaan pizza / topping, dan Anda bisa mendapatkan daftar pizza / topping menggunakan
dict.items()iterator.Karena mayoritas eksekusi kode bergantung pada pilihan input yang valid dari pengguna; lebih baik memberikan pilihan tersebut dalam panggilan masukan. Misalnya:
extra_pizza = input("Would you like to order another pizza?")tidak menjelaskan di mana pengguna harus mengetik "
y/Y/Yes/N/n/No/Cancel/Quit". Menempatkan pilihan pilihan ini dalam fungsi terpisah akan lebih membantu:def get_user_choice(message, *choices): prompt = f"{message}\n\nChoicese are: {' '.join(choices)}" while True: choice = input(prompt) if choice in choices: return choice print("Wrong selection")sekarang panggil di atas sebagai berikut:
add_remove = get_user_choice("would you like to add or remove?", "add", "remove")Saat Anda mulai dengan pemrograman, saya sarankan mengumpulkan sumber daya terkait ke dalam kelas, daripada menggunakan kamus. Misalnya. sebuah
Customerkelas, denganname,phonedll atribut.PizzaKelas lain dengan asosiasitypedantoppingslain - lain.
Untuk memperluas poin 4:
PIZZA_PRICING = {
"margarita": 5,
"pollo": 7,
"4cheese": 6,
"bolognese": 8,
"vegetarian": 6.5,
}
Menanyakan preferensi pengguna untuk pizza:
pizza_choice = get_user_choice("Please choose a pizza:", *PIZZA_PRICING.keys())
Kode Anda cukup mudah diikuti. Kerja bagus untuk itu. Masih ada ruang untuk perbaikan. Tidak banyak perubahan.
Hapus layar
Python memiliki fungsi tertentu untuk menghapus teks apa pun yang tercetak di konsol. Periksa halaman ini untuk semua informasi.
jika Anda menggunakan windows, Anda dapat pip install osdan kemudian import osdi bagian atas program Anda untuk menggunakan fungsi-fungsi ini.
Misalnya, os.system('pause')dapat digunakan untuk menunggu pengguna mengklik tombol apa saja setelah Anda menampilkan pesan kepada mereka.
Menggunakan '\n'
Saya tidak yakin mengapa saya melihat banyak yang kosong print()tetapi saya pikir Anda mencoba untuk mencetak baris baru. Secara default setelah menggunakan print()fungsi akan selalu ada baris baru di akhir teks. Tetapi jika Anda ingin mencetak lebih banyak, gunakan '\n'. Misalnya, Setelah Anda mencetak sesuatu
Salah:
print("Hello,World!")
print()
print("Yay")
Keluaran:
Hello World!
Yay
Benar:
print("Hello,World!\n")
print("Yay")
Keluaran:
Hello World!
Yay
Gunakan Fungsi
Pindahkan bagian pengambilan pesanan ke dalam fungsi dengan cara ini. Anda juga dapat membuat fungsi baru yang disebut ShowMenu () untuk mencetak ke menu setiap kali Anda memanggil fungsi tersebut.
def ShowMenu():
os.system('cls')
print("Available Pizzas:\n")
print(*available_pizzas,sep = ', ')
print("\n\nAvailable Topings:\n")
print(*available_toppings,sep = ', ')
print('\n\n')
def TakeOrderInput():
os.system('cls')
print("Hi, welcome to our text based pizza ordering")
ordering = True
while ordering:
os.system('cls')
ShowMenu()
pizza = input("Please choose a pizza: ")
if pizza not in available_pizzas:
print(f"I am sorry, we currently do not have {pizza}\n.")
os.system('pause')
continue
topping = input("Please choose a topping: ")
if topping not in available_toppings:
print(f"I am sorry, we currently do not have {topping}\n.")
os.system('pause')
continue
print(f"Final order: {pizza} with topping {topping}: ")
ordering = False
return pizza,topping
Apa yang Anda lakukan sekarang saat Anda ingin mengambil pesanan baru?
pizza, topping = TakeOrderInput()
Pemrograman berorientasi objek
Jika Anda tidak tahu apa itu OOP , inilah saatnya Anda mempelajarinya karena Ini membantu Anda membuat kode Anda lebih bersih dan terlebih lagi MEMBANTU Anda membuat kode dengan lebih baik.
Tidak ada aturan bahwa Anda harus menggunakan pemrograman berorientasi objek, itu sepenuhnya terserah Anda karena Anda adalah pengembang dan itu adalah gaya Anda. Tapi di sini adalah implementasi tipikal kelas dalam konteks program Anda.
class Order:
def __init__(self):
taxes = 0 #You can add taxes
pizza,topping = TakeOrderInput()
self.type = pizza
self.topping = topping
self.PizzaPrice = pizza_prices[pizza]
self.ToppingPrice = topping_prices[topping]
self.Total = self.PizzaPrice + self.ToppingPrice
print(self.Total)
Tentu saja ini hanyalah implementasi kelas kecil, setelah Anda mempelajari lebih lanjut, Anda dapat menambahkan lebih banyak hal seperti alamat penagihan, pajak, dan sebagainya.
Ambil pesanan baru
Dengan semua yang telah kami lakukan. Dengan sendirinya itu tidak melakukan apa-apa. Sekarang kita perlu menggunakan fungsi ini
choice = True
orders = []
orderchoice = input("Welcome! Would you like to order ? (y/n): ")
if orderchoice == 'n':
print("Have a nice day!")
else:
while choice:
neworder = Order()
orders.append(neworder)
newchoice = input("Would you like to order again? (y/n): ")
if (newchoice) == 'n':
break
Ini akhirnya akan membuat daftar semua pesanan yang telah diberikan pengguna. Untuk mengakses apa pun, lakukan iterasi melalui daftar dan kemudian dapatkan atributnya. Misalnya, jika Anda ingin mendapatkan total biaya.
total = 0
for order in orders:
total+=order.Total
print(total)
Terakhir
Berikut tampilan program Anda dengan semua perubahannya
import os
available_pizzas = ['margarita', 'pollo', '4cheese', 'bolognese', 'vegetarian']
available_toppings = ['mushroom', 'onions', 'green pepper', 'extra cheese']
pizza_prices = {'margarita': 5, 'pollo': 7, '4cheese': 6, 'bolognese': 8, 'vegetarian': 6.5}
topping_prices = {'mushroom':1, 'onions': 2, 'green pepper':3, 'extra cheese':4}
def ShowMenu():
os.system('cls')
print("Available Pizzas:\n")
print(*available_pizzas,sep = ', ')
print("\n\nAvailable Topings:\n")
print(*available_toppings,sep = ', ')
print('\n\n')
def TakeOrderInput():
os.system('cls')
print("Hi, welcome to our text based pizza ordering")
ordering = True
while ordering:
os.system('cls')
ShowMenu()
pizza = input("Please choose a pizza: ")
if pizza not in available_pizzas:
print(f"I am sorry, we currently do not have {pizza}\n.")
os.system('pause')
continue
topping = input("Please choose a topping: ")
if topping not in available_toppings:
print(f"I am sorry, we currently do not have {topping}\n.")
os.system('pause')
continue
print(f"Final order: {pizza} with topping {topping}: ")
ordering = False
return pizza,topping
class Order:
def __init__(self):
taxes = 0 #You can add taxes
pizza,topping = TakeOrderInput()
self.type = pizza
self.topping = topping
self.PizzaPrice = pizza_prices[pizza]
self.ToppingPrice = topping_prices[topping]
self.Total = self.PizzaPrice + self.ToppingPrice
choice = True
orders = []
orderchoice = input("Welcome! Would you like to order ? (y/n): ")
if orderchoice == 'n':
print("Have a nice day!")
else:
while choice:
neworder = Order()
orders.append(neworder)
newchoice = input("Would you like to order again? (y/n): ")
if (newchoice) == 'n':
break
total = 0
for order in orders:
total+=order.Total
print("Total: ",total, '$')
Saya belum melakukan apa pun sampai bagian terakhir yaitu alamatnya, Nomor telepon dan sebagainya, Anda dapat menambahkan hal-hal itu sesuai keinginan.
Saya harap Anda menemukan ulasan ini bermanfaat 😁