While döngüsünden çıkıldığında F stringle print düzenlemesi hakkında

Merhaba sözlükleri kullanarak basit bir uçak bileti programı yaptım ama en son while döngüsünü kırıp girilen tüm yolculara tek bilet basmaya kalktığımda yolcu isimlerinin tamamını alt alta alıp tutarlarını toplatamıyorum. Sadece if blogunun bitişine print koyarsam her yolcu kaydının altında tek tek alabiliyorum. İstediğim bilet gosterım şekli

name destınatıon fee
yolcu adı 1 ıstanbul 200
yolcu adı 2 ıstanbul 300
yolcu adı 3 ıstanbul 400
toplam 900 tl şeklinde bir print almayı beceremedım. Bunu nasıl yapabilirim. Teşekkürler.


destinations_fee = {'baby':
                    {'istanbul': 300, 'roma': 1000, 'boston': 2500, 'tokyo': 4000},
                    'child':
                        {'istanbul': 400, 'roma': 1500, 'boston': 7500, 'tokyo': 9000},
                    'adult':
                        {'istanbul': 600, 'roma': 4500, 'boston': 9500, 'tokyo': 12000}}
baby = False
child = False
adult = False

while True:
    passenger_name = input("Enter Passenger's Name : ")
    if passenger_name == "q":
        print('Exit by user')
        print("Flight Ticket printing")
        break
    passenger_age = int(input("Enter Passenger's age : "))
    destination = input("Enter Destination : ")

    if passenger_age <= 2:
        baby = True
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['baby'][destination]} TL. ")
    elif passenger_age <= 15:
        child = True
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['child'][destination]} TL. ")
    elif passenger_age > 15:
        adult = True
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['adult'][destination]} TL. ")
    else:
        print('wrong age')

    print(f'{"Fligt Ticket":-^100}')
    print(f"{passenger_name}\t\t\t\t\t{destination}\t\t\t\t\t{destinations_fee['adult'][destination]}")
    print('-'*100)

Merhaba,

  1. baby, child ve adult değişkenlerine ihtiyacınız yok. Onları silebilirsiniz. Hiç bir işlemde kullanmıyorsunuz bu değişkenleri.
  2. while döngüsüne girmeden bir tane liste oluşturun.

Örneğin:

passengers = []
  1. if passenger_name == "q" blokunun en altındaki break sözcüğünden önceki satıra print("name destınatıon fee") satırını yazın. Bu satır ile break'in yazılı olduğu satır arasına da bir tane for döngüsü yerleştirin. for döngüsü while döngüsünün dışında tanımlamış olduğunuz liste üzerinde etkili olsun.

Örneğin:

print("name destınatıon fee")
for p in passengers:
    print(*p)
break
  1. Yolcunun yaşını sorgulayıp, girilen değerleri ekrana yazdırdığınız koşullardaki baby, child ve adult değişkenlerini kaldırın, çünkü hiç bir etkisi yok bu değişkenlerin. Bu koşullar altında ister print ifadesinden önce, ister sonra kullanıcılardan aldığınız bilgileri listenize ekleyin.

Örneğin:

passengers.append([passenger_name, destination, destinations_fee['adult'][destination]])
1 Beğeni

Sn@dildeolupbiten ilginiz için teşekkür ederim. Benim kod dogru sonuclari veriyor ama Soylediklerinizi anlayabildigim kadariyla uyguladigimda kod bu sekli aldi.

destinations_fee = {'baby':
                    {'istanbul': 300, 'roma': 1000, 'boston': 2500, 'tokyo': 4000},
                    'child':
                        {'istanbul': 400, 'roma': 1500, 'boston': 7500, 'tokyo': 9000},
                    'adult':
                        {'istanbul': 600, 'roma': 4500, 'boston': 9500, 'tokyo': 12000}}

passengers = []
while True:
    passenger_name = input("Enter Passenger's Name : ")
    if passenger_name == "q":
        print('Exit by user')
        print("Flight Ticket printing")
        print("name destınatıon fee")
        for p in passengers:
            print(*p)
        break
    passenger_age = int(input("Enter Passenger's age : "))
    destination = input("Enter Destination : ")

    if passenger_age <= 2:

        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['baby'][destination]} TL. ")
    elif passenger_age <= 15:

        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['child'][destination]} TL. ")
    elif passenger_age > 15:

        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['adult'][destination]} TL. ")
    else:
        print('wrong age')

    passengers.append([passenger_name, destination, destinations_fee['baby'][destination]])
    passengers.append([passenger_name, destination, destinations_fee['child'][destination]])
    passengers.append([passenger_name, destination, destinations_fee['adult'][destination]]) 

printide bu sekilde Nerede hata var acaba? sonuc 4500 1500 1000 olmali
Screenshot_3

Aşağıdaki ifadeleri ilgili if ve elif koşullarının altına dağıtmanız gerekiyor.

passengers.append([passenger_name, destination, destinations_fee['baby'][destination]])
passengers.append([passenger_name, destination, destinations_fee['child'][destination]])
passengers.append([passenger_name, destination, destinations_fee['adult'][destination]]) 

Mesela:

if passenger_age <= 2:
        passengers.append([passenger_name, destination, destinations_fee['baby'][destination]])
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['baby'][destination]} TL. ")

Tek bilet halinde yine gosteremedim ama daha fazla ugrasmaya gerek yok sayenizde gozumden kacan degisken detayi sayesinde kodu daha kisa yazmayi ogrendim.

yazdiginiz
print(*p) seklindeki koduda ilk defa gordum yanilmiyorsam dongu ne kadar donduyse degiskeni o kadar print et demenin kestirme yolu


destinations_fee = {'baby':
                    {'istanbul': 300, 'roma': 1000, 'boston': 2500, 'tokyo': 4000},
                    'child':
                        {'istanbul': 400, 'roma': 1500, 'boston': 7500, 'tokyo': 9000},
                    'adult':
                        {'istanbul': 600, 'roma': 4500, 'boston': 9500, 'tokyo': 12000}}
passengers = []
while True:
    passenger_name = input("Enter Passenger's Name : ")
    if passenger_name == "q":
        print('Exit by user')
        break
    elif passenger_name == "t":
        print("Flight Ticket printing")
        print(f"name\t\t\t\t\t destınatıon\t\t\t\t\t fee")
        for p in passengers:
            print(f'{"Fligt Ticket":-^100}')
            print(*p)
            print('-'*100)
        break
    passenger_age = int(input("Enter Passenger's age : "))
    destination = input("Enter Destination : ")

    if passenger_age <= 2:
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['baby'][destination]} TL. ")
        passengers.append([passenger_name, destination, destinations_fee['baby'][destination]])
    elif passenger_age <= 15:
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['child'][destination]} TL. ")
        passengers.append([passenger_name, destination, destinations_fee['child'][destination]])
    elif passenger_age > 15:
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['adult'][destination]} TL. ")
        passengers.append([passenger_name, destination, destinations_fee['adult'][destination]])
    else:
        print('wrong age')

yanlışsam düzeltin print(*holder) holder değişkeninin başındaki yıldız bu değişkenin iterable olduğunu ve print içinde unpack yani tüm değerlerinin listelenmesini sağlıyor sözlüklerde unpack içinde **holder kullanabiliyoruz sozluk olmasi şart değil çift sekanslı listelerde de işe yariyor. *args **kwargs olarak araştırırsan güzel örnekler bulabilirsin.

2 Beğeni

Açıklamanız için teşekkür ederim. Araştırmamı istedikleriniz izlediğim yada okuduğum Yazbel Python dökümanlarında henüz karşıma çıkmadı en kısa zamanda araştırırım. Tekrar teşekkürler.

@dildeolupbiten sum() metodu ile donguden gelen p’nin value degerlerini nasil toplatabilirim .
listeden toplam aldirdim ama kod arap sacina dondu :slight_smile:


destinations_fee = {'baby':
                    {'istanbul': 300, 'roma': 1000, 'boston': 2500, 'tokyo': 4000},
                    'child':
                        {'istanbul': 400, 'roma': 1500, 'boston': 7500, 'tokyo': 9000},
                    'adult':
                        {'istanbul': 600, 'roma': 4500, 'boston': 9500, 'tokyo': 12000}}
passengers = []
total_fee = 0

while True:
    passenger_name = input("Enter Passenger's Name : ")
    if passenger_name == 'quit':
        print('Exit by user')
        break
    elif passenger_name == "t":
        print("Flight Ticket printing")
        print(f"name\t\t\t\t\t destınatıon\t\t\t\t\t fee")
        for p in passengers:
            print(f'{"Fligt Ticket":-^100}')
            print(*p)
            print('-'*100)
            total_fee += p[2]
        print(f"ticket's total fee : {total_fee}")
        break
    passenger_age = int(input("Enter Passenger's age : "))
    destination = input("Enter Destination : ")

    if passenger_age <= 2:
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['baby'][destination]} TL. ")
        passengers.append([passenger_name, destination, destinations_fee['baby'][destination]])
    elif passenger_age <= 15:
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['child'][destination]} TL. ")
        passengers.append([passenger_name, destination, destinations_fee['child'][destination]])
    elif passenger_age > 15:
        print(f"Mr/Mrs {passenger_name},"
              f" Your flight's fee for {destination} is {destinations_fee['adult'][destination]} TL. ")
        passengers.append([passenger_name, destination, destinations_fee['adult'][destination]])

Şöyle yapabilirsiniz:

    elif passenger_name == "t":
        print("Flight Ticket printing")
        print(f"name\t\t\t\t\t destınatıon\t\t\t\t\t fee")
        for p in passengers:
            print(f'{"Fligt Ticket":-^100}')
            print(*p)
            print('-'*100)
        print(f"ticket's total fee : {sum(i[2] for i in passengers)}")
        break

Çok Teşekkür ederim.

1 Beğeni