Yeni Başlayanlar için Python Projeleri
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.
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