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

 
     


No comments:

Post a Comment