Showing posts with label python döngüler. Show all posts
Showing posts with label python döngüler. 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

 
     


Thursday, December 8, 2016

Python İle Adam Asmaca Oyunu Yapımı

GUI Olmadan

word = "ankara"             #Bulunacak kelime
underscoreforLetters = ""   #boş metin: kelimedeki her karakteri "_" ile değiştirmek için kullanılacak
for x in word:              #kelimedeki her harf için
    underscoreforLetters += " _ " #değişkenimize bir "_" ekliyoruz
print underscoreforLetters  #kelimenin kaç karakter olduğunu göstermek için değişkenimizi yazdırıyoruz
guessedLetter = []          #tahmin edilen harfler/kelimeler için liste oluşturuyoruz
for a in range(6):          #6 kelime/tahmin hakkı veriyoruz
    newWord = ""            #tahmin edilen kelime/harf için alt tire ve harflerden oluşacak değeri tutmak için kullanılacak
    woL = input("Word or letter: 1 or 2 ") #Kelime veya harf tahmini için bir sayı istiyoruz
    if woL == 1:
        userGuess = raw_input("Enter your guess: ")
        if userGuess == word:   #Tahmin edilen kelime belirlediğimiz kelimeye eşitse
            print "You won"     #Kazandınız diyerek döngümüzü sonlandırıyoruz
            break
        else:
            guessedLetter.append(userGuess) #Değilse tahmin edilen kelimeyi listemize ekliyoruz
            print "Wrong guess."
    else:
        letter = raw_input("Enter a letter: ")
        guessedLetter.append(letter)    #Aldığımız kelime tahminini listemize ekliyoruz
        for y in word:                  #Kelimemizdeki her harf için
            if y in guessedLetter:      #Eğer harf listemiz içindeyse
                newWord += y            #Değişkenimize harfi ekliyoruz
            else:                       #Değilse
                newWord += " _ "        #Harfi temsilen alt tire ekliyoruz
        print newWord                   #Alt tire ve harflerden oluşan kelimemizi yazdırıyoruz
    print guessedLetter                 #Tahmin edilen harf/kelimelerin listesini yazdırıyoruz

Oyunumuzu çalıştırdığımızda yukarıdaki gibi bir görüntü elde ediyoruz. Bu en basit haliyle bir adam asmaca oyunu. Sonraki yazılarımızda dosya içinden rastgele bir kelime ile oynanabilecek versiyonu ve GUI(Graphical User Interface) ile olan versiyonları olacak.

Sorularınız/görüşleriniz için yorumlarınızı bekliyorum.