Hem boş zamanlarda boş durmamak(?) hem de öğrenmek için şu listedeki projeleri sırası karışık olarak (kolaydan zora) yapmayı planlıyorum. İsteyen incelesin diye her yaptığımı buraya da ekleyeceğim.

BAD MOTHER FUCKER
Bir gelenek olarak; görselle yazının bir alakası yok.

01 - İsim oluşturucu

Belirlenen ad ve soyad listeleri içinden rastgele seçim yaparak sahte isimler oluşturur.

Kullanılan modüller: random

import random

def generate_name():
    first_names = ["Albert", "Charles", "Nicolas", "Michael", "Anders", "Isaac", "Stephen", "Marie", "Richard"]
    last_names = ["Einstein", "Darwin", "Copernicus", "Faraday", "Celsius", "Newton", "Hawking", "Curie","Dawkins"]
    return "{} {}".format(random.choice(first_names), random.choice(last_names))

for i in range(5):
    print(generate_name())

02 - Sıcaklık çevirici

Yapılan seçime göre (1/2) derece cinsinden girilen sıcaklık değerini celsius'tan fahrenheit'a ya da tam tersi yönde çeviren program.

print("-" * 30)
print("1- Celsius to fahrenheit")
print("2- Fahrenheit to celsius")
print("-" * 30)

choice = raw_input("Your choice (1/2): ")

if choice == "1":
    print("\n# Celsius to Fahrenheit")
    celsius = float(raw_input("Degree to convert: "))
    fahrenheit = (celsius * 1.8) + 32
    print("{} degree celsius is equal to {} degree fahrenheit.".format(celsius, fahrenheit))
elif choice == "2":
    print("\n# Fahrenheit to Celsius")
    fahrenheit = float(raw_input("Degree to convert: "))
    celsius = (fahrenheit - 32) / 1.8
    print("{} degree fahrenheit is equal to {} degree celsius.".format(fahrenheit, celsius))
else:
    print("Congratulations! You hacked the super-program.")

03 - Kaç saniye yaşadın?

Kullanıcıdan gün.ay.yıl formatında alınan doğum tarihiyle bugünün farkı hesaplanıp saniye cinsinden ekrana yazılıyor.

Kullanılan modüller: datetime

from datetime import *

birth = datetime.strptime(raw_input("Your birth date (d.m.Y): "), "%d.%m.%Y")
age = datetime.now() - birth

print("You survived {} seconds.".format(age.total_seconds()))

04 - Basit şifreleme / çözümleme

Girilen metindeki her karakterin ascii kod değeri kullanıcıdan alınan değer kadar (i) artırılıyor. Şifrelenen metni çözmek için de tam tersi azaltılıyor.

def encrypt(text, value, output=""):
    for char in text:
        output = "{}{}".format(output, chr(ord(char) + value))
    return output

def decrypt(text, value, output=""):
    for char in text:
        output = "{}{}".format(output, chr(ord(char) - value))
    return output

i = int(raw_input("Increment value: "))

text = raw_input("Type your text: ")
print("Encrypted text: {}".format(encrypt(text, i)))

text = raw_input("\nType for decrypt: ")
print("Decrypted text: {}".format(decrypt(text, i)))

05 - FizzBuzz

Kullanıcıdan alınan değer uzunluktaki bir dizi içindeki üçün katları için "Fizz", beşin katları için "Buzz", hem beş hem de üçün katları için "FizzBuzz", her üçü de değilse sayının kendisini yazdırır.

def fizzbuzz(n):
    if n % 3 == 0 and n % 5 == 0:
        return "FizzBuzz"
    elif n % 3 == 0:
        return "Fizz"
    elif n % 5 == 0:
        return "Buzz"
    else:
        return str(n)

length = int(raw_input("Length of array: "))

for i in range(1, length):
    print(fizzbuzz(i))

06 - Taş, Kağıt, Makas

Klasik taş kağıt makas oyunu. Kullanıcı seçtikten sonra bilgisayar da seçim yapıyor ve karşılaştırılıyor. Oyun, kullanıcı seçim ekranında 1, 2, ya da 3 dışında bir veri girene kadar devam ediyor.

Kullanılan modüller: random

import random

print(("-" * 30) + "\nRock, Paper, Scissors\n" + ("-" * 30))

user_score, computer_score = 0, 0

while True:
    print("\n1 - Rock\n2 - Paper\n3 - Scissors")
    user_choice = raw_input("Your choice: ")
    computer_choice = random.choice(["1", "2", "3"])
    
    if user_choice == "1":
        if computer_choice == "1":
            print("Computer's choice: Rock\nRock equal to rock. Scoreless!")
            
        elif computer_choice == "2":
            print("Computer's choice: Paper\nPaper wraps stone. You lose!")
            computer_score += 100
            
        elif computer_choice == "3":
            print("Computer's choice: Scissors\nRock breaks scissors. You win!")
            user_score += 100
            
    elif user_choice == "2":
        if computer_choice == "1":
            print("Computer's choice: Rock\nPaper wraps stone. You win!")
            user_score += 100
            
        elif computer_choice == "2":
            print("Computer's choice: Paper\nPaper equal to paper. Scoreless!")
            
        elif computer_choice == "3":
            print("Computer's choice: Scissors\nScissors cuts paper. You lose!")
            computer_score += 100
            
    elif user_choice == "3":
        if computer_choice == "1":
            print("Computer's choice: Rock\nRock breaks scissors. You lose!")
            computer_score += 100
            
        elif computer_choice == "2":
            print("Computer's choice: Paper\nScissors cuts paper. You win!")
            user_score += 100
            
        elif computer_choice == "3":
            print("Computer's choice: Scissors\nScissors equal to scissors. Scoreless!")
    
    else:
        break
    
print("\nUser's score: {}\nComputer's score: {}".format(user_score, computer_score))

07 - Adam asmaca

Rastgele belirlenen bir kelime soruluyor. Her yanlış cevap için çubuk adamın bir parçası çiziliyor ve tamamlandığında oyun bitiyor.

Kullanılan modüller: random

import random

pics = ["""
   +---+
   |   |
       |
       |
       |
       |
=========""","""
   +---+
   |   |
   O   |
       |
       |
       |
=========""","""
   +---+
   |   |
   O   |
   |   |
       |
       |
=========""","""
   +---+
   |   |
   O   |
  /|   |
       |
       |
=========""","""
   +---+
   |   |
   O   |
  /|\  |
       |
       |
=========""","""
   +---+
   |   |
   O   |
  /|\  |
  /    |
       |
=========""","""
   +---+
   |   |
   O   |
  /|\  |
  / \  |
       |
========="""]

while True:
    print(("-" * 30) + "\nHangman Game\n" + ("-" * 30))
    
    word = random.choice(["windows", "python", "terminal", "ubuntu"])
    step = 0
    letters = []
    
    while True:
        print(pics[step])
        
        for i, char in enumerate(word):
            print(char if i in letters else "_"),
            
        answer = raw_input("\nAnswer: ")
        
        if answer == word:
            print("You win!\n\n")
            break
        else:
            while True:
                rand = random.randint(0, len(word))
                if not rand in letters:
                    letters.append(rand)
                    break
            
            step += 1
        
        if step >= len(pics):
            print("You lose!\n\n")
            break
        
    if not "y" == raw_input("Play again (y/n): "):
        break

08 - Aşk hesaplayıcı

Çifte girilen isimlere göre on üzerinden puan veriyor. Aşk hesaplayıcının ne olduğuna şuradan baktım.

name1 = raw_input("Your name: ")
name2 = raw_input("Girlfriend's / Boyfriend's name: ")

love = len(name1) + len(name2)

if len(name1) > len(name2):
    love -= 5
else:
    love += 3

love *= 42
love = love / (100 + len(name2))

love = 10 if love > 10 else round(love, 0)

print("{} and {} score is {} out of 10".format(name1, name2, love))

09 - Sahte alıntı oluşturucu

Belirlenen metni noktalardan parçalayıp içinden verilen sayı kadar rastgele cümle alıp ekrana yazıyor.

Kullanılan modüller: random

import random

# source: http://en.wikipedia.org/wiki/Python_%28programming_language%29
sentences = "Python is a widely used general-purpose, high-level programming language. Its design philosophy emphasizes code readability, and its syntax allows programmers to express concepts in fewer lines of code than would be possible in languages such as C++ or Java. The language provides constructs intended to enable clear programs on both a small and large scale. Python supports multiple programming paradigms, including object-oriented, imperative and functional programming or procedural styles. It features a dynamic type system and automatic memory management and has a large and comprehensive standard library. Python interpreters are available for installation on many operating systems, allowing Python code execution on a wide variety of systems. Using third-party tools, such as Py2exe or Pyinstaller,[24] Python code can be packaged into stand-alone executable programs for some of the most popular operating systems, allowing for the distribution of Python-based software for use on those environments without requiring the installation of a Python interpreter. CPython, the reference implementation of Python, is free and open-source software and has a community-based development model, as do nearly all of its alternative implementations. CPython is managed by the non-profit Python Software Foundation.".split(".")

print(("-" * 30) + "\nPseudo Quote Generator\n" + ("-" * 30))

n = int(raw_input("Number of sentences: "))

quote = []

for i in range(n):
    quote.append(random.choice(sentences))

print("Your pseudo quote: {}.".format(".".join(quote)))

10 - Parola oluşturucu

Kullanıcıdan uzunluk ve seviye değerleri alınıyor. Seçilebilecek karakterlere seviye birde harfler, ikide sayılar ve üçte özel karakterler ekleniyor. Sonra bu karakterler içinden belirlenen uzunluk kadarı rastgele alınıp döndürülüyor.

Kullanılan modüller: random, string

import random
import string

def generate_password(length, level, output=[]):
    chars = string.ascii_letters
    if level > 1:
        chars = "{}{}".format(chars, string.digits)
    if level > 2:
        chars = "{}{}".format(chars, string.punctuation)
    
    for i in range(length):
        output.append(random.choice(chars))
    
    return "".join(output)

print(("-" * 30) + "\n Password Generator\n" + ("-" * 30))

password_length = int(raw_input("Length: "))
password_level = int(raw_input("Level: "))

password = generate_password(password_length, password_level)
print("\nYour password is: {}".format(password))

12 - Haiku Oluşturucu

Haiku'nun ne olduğunu bu soruyla öğrendim. Mantığını kafada oluşturamamıştım, ufak bi arama yaptım şunu buldum. Kodları kısaltayım falan derken format içine liste elemanlarını yerleştirirken words[0], words[1], ... falan diye yapıyordum. Sonra daha kısası var mı diye aradım ve *words yapınca elemanların sıradan yerleştiğini *öğrendim.

Kullanılan modüller: random

from random import choice

words = [
    choice(["Enchanting", "Amazing", "Colourful", "Delightful", "Delicate"]),
    choice(["visions", "distance", "conscience", "process", "chaos"]),
    choice(["superstitious", "contrasting", "graceful", "inviting", "contradicting", "overwhelming"]),
    choice(["true", "dark", "cold", "warm", "great"]),
    choice(["scenery","season", "colours","lights","Spring","Winter","Summer","Autumn"]),
    choice(["undeniable", "beautiful", "irreplaceable", "unbelievable", "irrevocable"]),
    choice(["inspiration", "imagination", "wisdom", "thoughts"])
]

print(("-" * 30) + "\nHaiku Generator\n" + ("-" * 30))
print("{} {},\n{} {} {},\n{} {}.".format(*words))

13 - Sihirli Sekiz Top

Topun içindeki sıvıdaki bi üçgen prizmada yazan cevapları rastgele getiren oyuncak gibi rastgele cevaplar verir.

Modüller: random

from random import choice

answers = ["It is certain", "Outlook good", "You may rely on it", "Ask again later", "Concentrate and ask again", "Reply hazy, try again", "My reply is no", "My sources say no"]
raw_input("Ask your question to magic eight ball: ")

print("Answer: {}".format(choice(answers)))

15 - Metni geriye çevirme

Kullanıcının girdiği metni tersine çevirip ekrana yazıyor.

def reverse(value, output=[]):
    #range(start, stop, step)
    for i in range(len(value) - 1, -1, -1):
        output.append(value[i])
    
    return "".join(output)

text = raw_input("What's up: ")
print("Your reversed text is: {}".format(reverse(text)))

16 - Metindeki ünlü harfler

Girilen metin içinde kaç tane ünlü harf olduğunu bulur. Türkçe karakterleri de ekleyebilirsiniz.

def vowels_count(text, output=0):
    vowels = "aeiouAEIOU"
    for char in text:
        if char in vowels:
            output += 1
    return output

text = raw_input("Type some text: ")
print("Vowels in text: {}".format(vowels_count(text)))

17 - Metindeki kelime sayısı

Girilen metin boşluklardan parçalanıyor ve her parçanın tamamen noktalama işaretlerinden oluşup oluşmadığı kontrol ediliyor. Uygun kelimeler sayılıp sonuç ekrana yazılıyor.

Kullanılan modüller: string

import string

def is_word(text):
    for char in text:
        if not char in string.punctuation:
            return True
    return False

def word_count(value, output = 0):
    potential_words = value.split(" ")
    
    for word in potential_words:
        if is_word(word):
            output += 1
    
    return output

text = raw_input("Tell something: ")
print("Total words: {}".format(word_count(text)))

24 - Girilen sayıyı ikilik sisteme (binary) çevirme

Kullanıcının onluk sistemde (decimal) girdiği sayıyı ikilik sisteme çeviriyor. Bizim yazdığımız fonksiyon dışında Python'un bize sağladığı diğer iki yolu da ekledim.

decimal = int(raw_input("Number in decimal format: "))

def binary(n):
    output = ""
    while n > 0:
        output = "{}{}".format(n % 2, output)
        n = n // 2
    return output

# our method
print(binary(decimal))

# another way
print(bin(decimal)[2:])

# yet another way
print("{0:b}".format(decimal))

27 - Fibonacci sayıları

Girilen değer kadar (uzunlukta) fibonacci sayıları üretir.

def fibonacci(n, output=[]):
    a, b = 1, 1
    for i in range(n):
        a, b = b, a + b
        output.append(str(a))
    return output

number = int(raw_input("Length of fibonacci sequence: "))

print("Result: {}".format(",".join(fibonacci(number))))

28 - Faktoriyel hesaplama

Yüz (ya da "n") faktoriyeli hesaplıyor.

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

print("Factorial of 100: {}".format(factorial(100)))

32 - Konsolda Noel Ağacı

Verilen yükseklikte bir noel ağacı çizer.

height = int(raw_input("Height of Christmas Tree: "))

for i in range(int(height * 0.7)):
    print( (" " * (height - ( i // 2))) + ("*" * i))

for i in range(int(height * 0.7), height):
    print((" " * (height - 1)) + "||")

33 - Alan hesaplayıcı

Kullanıcının girdiği 1, 2, ya da 3 seçeneğine göre kare, dikdörtgen ya da çemberin alanını hesaplayıyor.

print(("-" * 30) + "\nArea Calculator\n" + ("-" * 30))

print("\n1 - Square\n2 - Rectangle\n3 - Circle\n")
choice = raw_input("Your choice: ")

if choice == "1":
    side = int(raw_input("A side: "))
    print("Area of square is: {}".format(side ** 2))

elif choice == "2":
    aside = int(raw_input("A side: "))
    bside = int(raw_input("B side: "))
    print("Area of rectangle is: {}".format(aside * bside))

elif choice == "3":
    r = int(raw_input("Radius: "))
    pi = 3.14159
    print("Area of circle is: {}".format((r ** 2) * pi))

else:
    print("Good bye...")

40 - Dizideki en büyük sayı

Kullanıcının boşluklarla ayırarak girdiği sayıların içinden en büyüğünü index numarasıyla beraber yazdırır.

def largest(array, index=0):
    for i, v in enumerate(array):
        if v > array[index]:
            index = i
    
    return index

numbers = raw_input("Numbers (seperate with whitespaces): ").split(" ")
i = largest(numbers)
print("Largest number is {} at index {}.".format(numbers[i], i))

57 - Sıralama Algoritması

Baloncuk sıralama algoritması kullanarak diziyi küçükten büyüğe doğru sıralar.

def bubble_sort(array):
    for i in range(1, len(array)):
        for j in range(len(array) - i):
            if array[j] > array[j + 1]:
                temp = array[j]
                array[j] = array[j + 1]
                array[j + 1] = temp
    
    return array

numbers = [1, 12, 2, 5, 6, 1, 8, 55, 8, 8, 2, 17]

print("Sorted array: {}".format(bubble_sort(numbers)))

66 - Asal sayı oluşturucu

İstenilen sayıda asal sayı oluşturup liste olarak döndürür.

def is_prime(n):
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

def generate_prime_number(n, output=[]):
    i = 2
    while len(output) < n:
        if is_prime(i):
            output.append(i)
        
        i += 1
    return output

print(generate_prime_number(15))

Yada şuradaki yöntemle yapmak istersek:

def primes_upto(n, multiples = set(), output=[]):
    for i in range(2, n + 1):
        if i not in multiples:
            output.append(i)
            multiples_to_n = range(i * i, n + 1, i)
            if multiples_to_n:
                multiples.update(multiples_to_n)
    
    return output

n = int(raw_input("Generate prime number up to: "))
print primes_upto(n)

71 - Yazı yazma hızını hesaplama

Kullanıcıdan bir metin girilmesi isteniyor, ilk zamanla yazıyı yazdıktan sonraki zaman arasındaki fark saniye cinsinden ekrana yazılıyor. Kullanıcıya saniye başına kaç harf yazdığı söyleniyor.

Kullanılan modüller: datetime

from datetime import *

before = datetime.now()

text = "Say hello to my little friend."
print("Please type: {}".format(text))

if text == raw_input(": "):
    after = datetime.now()
    
    speed = after - before
    seconds = speed.total_seconds()
    letter_per_second = round(len(text) / seconds, 1)
    
    print("You won!")
    print("Your score is: {} seconds.".format(seconds))
    print("{} letters per second.".format(letter_per_second))
else:
    print("You failed.")

87 - Pascal Üçgeni

Verilen yükseklikte pascal üçgeni oluşturup döndürür.

def generate_pascal(height, rows=[]):
    rows.append([1])
    row=[1]
    for i in range(height):
        last = 0
        next_row = []
        for n in row:
            next_row.append(last + n)
            last = n
        next_row.append(1)
        
        row = next_row
        rows.append(row)
    
    return rows

for i in generate_pascal(5):
    print i