Python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

16 Ocak 2021 Cumartesi

Satranç tahtasında yer belirleme (Pyhton)

 

Diyelim 3'e 3'lük bir satranç tahtamız var.

Yani 3 sütun ve 3 satırdan oluşuyor.

Önce sütun sonra satır numarasını belirterek tam da o belirttiğimiz noktada bir x işareti çıkmasını istiyoruz.

Nasıl çıkar?

row1 = ["⬜️","️⬜️","️⬜️"]
row2 = ["⬜️","⬜️","️⬜️"]
row3 = ["⬜️️","⬜️️","⬜️️"]
map = [row1, row2, row3] (Nested list)
print(f"{row1}\n{row2}\n{row3}") (\n her bir listenin
altaltaçıkarak gerçekten satranç tahtası gibi görünmesini
sağlıyor)


position = input("Where do you want to put the treasure? ")
(Buraya kullanıcının 1'den 3'e kadar iki basamaklı bir
rakam girmesi bekleniyor. Örneğin 32 diyelim)


Bu durumda 3. sütun 2. satıra bir X işareti gelir.):
["⬜️","️⬜️","️⬜️"]
["⬜️","⬜️","️X"]
["⬜️️","⬜️️","⬜️️"]

İlk olarak kullanıcı verisi olarak gelen 32'nin "32" değil
"3" (3. satır) ve "2" (2. sütun) olarak algılanmasını
sağlamak gerekiyor:


(şu ana kadar "32"nin integer yani sayı değil string olarak
görüldüğünü unutma!)


horizontal = int(position[0])
vertical = int(position[1])

Neden horizontal pozisyonu 0 ve vertical pozisyonu 1?
Çünkü 32 olarak baktığımızda 2 rakam görüyoruz,
1. rakam 3 ancak o aslında 0. rakam çünkü saymaya 0'dan
başlıyoruz.

* Ayrıca string'den integer'e çevirmek için parantez
başlarına "int"
koyduk.
 
selected_row = map[vertical - 1]
selected_row[horizontal -1] = "X"  
 
Ancak eğer iki satır halinde yazmaktan kurtulmak istiyorsak; 

map[vertical - 1][horizontal - 1] = "X"

Neden -1 koyuyoruz? Çünkü 3 satır ve 3 sütundan oluşan tabloda 3 yok
:)
0, 1 ve 2 var.
0. satır 1. satır ve 2. satır arasında seçmesini istiyoruz.


print(f"{row1}\n{row2}\n{row3}")

Python Randomisation (Rastgele değer seçtirme)


 

Diyelim bir oyun oynuyoruz ve adı söylenen kişi ebe olacak.

Her yeni oyunda rastgele bir ebe seçilmesi gerekiyor.

Python random modülü bunu bizim için yapabilir :)

Yani bir programın bizim için her defasında rastgele bir seçim yapıp getirmesini sağlayabiliriz.

Öncelikle şunu belirtmek lazım; konu derya deniz ve hepsini ezbelermek, okumak, aklında tutmak falan ne mümkün ne de gerekli.

Önemli olan tek şey böyle bir şeyin varlığını bilmek ve nasıl kullanılabileceği konusunda bir miktar bilgi sahibi olmak.

askpython.com sayfası önemli miktarda yardım sağlıyor.

Örneğin https://www.askpython.com/?s=random+module sayfasına gittiğimizde random modülü ile ilgili sayfalarca yazıya ulaşabiliyoruz.

Bunların içinde benim ilk ilgimi çeken ve daha sonra da 100 Days of Code dersimin çalışmasında kullandığım aşağıdaki yazılar oldu:

Python random Module – Generate Random Numbers/Sequences  (Python rastgele Modülü - Rastgele Sayılar / Sıralar Oluşturun)

Generate random integers using Python randint() (Python randint () kullanarak rastgele tamsayılar oluşturun)

How to Generate Random Strings in Python (Python'da Rastgele Stringler Nasıl Oluşturulur)

 

Random nedir?

Random bir python modülü. Peki modül ne? Modül kodun farklı bölümlere ayrılması ve farklı fonksiyonlar için kullanılması denilebilir. 

Mesela nasılki araba üretilirken tek kişi arabanın tamamını üretmiyor, bir birim kaportasını bir birim motorunu yapıyor, modüller de bu işi görüyor.

Random modülü sayesinde aslında bu modülün yerine getirdiği aşırı karmaşık matematiksel işlemlere hiç girmeden direkt olarak modülü kodun içerisine import ederek amacımıza ulaşabiliyoruz.

Random modülü nasıl kullanılıyor?

Yukarıda çeşitli başlıklar ve linkler vererek açıklamaya çalıştığım gibi random modülü kullanıcının amacına uygun çok farklı şekillerde kullanılabiliyor. 
 
En basit kullanımına bakacak olursak; diyelim bizim için 1-10 arasında (1 ve 10 dahil olacak şekilde)  rakam seçmesini istiyoruz.

Random integer

 

import random

random_integer = random.randint(1, 10)

Ne yaptık? İlk olarak random modülünü import etmesini söyledik.
Ardından random_integer adında bir değişken belirledik. 
ardından modülün adı ve beraberinde kullanılacak opsiyonun adını (randint) yazdık.
randint çünkü bir integer yani tam sayı seçiyoruz.
Parantez içi ile ilgili dikkat edilmesi gereken bir tek nokta var, belirtilen rakamların arasında virgül ve virgülden sonra bir boşluk olması gerekiyor.
 

Random float

 

Peki küsuratlı (floating) bir sayı seçmek gerekse ne yapacaktık? 

Diyelim 0 ve 1 arasında bir rakam seçilmesini istiyoruz. Bu defa küsuratlı bir rakam olacağından 1 dahil olmayacak, ona en yakın rakam 0,9999... şeklinde olabilecek.
 
Bu defa kodun aşağıdaki şekilde yazılması gerekecekti:

import random

random_float = random.random(0, 1)
 
Burada dikkat edilmesi gereken bir konu var: Eğer 0 ve 5 arasında bir floating number seçimi istiyor olsaydık x5 yapmamız gerekecekti. 
 
random_float = random.random(0, 1) * 5
 
ÖRNEK ÇALIŞMA
 
Aslında çok basit bir kod yazmak istiyoruz: 
 
Yazı mı tura mı diye sorduğumuzda bozuk para fırlatmak zorunda kalmayalım ve bize python kodu cevap versin.
 
Birden fazla şekilde yazılabilecek bu kodu şu ana kadar öğrendiklerimiz ile denersek:

import random
 
Yazı = 1
 
Tura = 0

bozuk_para = random.randint(0, 1)

if bozuk_para == 0
 print("Tura")

if bozuk_para ==1
 print("Yazı")
 

13 Ocak 2021 Çarşamba

Python Mantıksal Operatörler (Logical Operators)


Bundan önceki derste if / elif / else görmüştük.

Bu derste ise birden fazla if condition'un bulunduğu durumlara bakıyoruz.

örneğin:

if cond1 & if cond2 & ifcond3:

    bunu yap

else:

    bunu yap

Yukarıdaki şekilde bir durum için yani aynı kod satırı içerisinde birden fazla durumun birbirine bağlanabilmesi için and / or ve not ihtiyacımızı görecek.

AND: "A and B" dediğimizde eğer her ikisi de doğru ise sonuç doğru, eğer biri doğru biri yanlış ise sonuç yanlış çıkacaktır.

Örneğin "Yaşı 12'den büyükse ve kız çocuğuysa bedava bilet kazanır" gibi bir durumda her iki koşulu da yerine getiremeyen bir kişi bedava bilet alamayacaktır.

OR: C or D şeklinde bir duruma bakıyorsak, C ya da D'nin doğru olması gerekmektedir. Bu durumda bir tanesinin yanlış olması sonucu değiştirmez.

Örneğin "Yaşı 12'den büyükse veya kız çocuğuysa bedava bilet kazanır" gibi bir durumda yaşının 12'den büyük olması yeterli olur, erkek çocuğu da olsa bedava bilet alabilecektir. 

NOT: "Reverse Condition" da deniyor çünkü durumu tersine çeviriyor.

Yani condition doğru ise sonuç yanlış çıkıyor.

Örneğin: a = 12

not a = 15

Doğru

 

7 Ocak 2021 Perşembe

Python Modulo (%) Nedir? ve "Tek mi Çift mi?" kodu yazmak

Bir rakamı başka bir rakama bölme işlemi yaptığımızda eğer tam bölünmüyorsa bir artık rakam oluşacaktır:

Örneğin: 7 / 2 = 2 + 2 + 2 + 1 şeklinde bölünüyor ya da 7 / 3 = 3 + 3 + 1. 

(Yani bütün tam bölünmelerden sonra elimizde kalan 1 oluyor.)

Bu işlemi python'da yapabilmek için % kullanıyoruz ve bize direkt olarak artık rakamı gösteriyor:

7 % 2

1

Çalışmada bizden istenen bir kod yazmamız ve sonucunda verdiğimiz inputa göre bu rakamın tek mi çift mi olduğunu bize söylemesi.  Bunun için yukarıdaki "modulo" konusunun anlaşılmış olması gerekiyor.

Kodu yazmak da mantığını anladıktan sonra kolay:


sayı = int(input("Hangi sayıyı kontrol etmek istiyorsun?"))

çift = int(sayı % 2)

if çift == 0:
    print("Bu bir çift sayıdır.")
else:
    print("
Bu bir tek sayıdır.")

ya da daha kısa şekilde:


sayı = int(input("Hangi sayıyı kontrol etmek istiyorsun?"))

if sayı % 2 == 0:
    print("Bu bir çift sayıdır.")
else:
    print("
Bu bir tek sayıdır.")

 

 

if / else conditions (Python)

Hangi durumda nasıl bir çıktı alınması gerektiğini belirtebilmek için if / else condition yazmaya ihtiyaç var.

Örneğin; 

eğer "su seviyesi 50 cm üzerindeyse boşalt, altındaysa boşaltma" şeklinde bir çıktı almak istiyoruz:

if condition (durum buysa):

    bunu yap

else: (diğer durumda)

    bunu yap

ÖRNEK:

su_seviyesi: 50

if su_seviyesi > 50 

print("Suyu boşalt!")

else:

print("Doldurmaya devam et!") 

** Eğer 50cm'e "eşit veya büyükse" demek istiyorsak bu durumda >= şeklinde kullanım gerekir.

Aynı şekilde "eşit veya küçükse" demek için <= kullanılabilir.

Eğer sadece eşit olduğu bir durum ifade etmek istiyorsak ==, eğer sadece "eşit değildir" demek istiyorsak != kullanabiliyoruz.

*** Tek = kullanımı bir değişken belirlemek gibi "belirleme" işlemlerinde, 

== şeklinde çift eşittir kullanımı ise eşitliği doğrulama amacıyla kullanılır. 


5 Ocak 2021 Salı

Alman Usulü Hesap Öderken Sıkıntıya Son! (Python)

100 Days of Coding'in "kaç gün daha yaşayacağım"dan daha iç açıcı 2. projesi: Alman usulü hesap ödemeye çalışırken bahşişi de işin içine katarsak kişi başı kaç lira ödememiz gerekir diye dert çekenlere derman :)

print("Bahşiş Hesaplayıcıya Hoşgeldiniz!")

Hoşgeldin mesajımızı hazırladıktan sonra değişkenleri belirliyoruz:

hesap = float(input("Hesap ne kadar? $"))

bahşiş = float(input("Yüzde kaç bahşiş vermek istersiniz? 10, 12, veya 15? "))

almanlar = float(input("Hesabı kaç kişi paylaşacak? "))

Bu kısıma istediğimiz veriler girildikten sonra hesaplamaların başlaması lazım: 

tip_hesabı = float((hesap + ((hesap / 100) * hesap)))

kişi_başı = (float(tip_hesabı / almanlar)) 

Aslında kişi başı ne kadar hesap ödeneceğini bulduk ancak örnek soruda en sonda 2 basamak olması istendiği için bir de aşağıdaki değişkeni ekliyoruz:

toplam_kişi_başı = (round(kişi_başı, 2))

Son olarak "Herkes 5 lira verse yeter" tarzı bir noktaya varmaya çalıştığımız için ve bunu yazarken hem string hem float kullandığımız için yine f-string'e ihtiyaç duyuyoruz:

print(f"Herkesin ödemesi gereken: ${toplam_kişi_başı}")


Sonuçta hesap 150 dolar ise ve %12 bahşiş vermek isteyen 5 kişiysek kişi başı 33.60$ ödememiz gerektiğini öğrenmiş olduk.

Bence hadise Türkiye'de geçiyor olsa birisi şöyle derdi: 

"5 kişiyiz, 150 dolar ödeyeceğiz, kişi başı 30 dolar veriyoruz, 3er dolar da bahşiş bırakın"

Ve kimse python kodu yazmadığı gibi, tek bir bölme işlemiyle de konu çözülürdü :))


90 yaşıma kadar yaşarsam geriye kaç günüm kaldı? (Python)


 

100 Days of coding'in 2. gün projesi biraz tatsız; ömrümüzün kalan gün, hafta ve aylarını hesaplatıyor.

Bunu hesaplayabilmek için ilk ihtiyacım olan kullanıcının kaç yaşında olduğunu öğrenmek yani input komutunu kullanmak:

mevcut_yaş = input("Kaç yaşındasınız? ")

Sonra ilk olarak kaç yılım kaldığını hesaplamak için aşağıdaki değişkeni belirliyorum:

kalan_yıllar = 90 - int(mevcut_yaş)
 

Kalan yıllarımı gün, hafta, ay olarak hesaplayacak değişkenlerimi hazırlıyorum:

günler = kalan_yıllar * 365
haftalar =
kalan_yıllar * 52
aylar =
kalan_yıllar * 12

Şimdi sıra geldi kodu yazmaya:

print(f"{günler} gününüz, {haftalar} haftanız, {aylar} ayınız kaldı \n") 

Hem string hem integer kullanacağım için f-string kullandım. 

 

Her şey burada anlatıldığı kadar basit olmadı, ilk seferinde "kalan_yıllar" değişkenini koymak aklıma gelmediği için ilk yazdığım kod 16 satırdan oluşuyordu :) 

Sonuç doğruydu ama yol çok uzundu yani.

Yapa yapa alışırım diye umuyorum...

 

Farklı Veri Tiplerini Birarada Kullanmak: F Strings (Python)

ROUND (Küsuratlı rakamları yuvarlamak)

Python'da küsuratlı çıkan bir sayıyı integer haline getirmek için örneğin int(8 / 3) şeklinde yazdığımızda küsuratı atar ancak geleneksel olarak alıştığımız gibi yuvarlamaz, sadece atar.

Eğer aşağı ya da yukarı yuvarlamasını istiyorsak round fonksiyonunu kullanmamız gerekir.

Eğer küsuratın tamamını değil belli bir kısmını yuvarlamasını ve bize de virgülden sonra iki basamak göstermesini istiyorsak bunun için de kaç basamak görmek istediğimizi şu şekilde belirtmemiz gerekir:

print(round(8 / 3), 2))

Bölme işlemi yaparken sonucun direkt olarak integer şeklinde çıkmasını istiyorsak kullanabileceğimiz bir diğer fonksiyon //

Örneğin : print (8 // 3) dersek sonuç 2 (integer) olarak gelecektir.

Matematiksel işlemin tekrarı 

Örneğin: 

result = 4 / 2 değişkeninde programın tekrar 2'ye bölmesini söylemek için
result /= 2

Ya da, diyelim bir programda skor tutulması gerekiyor ve kullanıcı her skor yaptığında puana +1 eklenecek, bunun için aşağıdaki kullanım geçerlidir:

score = 0

score += 1

print(score) dediğimizde sonuç 1 gelecektir. Ve kullanıcı için her geçerli skorda toplam otomatik olarak 1 yükselecektir.



FARKLI VERİ TİPLERİNİ BİRARADA KULLANMAK



Tek tek tüm verileri str ya da int gibi verilere çevirip hepsini aynı cins yapmaya uğraşmak yerine python'da f-string kullanılabilir. 

Bunun için kod aşağıdaki şekilde yazılır:

print(f"(skorunuz {score}, uzunluğunuz {height}, kazanma durumunuz {isWinning}") 

Yani: Tırnak işaretinin başına bir f ve farklı değişkenleri içine yazmak için { } kullanılır. Yukarıda yer alan örnek kodda score bir int, height bir float ve isWinning bir Boolean olmasına rağmen tek bir string haline gelecek ve tek seferde doğru sonuç alınabilecektir.

 

Matematik işlemleri ve Vücut Kitle Endeksi Hesaplama Projesi (Python)

 

 
Python ile 4 işlem

Python ile 4 işlem yaparken kullanılan sembollerde çarpma işleminde * bölme işleminde / kullanılır, diğerleri aynıdır. "Üzeri" demek için ise ** kullanılır. 

Örneğin print(2 ** 3) yazdığımızda 8 sonucunu alırız. 

Birden fazla işlem yapılması gerektiğinde bir öncelik sırasına göre yapılır: 

PEMDAS

Parantheses

Exponents

Multiplication

Division

Addition

Substraction

! Çarpma ve bölme işlemi ile toplama ve çıkarma işlemi aynı önem seviyesindedir, bunlar arasında öncelik soldakine (daha başta olana) verilir. 

Örnek:

print(3 * 3 + 3 / 3 - 3)

Sonuç: 7 (işlem sırasına göre 9 + 1 - 3 ve 10 - 3 olarak hesaplar.)

BMI Calculator Project

Bizden Body Mass Index hesaplayan bir program yazmamız isteniyor. Bunun için kullanıcı kilo ve boy bilgilerini giriyor.

# formül: weight / height ** 2

height = input("enter your height in m: ")
weight = input("enter your weight in kg: ")


Type komutu ile height ve weight'in ne olduğuna baktığımızda "str" yanıtını alıyoruz. 

Bunlarla dört işlem yapabilmek için int (rakam) ve float (küsuratlı) komutlarını kullanmak gerekecek.

Sonuç:


bmi = int(weight) / float(height) ** 2
bmi_as_int = int(int(weight) / float(height) ** 2)
print(bmi_as_int)


Type ile Kullanılan verinin türünü anlamak (Python)

TYPE 

print(len(input("What is your name?")))

Bu sorunun yanıtı olarak 5 sonucuna ulaşabiliyoruz:

What is your name?
Sinem
5

Ancak print komutu string ile integer birleştirmeyi kabul etmiyor, bu nedenle "Your name has 5 letters" gibi bir yanıt alabilmek için;

num_char = (len(input("What is your name? \n")))
print("Your name has" + num_char + "letters")

yazdığımızda num_char sonuç olarak bir rakam verdiği ve print komutu içerisinde hem str hem int olduğu için aldığımız hata yanıtı:

TypeError: can only concatenate str (not "int") to str 

Kullandığımız verinin türünün ne olduğunu anlamak için type komutunu kullanıyoruz.

print(type(num_char))

Aldığımız yanıt: <class 'int'>

Yani num_char bir integer (rakam) ve biz kullandığımız verinin türünden emin değilsek type kullanarak kolayca öğrenebiliriz.

TYPE CONVERSION

type conversion ya da type casting ile verinin türünde değişiklik yapmak mümkün.

print ile kullanmak istediğimiz verilerin türü string olduğundan:

num_char = (len(input("What is your name? \n")))
new_num_char = str(num_char)
print("Your name has " + new_num_char + " letters")

Sonucunda:

What is your name?
Sinem
Your name has 5 letters

ÖRNEK:

print(70 + float(100.5))
Yanıtı: 170.5

print(str(70) + str(100))
Yanıtı:70100

Python Veri türleri

Strings:

print("Hello")

Hello 

" " içerisindeki her şey text olarak kabul edilir.

Eğer string içerisindeki sadece ilk harfin çıktısını istiyorsak:

print("Hello"[0]) (çünkü her şey sıfırla başlar...)

Bir string içerisinden tek bir karakter çıkartılmasına Subscripting denir.

Bu durumda "Hello" stringindeki "o" harfinin çıkmasını istiyorsak kod şu şekilde olur:

print("Hello"[4])

Integers:

Rakamların text değil rakam olarak kullanılmasını istiyorsak integers devreye girer. Integer küsuratsız sayı anlamına gelir. Tırnak işareti ya da başka herhangi bir şey kullanılmadan sadece rakam yazılarak kullanılır:

print(123 + 345)

Bu kodu çalıştırdığımızda toplama işlemi gerçekleşir ve 468 sonucunu verir.

Eğer çok basamaklı sayılar yazmamız gerekiyor ve kolay okunması için normalde virgül ile ayırıyorsak bunu kod yazarken _ ile yaparız.  

Float:

Küsuratlı sayılar için kullanılır. (3.1415 vb.)

Boolean:

Sadece iki değer mümkündür: True / False (her zaman büyük harf ile başlar)

Bir şeyin doğru ya da yanlış olduğunu kontrol etmek için sıklıkla kullanılır.

SORU:

Sevgili bilgisayar, sana aşağıdaki kodu verirsem, neyi çıktı alırım?

 CEVAP: yo

John the Ripper ile Şifre Kırmak

  JOHN THE RIPPER ARACIYLA ŞİFRE KIRMAK  John The Ripper, açık kaynak ve ücretsiz bir şifre kırma aracı. Her ne kadar Unix için çıkmış ols...