Python Programlama ile Olasılık Soruları

Sonsuz.us sitesinde bolca olasılık sorusu var, bunların bazılarını python programlama ile çözüp örnekler sunacağım. Böylece random kütüphanesinin kullanımı ve olasılık sorularına uygulanışını görmüş olacağız.

Olasılık sorularında yapmamız gereken olayı doğru bir biçimde kodlayıp defalarca simülasyon tekrarlamamızdır. Yeterli sayıda simülasyon bize yaklaşık sonucu verecektir.

İlk sorumuz yine basit bir olasılık sorusu. Rastgele iki noktasından kırılan bir çubuğun parçalarının üçgen oluşturma olasılığı nedir?

Üçgen olma kuralı bildiğiniz üzere her hangi iki kenarın toplamı diğer kenardan büyük olma zorunluluğu olmasıydı. Programın yapması gerekense defalarca iki rastgele noktadan kırıp oluşan parçaları karşılaştırmak.

import random
ucgen=0
for i in range(10000):
  nokta = [random.random(),random.random()]
  nokta.sort()
  a,b,c = nokta[0],nokta[1]-nokta[0],1-nokta[1]
  if a+b>c and a+c>b and b+c>a:
    ucgen+=1
print(ucgen/10000)

Yeni bir olasılık sorusu olarak şunu ekleyebiliriz.

10 tane madeni paranın 8 tanesi hilesizdir, 2 tanesinin ise her iki yüzü de turadır. Bu 10 madeni paradan bir tanesi rasgele seçilir ve 2 defa yazı-tura atılırsa, her ikisinin de tura gelme ihtimali kaçtır?

import random

paralar = [["yazı","tura"],["yazı","tura"],["yazı","tura"],["yazı","tura"],["yazı","tura"],["yazı","tura"],["yazı","tura"],["yazı","tura"],["tura","tura"],["tura","tura"]]
olay = 0
for i in range(10000):
    para = random.choice(paralar)
    tura = 0
    for j in range(2):
        yuz = random.choice(para)
        if yuz == "tura":
            tura = tura + 1
    if tura == 2:
        olay = olay + 1
print(olay/10000)

Arkadaş sayılar, Python Programlama

İki sayı birbirinin kendisi hariç bölenleri toplamına eşitse bu sayılara arkadaş sayılar denir. (1 dahil)

En küçük arkadaş sayılar 220 ve 284 tür. Neden? Çünkü 220’nin bölenleri olan 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 ve 110 u topladığımızda 284 elde ederiz. 284’ün bölenlerini topladığımızda ise -evet, doğru tahmin ettiniz- 220 elde ederiz. İşte gerçek arkadaşlık.

Python programlama ile 10.000 e kadar olan arkadaş sayıları bulalım. (Bu sayıyı değiştirebilirsiniz.)

def bolenler(n):
  return sum([i for i in range(1,n//2+1) if n%i==0])

arkadas = dict()
for sayi in range(1,10000):
  bt = bolenler(sayi)
  if sayi==bolenler(bt) and sayi<bt:
    arkadas[sayi]=bt
print(arkadas)

Pratfall Etkisi

Elliot Aronson da birini neden başkalarından daha çok sevdiğimizin, beynimizin neden bazı kişilerden daha çok hoşlandığının, onlara karşı sempatimizi arttıranın nedenini ‘Pratfall Etkisi’ olarak bulmuştur.

Pratfall etkisi; kişinin ne kadar mükemmel değilse sevilme oranının o kadar artması anlamına gelir (Montaya Matheew ve Horton, 2012).

Hatalar yapan insanları, sakar kişileri mükemmel olan insanlardan daha çok severiz. Düştüğünde gülüp geçebilen bir insanı hiç düşmeyen veya tökezlemeyen insandan daha sempatik bulabiliriz.

Beynimiz, hata yapan insanları, mükemmel insanlardan daha sıcak ve samimi buluyor. Kaliforniya Üniversitesi psikologlarından Elliot Aronson bu konuyla ilgili bir deney yapmıştır. Deneyde; iki grup öğrenciye sorular sorulmuş öğrenciler de bu soruları cevaplamışlardır, cevaplar ses kaydına alınmıştır.

Öğrencilerin cevapları insanlara dinletildiğinde ikinci gruptan daha çok hoşlandıkları ve onları daha çok sevdikleri görülmüştür. İkinci gruptaki öğrenciler; soruları yanıtlarken hatalar yapmışlar, önlerindeki kahveyi dökmüşler ve telaffuz hataları yapmışlardır. Bu hatalar insanlara sevimli, içten ve doğal gelmiş, ikinci gruba karşı sempati duymuşlardır. Mükemmellik insanlarla aramıza mesafe koyuyor. Mükemmel bir insan samimi gelmediği gibi soğuk ve yapay geliyor.

Yani beynimiz hataları seviyor. Mükemmellik sıkıcı geliyor. Sevdiğiniz ya da birlikte olduğunuz insanın hatalarından, sakarlıklarından neden hoşlandığınızın cevabı ‘Pratfall etkisi’ (Bloom,P. t. y.). Dünyadan örnek verecek olursak, ünlü aktrist Jennifer Lawrence Oscar’ını almaya giderken iki kere elbisesine takılıp düşmüştür. Jennifer Lawrence şu anda birçok insan için sempatik, doğal ve samimi bulunuyor.

Pratfall Efekt’i birçok alanda, birçok insan için kullanabilirsiniz. Ünlüler kendilerini sempatik göstermek için buna başvuruyorlar. Sevdiğiniz kişi için, arkadaşlıklarınızda fark etmeseniz de beyniniz hataları seçiyor ve seviyor.

En küçük zengin tek sayı, Python programlama

Eğer bir sayının kendisi hariç tam bölenleri toplamı sayıdan büyükse o sayıya zengin sayı diyoruz. Örneğin 12 nin bölenleri 1,2,3,4,6 nın toplamı 16>12 olduğu için zengin sayıdır. En küçük tek zengin sayı nedir?

Basit bir programla bunu bulabiliriz,

def bolenler(n):
  return sum([i for i in range(1,n//2+1) if n%i==0])

sayi = 1
while sayi>bolenler(sayi):
  sayi+=2
print(sayi)

Palindrom dizi, python programlama çözümü

Uzunluğu 2 veya daha büyük olan ve aynı zamanda tersten ve düzden yazılışları aynı olan karakter dizilerine palindrom denilmektedir. Örneğin “aaa”, “aba”, “cc” birer palindrom iken, “acaba”, “abc”, “a” birer palindrom değildir. Bir karakter dizisinin içerisinden ardışık olarak seçilen herhangi bir parçaya ardışık alt dizi denilmektedir. Örneğin “acaba” dizisi için “aca”, “ab” birer ardışık alt dizi iken, “cb”, “aaa” ardışık alt dizi değildir. 4 karakter uzunluğunda, ardışık alt dizilerinin hiçbiri palindrom olmayan kaç farklı karakter dizisi vardır? [Alfabede 29 karakter vardır]

Sorumuz bu. Elbette çözmek için başka yöntemler var ama estetik bir program parçasını da eklemek istedim.

sonuc = 0
for a in range(29):
    for b in range(29):
        for c in range(29):
            for d in range(29):
                if c != d and b != c and a != b and b != d and a != d:
                    sonuc += 1

print(sonuc)