"comb()" fonksiyonunu çağırdığımı nasıl anlayabilirim?

Sam Bridges

Hectopat
Katılım
6 Nisan 2020
Mesajlar
732
Makaleler
2
Çözümler
1
Yer
İzmir
Daha fazla  
Cinsiyet
Erkek
Python:
# Assuming that all the elements of set are different

def fact (n):

    total = 1

    while n > 1:
        total *= n
        n-=1
 
    return total


set_width = int(input("Type set width: "))
subset_width = int(input("Type subset width: "))

if set_width < subset_width:
    print(f"Subset width cannot be greater than set width!")

else:
    operation = input("Type C for Combination or P for Permutation: ")

    def perm(se = set_width, su = subset_width):

        numerator = fact(se)
        denominator = fact(se-su)

        result = numerator / denominator

        print(f"{set_width}P{subset_width} is {result}")

        return result


    def comb(se = set_width, su = subset_width):

        p = perm(se, su)
        f = fact(su)

        result = p / f

        print(f"{set_width}C{subset_width} is {result}")


    if operation == "C":
        comb()
    elif operation == "P":
        perm()

"operation" değişkeni "P" değerini alınca sorun yok, program istediğim gibi çalışıyor ancak "C" değerini alınca hem comb(), hem perm() fonksiyonu çalışıyor. Neden olabilir? Akıl sır erdiremedim. Yardımlarınız için şimdiden teşekkür ederim.
 
Son düzenleyen: Moderatör:
Yazdığın kodun farkında olmaman çok ilginç.
p = perm(se, su) dediğin an print(f"{set_width}P{subset_width} is {result}") demiş oluyorsun. Sorun bu.

comb() fonksiyonu perm() fonksiyonunu çağırıyor. Yani başlığınız hatalı. Çağrıldığı için çalışıyor.
 
Perm çağrısını kaldırdım şu hali ile dener misin.
Kod:
# Assuming that all the elements of set are different

def fact(n):
    total = 1
    while n > 1:
        total *= n
        n -= 1
    return total

def perm(se, su):
    numerator = fact(se)
    denominator = fact(se - su)
    result = numerator / denominator
    print(f"{se}P{su} is {result}")
    return result

def comb(se, su):
    p = fact(se) / fact(se - su) / fact(su)
    print(f"{se}C{su} is {p}")
    return p

set_width = int(input("Type set width: "))
subset_width = int(input("Type subset width: "))

if set_width < subset_width:
    print(f"Subset width cannot be greater than set width!")
else:
    operation = input("Type C for Combination or P for Permutation: ")
    if operation == "C":
        comb(set_width, subset_width)
    elif operation == "P":
        perm(set_width, subset_width)
    else:
        print("Invalid option selected!")

Yazdığın kodun farkında olmaman çok ilginç.
p = perm(se, su) dediğin an print(f"{set_width}P{subset_width} is {result}") demiş oluyorsun. Sorun bu.

comb() fonksiyonu perm() fonksiyonunu çağırıyor. Yani başlığınız hatalı. Çağrıldığı için çalışıyor.
Comb fonksiyonu içerisinde perm kullanmış. Sorun bundan kaynaklanıyor, evet.
 
😂🤣 Hiç mi hiç dikkat etmemişim ona. İstatistik bilgimi Python ile harmanlamaya çalışıyorum, Python'a yeni başladım. Değerli yardımlarınız için çok teşekkür ederim. Hala gülüyorum :D
 
Ben de kaldırdım. Çok güzel kaldırırım. Benimkine de bak. Ben de göstermek istiyorum. Hem bizim oralarda fonksiyonlar arasına 2 satır bırakılıyor.

Kod:
# Assuming that all the elements of set are different

def fact(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result


def perm(n, r):
    result = 1
    for i in range(r):
        result *= n
        n -= 1
    return result


def comb(n, r):
    return perm(n, r) // fact(r)


set_width = int(input("Type set width: "))
subset_width = int(input("Type subset width: "))

if set_width < subset_width:
    print(f"Subset width cannot be greater than set width!")
else:
    operation = input("Type C for Combination or P for Permutation: ")
    if operation.lower() == "c":
        print(comb(set_width, subset_width))
    elif operation.lower() == "p":
        print(perm(set_width, subset_width))
 
Python:
# Assuming that all the elements of set are different

set_width = int(input("Type set width: "))
subset_width = int(input("Type subset width: "))

if set_width < subset_width:
    print(f"Subset width cannot be greater than set width!")

else:
    operation = input("Type C for Combination or P for Permutation: ")

    def fact (n):

        total = 1

        while n > 1:
            total *= n
            n-=1
   
        return total

    def perm(se = set_width, su = subset_width):

        result = int(fact(se) / fact(se-su))

        return result


    def comb(se = set_width, su = subset_width):

        result = int(perm(se, su) / fact(su))

        print(f"{set_width}C{subset_width} is {result}")


    if operation == "C":
        comb()
    elif operation == "P":
        perm()
        print(f"{set_width}P{subset_width} is {perm(se = set_width, su = subset_width)}")

Açıkçası R6'da dronla yokuş çıkmaya bile üşenen biri olarak, bu üşengeçlik seviyesinde yeni if elif else statementleri yazmayı kendime yakıştıramadığım için perm() fonksiyonunu comb() içinde kullanmaya devam ettim. Kodun son hali böyle.

Bizim oralarda da fonksiyonlar arasına 2 satır bırakılıyor :D
 
Siz bilirsiniz. Python'da genelde her şey arasında o kadar boşluk bırakılmaz. Hatta fonksiyonun ilk satırını boş bırakan bir dil bildiğimi sanmıyorum. Fonksiyonlar arası 2 satır boşluk olur. Bölme yapıp integer'a cast edeceğinize floor division // kullanın. su, se gibi çok kısa değişkenler çok bilinmiyorsa (permütasyon ve kombinasyon için n ve r kullanımı yaygındır) tercih edilmez. Main kullanmamak kişiye kalmış ama if else içinde fonksiyon tanımlayanı ilk defa görüyorum. Genelde fonkisyon içinde fonksiyon tanımlanır ve içteki sadece tanımlandığı yerde çağrılır.
 
Siz bilirsiniz. Python'da genelde her şey arasında o kadar boşluk bırakılmaz. Hatta fonksiyonun ilk satırını boş bırakan bir dil bildiğimi sanmıyorum. Fonksiyonlar arası 2 satır boşluk olur. Bölme yapıp integer'a cast edeceğinize floor division // kullanın. su, se gibi çok kısa değişkenler çok bilinmiyorsa (permütasyon ve kombinasyon için n ve r kullanımı yaygındır) tercih edilmez. Main kullanmamak kişiye kalmış ama if else içinde fonksiyon tanımlayanı ilk defa görüyorum. Genelde fonkisyon içinde fonksiyon tanımlanır ve içteki sadece tanımlandığı yerde çağrılır.

Hocam çok saçma bir şey düşünüp else üzerine fonksiyonları kurdum. Şimdi tekrarlı permütasyonu eklemeye çalışacağım ve dediklerinizi gözedeceğim. Çok teşekkür ederim.
 
Ben de kaldırdım. Çok güzel kaldırırım. Benimkine de bak. Ben de göstermek istiyorum. Hem bizim oralarda fonksiyonlar arasına 2 satır bırakılıyor.

Kod:
# Assuming that all the elements of set are different

def fact(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result


def perm(n, r):
    result = 1
    for i in range(r):
        result *= n
        n -= 1
    return result


def comb(n, r):
    return perm(n, r) // fact(r)


set_width = int(input("Type set width: "))
subset_width = int(input("Type subset width: "))

if set_width < subset_width:
    print(f"Subset width cannot be greater than set width!")
else:
    operation = input("Type C for Combination or P for Permutation: ")
    if operation.lower() == "c":
        print(comb(set_width, subset_width))
    elif operation.lower() == "p":
        print(perm(set_width, subset_width))
Bu bir VS teklifi mi? Eve geçiyim math kütüphanesini sıfırdan yazacağım. Hem bizim oralarda satır bırakılmazsa kod olmaz derler.
 

Technopat Haberler

Yeni konular

Geri
Yukarı