ilk pizza sipariş programı
Daha önce ilgili herhangi bir deneyim olmadan 40 yaşında yeni bir beceri öğrenmeye çalışıyorum :-) 'Python çarpışma kursu 2e' kitabını satın aldım ve şimdiye kadar öğrendiklerimi bir hafta sonra biraz serbest bırakmaya karar verdim. pizza sipariş etmek için küçük bir program ve kötü alışkanlıklar edinmeden önce biraz geri bildirim almak isterim ..
Öncelikle: Fonksiyonlar ve sınıflar kavramını anladığımı düşünmeme rağmen, oldukça basit olduğu için bunları kullanma ihtiyacını görmedim .. ama şimdi biraz zorlaşıyor. Siparişleri ve fiyatları saklamak için basit listeler ve sözlüklerle sıyrılmaya çalıştım .. Ama aynı pizzadan 2 tane farklı sos ile sipariş etmek istediğinizde sorun çıkıyor (aynı anahtarları alıyorsunuz). Ayrıca, son sipariş için fiyat vermek güzeldi, ancak bir pizzayı siparişten silmek isterseniz, listeden öğeleri silmenin bir yolunu düşünemiyorum.
Belki birisi bana bir çözüm aramam gereken yönde geribildirim verebilir?
#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.")
Yanıtlar
CR topluluğuna hoş geldiniz.
Sürekli beyanları en üstte tutun. PEP8 adlandırma kurallarını (neredeyse) tüm kod tabanı boyunca takip etseniz de, sabit (veya küreseller) olarak adlandırılır
UPPER_SNAKE_CASE. Böylece,pizza_pricesolurPIZZA_PRICES.Çok satırlı içerik için python'da üç tırnaklı dizeler kullanın. Baskı ifadeleriniz çok daha temiz görünür (boş
print()ifadelere gerek yoktur ).İçerdeki kod yürütme akışını koyun bloğu.if __name__ == "__main__"
Pizza / sos listesi ve fiyatları için ayrı değişkenler kullanmak yerine, yalnızca pizza / sos eşlemelerini saklayın ve
dict.items()yineleyiciyi kullanarak pizza / sosların listesini alabilirsiniz .Kod yürütmenin çoğu kullanıcının geçerli girdi seçimine bağlı olduğundan; Giriş çağrısında bu seçenekleri sağlamak daha iyidir. Örneğin:
extra_pizza = input("Would you like to order another pizza?")kullanıcının nereye "
y/Y/Yes/N/n/No/Cancel/Quit" yazması gerektiğini netleştirmez . Bu seçim seçimini ayrı bir işleve koymak daha faydalı olacaktır: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")şimdi yukarıdakileri şu şekilde arayın:
add_remove = get_user_choice("would you like to add or remove?", "add", "remove")Programlamaya başlarken, bir sözlük kullanmak yerine ilişkili kaynakları bir sınıfta toplamayı öneririm. Örneğin. bir
Customersınıf, ilename,phonevb. nitelikler. Bir başkaPizzailişkili sınıftypevetoppingsvb
4. noktayı genişletmek için:
PIZZA_PRICING = {
"margarita": 5,
"pollo": 7,
"4cheese": 6,
"bolognese": 8,
"vegetarian": 6.5,
}
Kullanıcının pizza tercihini sormak:
pizza_choice = get_user_choice("Please choose a pizza:", *PIZZA_PRICING.keys())
Kodunuzu takip etmek oldukça kolaydır. Bunun için çok iyi iş. Hala iyileştirme için biraz yer var. Çok fazla değişiklik yok.
Temiz ekran
Python, konsolda yazdırılan herhangi bir metni temizlemek için belirli işlevlere sahiptir. Tüm bilgiler için bu sayfayı kontrol edin .
Eğer pencerelerde ise şunları yapabilirsiniz pip install osve daha sonra import osprogramın üst kısmında, bu işlevleri kullanmak için.
Örneğin os.system('pause'), kullanıcıya bir mesaj gösterdikten sonra herhangi bir tuşa tıklamasını beklemek için kullanılabilir.
Kullanım '\n'
Neden birçok boş kelime görüyorum bilmiyorum print()ama sanırım yeni bir satır yazdırmaya çalışıyorsunuz. Varsayılan olarak, print()işlevi kullandıktan sonra metnin sonunda her zaman yeni bir satır olacaktır. Ancak daha fazla yazdırmak istiyorsanız kullanın '\n'. Örneğin, bir şey yazdırdıktan sonra
Yanlış:
print("Hello,World!")
print()
print("Yay")
Çıktı:
Hello World!
Yay
Doğru:
print("Hello,World!\n")
print("Yay")
Çıktı:
Hello World!
Yay
İşlevleri Kullan
Sipariş alan bölümü bu şekilde bir işleve taşıyın. Ayrıca, işlevi her çağırdığınızda menüye yazdırmak için ShowMenu () adında yeni bir işlev de oluşturabilirsiniz .
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
Yeni bir sipariş almak istediğinizde şimdi ne yaparsınız?
pizza, topping = TakeOrderInput()
Nesne yönelimli programlama
OOP'nin ne olduğunu bilmiyorsanız , kodunuzu daha temiz hale getirmenize ve ayrıca daha iyi kodlamanıza YARDIMCI olmanıza yardımcı olduğu için bunu öğrenmenin zamanı gelmiştir.
Nesne yönelimli programlamayı kullanmanız gerektiğine dair bir kural yoktur, geliştirici olduğunuz için tamamen size bağlıdır ve bu sizin tarzınızdır. Ancak programınız bağlamında sınıfların tipik bir uygulaması burada .
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)
Tabii ki bu sadece küçük bir sınıf uygulaması, daha fazla öğrendikten sonra fatura adresi, vergiler vb. Gibi daha fazla şey ekleyebilirsiniz.
Yeni bir sipariş al
Yaptığımız her şeyle. Kendi başına hiçbir şey yapmaz. Şimdi bu işlevleri kullanmamız gerekiyor
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
Bu, sonunda kullanıcının verdiği tüm siparişlerin bir listesini oluşturacaktır. Herhangi bir şeye erişmek için listeyi yineleyin ve ardından özniteliği alın. Örneğin, toplam maliyeti almak istiyorsanız.
total = 0
for order in orders:
total+=order.Total
print(total)
Final
İşte tüm değişikliklerle birlikte programınız nasıl görünecek?
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, '$')
Son kısımda adres, Telefon numarası vb. Hiçbir şey yapmadım, bunları dilediğiniz gibi ekleyebilirsiniz.
Umarım bu incelemeyi faydalı bulmuşsunuzdur 😁