Showing posts with label python program örnekleri. Show all posts
Showing posts with label python program örnekleri. Show all posts

Friday, December 9, 2016

Python İle 24 Oyunu

Bilmeyenler için 24 oyunu; verilen 4 sayı ve 4 işlem kullanarak 24'e ulaşılmaya çalışılan oyundur. Yazdığım uygulamada ben 1-9 sayılarının kullanılmasına izin verdim. Oyunun farklı versiyonları da bulunmaktadır.
Oyunda;

  • Verilen tüm sayılar kullanılmalı,
  • Verilen bir sayı birden fazla kez kullanılamaz. (4466 sayıları verilmişse 2 kez 4, 2 kez 6 kullanılmalı!),
  • 4 işlem dışında bir işlem kullanılmamalı,
  • İşlemin sonucu 24'e eşit olmalı.


Oyun çözümleri: https://drive.google.com/file/d/0Bwiyh2g5UiGWZ212RnZMSEpEOVU/view?usp=sharing
Oyun linki: https://drive.google.com/file/d/0Bwiyh2g5UiGWUFNNX3hMc2s5WGs/view?usp=sharing
import random
with open("24solutions.txt" ,"r") as f:         #dosyayı okumak için açıyoruz
    lines = f.readlines()                       #tüm satırları okuyoruz
randomNumber = random.randrange(0,len(lines))   #0 ile satır sayısı-1 arasında bir sayı üretiyoruz
randomLine = lines[randomNumber].split("\t")    #Ürettiğimiz sayıyı index sayısı olarak kullanıp bir satırı alıyoruz
numbers = []                                    #sayı listemiz için boş bir liste kullanıyoruz
numbers.extend(randomLine[1])   #dosyamızda satırlar 1.\t1118\t((1+1)+1)x8 şeklindeydi
                                #numbers.extend() fonksiyonu ile dosyadan text olarak aldığımız sayıları teker teker liste elemanı olarak numbers listesine ekliyoruz.
solution = randomLine[2]        #bu satırı yukarıda split ile ayırıp liste oluşturduk. listemizin 2. elemanı kullanılabilecek sayılar, 3. elemanı çözümü içeriyor.
allowedChars = ["(",")","/","*","+","-"] #kullanılabilecek karakterler listemiz
allowedChars.extend(numbers)    #bunlara bir de sayılarımızı ekliyoruz
print allowedChars              #kullanıcıya kullanılabilecek karakter ve sayıları gösteriyoruz.
userSolution = raw_input("Please enter your solution: ") #kullanıcı çözümünü alıyoruz.
flag = True                     #kullanıcının hata yapmadığını farz ediyoruz.
for char in userSolution:       #kullanıcıdan aldığımız metindeki karakterleri tek tek alıyoruz.
    if char not in allowedChars:    #herhangi bir karakter kullanılabilecek karakter sayılar içinde yoksa
        message = "You used an invalid character. " #mesajımızı belirliyor ve geri kalan karakterleri kontrol etmemek için break kullanıyoruz.
        flag = False            #kullanıcının hata yaptığını belirlemek için flag değişkenimizi False yapıyoruz.
        break
    elif char in numbers:       #kullanıcının girdiği karakterlerde sayı varsa
        allowedChars.remove(char)   #sayıyı allowedChars ve numbers listemizden çıkarıyoruz.
        numbers.remove(char)
if len(allowedChars) != 6:      #kullanıcı tüm sayıları kullanmışsa allowedChars listemizde tam olarak 6 eleman kalması gerekiyor. kalmamışsa;
    message = "You did not use all the numbers or characters. " #mesajımız
    flag = False                #hata değişkenimiz False oluyor
elif eval(userSolution) != 24:  #eval fonksiyonu matematiksel bir ifadeyi string olarak alıp, çözebiliyor.
                                #try.. except.. hata bloğu kullanılmalı burada aslında ancak şimdilik es geçiyorum.
    message = "Your result is incorrect!"
if flag == True:                #Bu adıma kadar flag değişkenimiz True olarak kaldıysa kazandınız mesajı
    print "You won..!"
else:                           #False olarak değişmişse mesajımızı ve çözümümüzü gösteriyoruz.
    print message
    print "You lost. The solution might be: ", solution