While, input ve dictionary hakkında bir soru

Arkadaşlar merhaba. Aşağıdaki inputun, kullanıcı kapatana kadar devam etmesini istiyorum:

ad = input("Lütfen kumaş adı giriniz: ")
if ad == (kumasad[“kumasad”]):
print("Stoktaki miktar: ", kumasad[“kg”]+ skg,“kg.”)
elif ad == (kumasad[“kumasad2”]):
print("Stoktaki miktar: ", kumasad[“kg2”] + skg2,“kg.”)
elif ad == (kumasad[“kumasad3”]):
print("Stoktaki miktar: ", kumasad[“kg3”]+ skg3,“kg.”)
elif ad == (kumasad[“kumasad4”]):
print("Stoktaki miktar: ", kumasad[“kg4”]+ skg4, “m.”)
else:
print(“Lütfen doğru bir değer giriniz.”)

While döngüsünü tam olarak nerede girmeliyim ve ne yazmalıyım?

Ayrıca, bu kodları yazarken de bir dictionary kurdum kendimce. Ancak sözlükleri tam olarak hangi “veriler” için kullanmam gerektiğini kestiremiyorum. Mesela şöyle bir örnek göstereyim:

kumaslar = [{“kumasad2” : “interlok”, “kg2”: 1300}]

amacım, bir tekstil firmasında kayıtlı olan kumaş stoğunu ve gelen yeni miktarları bu stoğa ekleyerek toplamını takip edecek bir program yazmak istiyorum. ancak kumaşları bu şekilde sıralamalı mıyım? yoksa her bir kumaş için farklı bir değişken mi açmalıyım? ya da liste mi kullanmalıyım?
sözlük kullanımı burada doğru olur mu?

henüz yeni başladığım için kavramları karıştırıyor olabilirim. destekleriniz için şimdiden teşekkürler.

1 Beğeni

Eğer program hiç kapanmıycaksa doğru ama stok bilgisi gibi şeyleri program kapandıktan sonra tekrar açtığında da aynı kalmasını istiyosan bir database oluşturmalısın. En basit olarak database’i txt dosyasına bişeyler yazdırarak yapabilirsin. Mesela gelen kumaş ve giden kumaş diye 2 input alır kullanıcıdan daha sonra read() ile okursun stoktaki kumaşı gelen kumaş ile database’de ki sayıyı toplar ve giden kumaşı çıkarır. Her kumaş türü için ayrı input ve txt belgesi kullanırsın. While’da olmayan özellikler while’da var gibi düşünüyorsun. GitHub’dan döngüler üzerine olan projeleri inceleyebilirsin. Database oluşturmanın farklı yolları da var ama ben kullanmıyorum açıkçası biraz kafa karıştırıcı :smile: (MySQL, vs vs)

Esasen söylediğiniz gibi çok da detaylı bir şeyler yazamayacağım belli ki. Ancak bir IDE üzerinde çalıştırabileceğim ufak çaplı denemeler yapıyorum kendimce :slight_smile:

İstihzanın belgelerinde bir inputu döngüye sokabileceğimizi okuduğumu hatırlıyorum ancak beceremedim pek. Yani kullanıcı kumaş adını girdiği zaman kumaşın stoktaki kilosu gözüküyor ancak program sonlanıyor. Ben istiyorum ki hemen altında tekrar "Lütfen kumaş adı giriniz: " inputu çalışsın.

En azından While mantığını anlamak açısından desteklerinizi beklerim. Teşekkürler cevabınız için :slight_smile:

ilk gönderiniz için tebrik ederim. Aramıza hoşgeldiniz;

Örnek maksadında olsun aklınızda bir fikir belirsin diye basit bir kod bırakıyorum buraya.

while True:

    print("""
    Polyester için >> 1
    Naylon için >> 2
    Lycra için >> 3

    Çıkış Yapmak İçin >> exit
    """
    kumas_adi = input("Kumaş Adı Giriniz:")

    if kumas_adi == "1":

        print("Polyester kumaştan 120 kilo bulunmaktadır.")

    elif kumas_adi == "2":

        print("Naylonkumaştan 20 kilo bulunmaktadır.")

    elif kumas_adi == "3":

        print("Lycra kumaştan 420 kilo bulunmaktadır.")

    elif kumas_adi == "exit":
        break

    else:
        print("hatalı seçim, tekrar deneyiniz.")

While’ı en başa koymalısınız. İnputlar ve outputlar zaten içerde yazılmış olduğu için istediğiniz sonucu alırsınız. Tüm kodları def içine alıp while’ın içine sadece def ismini koyabilirsiniz yine hepsini while’a koymakla aynı sonucu elde edersiniz.

While için;
-while koşullu tekrar edebilir “While i < 1:” gibi
-break ile while dan çıkarsınız
-koşulsuz da tekrar edebilir
-o kadar işte :smile:

Tekrar etmesini istediğimiz bütün bölümü döngünün içine koyuyoruz.

Döngünün sürekli devam etmesi için while True kullanabilirsiniz.

Burada ve kodunuzda birer birer artan sayılar göze çarpıyor, nesnelere sıralı tam sayılarla erişilecekse liste kullanılmalı. Liste kullanırsak list.index ile koddaki if’lerden de kurtulabiliriz.

Kumaşlar için ayrı bir liste, ağırlıklar için ayrı bir liste olabilir.

Tüm cevaplar için teşekkür ediyorum. Söylediğiniz gibi While döngüsünü çalıştırabildim. Henüz veritabanı ile ilgili konulara gelmeden yalnızca pratik yapmaya çalışıyorum. Mazur görün :slight_smile:

Ayrıca hoşbuldum :slight_smile: Selametle kalın.

Veritabaniyla ugrasmaya hic gerek yok:

import pickle

kaydedilecek_veri = [
	{ 'hede': "hodo", 'budu': 42 },
	{ 'hede': "hidi", 'budu': 4.2 }
]

with open('/tmp/hede', 'wb') as f:
	pickle.dump(kaydedilecek_veri, f)

with open('/tmp/hede', 'rb') as f:
	kayitli_veri = pickle.load(f)

print(kayitli_veri)
5 Beğeni

Cevabınız için teşekkür ediyorum. Deneyeceğim :slight_smile:

@aib hocam bir sorum var pickle modülü json modülü gibi mi çalışıyor pek kaynak bulamadım hakkında

Çalışma şeklinden burada bahsedilmiş:
https://docs.python.org/3/library/pickle.html#data-stream-format

Json gibi çalışmak ne oluyor?

dosyaya sözlük veritipi yazdırma var dump falan var :rofl: öyle zannettim

Sozluk veritipi yazdirma olup olmadigini anlamak icin kaynaga gerek yok, yukaridaki kodu degistirerek kendin deneyebilirsin.

dump fonksiyonunun varligini da yukaridaki kodu calistirarak gorebilirsin. Veya resmi dokumentasyonuna bakabilirsin: pickle — Python object serialization — Python 3.12.1 documentation