100 Days of Code etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
100 Days of Code 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

 

9 Ocak 2021 Cumartesi

Python Multiple If Conditions ile "Pizzanızı Nasıl Alırdınız?"


 

Bir önceki derste Python'da if / elif / else kullanımını öğrenmiştik.

if / elif / else  kullanımında eğer 1. durum gerçekleşiyorsa 2. duruma ve onun da yanıtına göre 3. duruma bakarak (yani birbirine bağlı sorular ile ilerleyerek) tek bir koşulun gerçekleşmesine şahit oluyorduk.

örneğin yaşı 12 -15 arası ise (if) bilet 5$, 15-18 arası ise (elif) bilet 8$, 18'den büyükse (else) bilet 10$ gibi.

Multiple if conditions durumu ise aslında adı üzerinde birden fazla "if" bulunması halini anlatıyor ve bu eğerler birbirinden farklı. İki farklı sorunun cevabı aranıyor. 

Bilet parasını öğrendikten sonra bir de "yanında patlamış mısır istiyor musun?" diye sorarsak ve mısırın parasını bilet parasına ekleyeceksek bu durumda bir multiple if condition ile karşı karşıyayız. Patlamış mısır'ın ücreti alan kişinin yaşına göre değişiyorsa bu da kendi içerisinde bir elif/else barındıracak demek.

Birazdan örnek üzerinde daha anlaşılabilir hale getirmeye çalışacağım :)

* If condition'ları yazarken önemli hususlardan biri satırbaşının nereden yapıldığı. Python öncelik sıralamasına ve işlem sırasına buna göre karar verdiğinden neyi nereden başlattığına dikkat etmek gerekiyor.

** Herhangi bir değişkenin sabit artmasını istiyorsak (mesela hep 3$ artıyorsa) += 3$ şeklinde yazarak tekrar tekrar yazmaktan kurtulabiliriz.

*** Eğer cevaba bağlı olarak sonucu değiştirecek bir durum yoksa if'lerin arkasına else'leri koymamıza gerek kalmıyor.

Gelelim örneğe.

Bizden bir pizza fiyatı hesaplayıcı yapmamız istenmiş.

Bilmemiz gerekenler hangi boy pizza, sucuk olacak mı ve ekstra peynir istiyor musunuz sorularının cevapları.

Fiyatlar şu şekil:

Küçük Boy Pizza: $15

Medium Boy Pizza: $20

Large Boy Pizza: $25

Küçük Boy Pizza için sucuk: +$2

Medium ve Large Boy Pizza için sucuk: +$3

Her boy pizza için ekstra peynir: + $1

Değişkenlerimizi belirleyelim:

print("Python Pizzacısına Hoşgeldiniz!")
ebat = input("Ne boy pizza istersiniz? S, M, L ")
sucuk_ekleme = input("Sucuk ister misiniz? Y, N ")
ekstra_peynir = input("Ekstra peynir ister misiniz? Y, N ")

Onun yazdığı kod:

tutar = 0 (İlk olarak tutar için bir değişken belirlemiş)

if ebat == "S":
tutar += 15
elif ebat == "M": (Elif/else ile devam ediyor çünkü if conditionlarda "birinden biri olacak" durumu var)
tutar += 20
else:
tutar += 25

if sucuk_ekleme == "Y": (Burada yeni bir if condition başlıyor)
if ebat == "S":
tutar += 2
else:
(M ve L için eklenecek miktar aynı olduğundan)
tutar += 3


if ekstra_peynir == "Y":
(Bu da multiple if'lerin sonuncusu)
tutar += 1
print(f"Toplam tutar: {tutar}.")

(Dikkat: Tüm satırbaşları aynı yerde)

Benim yazdığım kod (birçok farklı şekilde yazarak doğru sonuca ulaşmak mümkün):

tutar = 0

if ebat == "S":
tutar += 15
if sucuk_ekleme == "Y":
tutar = tutar + 2
elif ebat == "M":
tutar += 20
if sucuk_ekleme == "Y":
tutar = tutar + 3
else:
tutar += 25
if sucuk_ekleme == "Y":
tutar = tutar + 3

if ekstra_peynir == "Y":
tutar = tutar + 1

print(f"Toplam tutar {tutar}.")


Benim yazdığım kodda her ebat seçimi ardından malzeme seçimi geliyor ve ebada bağlı geldiği için de her ebat seçimi altında 1 tab içeride duruyor. 

Mümkün olduğunca işleri basit tutabilmek adına ilk yazılmış olan kod benimkinden daha iyi tabi ama öte yandan nasıl anlıyorsan ve kendini nasıl doğru ifade edebiliyorsan, eğer doğru sonucu da alıyorsan sanıyorum sorun yok.

Bugünlük bu kadar. Hala 3. gündeyim ama 35. dersi bitirdim. Bir yandan da TryHackMe ile uğraştığım için ancak bu hızla gidebiliyorum :)

7 Ocak 2021 Perşembe

Olasılıklar dünyası: If / Elif / Else (Python)

Pyhton ile IF condition yani "eğer" durumları birkaç şekilde ele alınabiliyor:

1.si eğer şöyleyse bunu yap demek ki bu en kolayı:

if condition :

print("oldubuiş")

2.si eğer bir koşula daha bağlı kalmamız gerekiyorsa. 

Mesela araba kullanabilmek için hem 18 yaşından büyük olmamız hem de renk körü olmamamız lazım. 

Bu durumda "Ehliyet alabiliyor muyum?" diye kontrol edebileceğim bir program yazmak istersem ilk soru şu soracak "18 yaşından büyük müsün?", eğer bu koşulu evet şeklinde gerçekleştirebiliyorsam ozaman ikinci soru gelecek: "Renk körü müsün?", buna da "Hayır" cevabı alırsa bana "Ehliyet senindir!" diyecek.

Peki bunu python'a nasıl dökeceğiz? "Nested if" ile.

Hemen göstereyim

1. yapmamız gereken yaş değişkenini belirlemek:

yas = int(input("Kac yasindasin? "))

input ile bir veri girileceğini, int ile de bir tam sayı beklediğimizi belirttik.

Şimdi tam 18 yaşında, 18 yaşından küçük ve/veya büyük için bir koşul belirlememiz gerekiyor:

yas = int(input("Kac yasindasin? "))
if yas >= 18:
print ("Ehliyet senindir")
else:
print("Seneye tekrar dene") 


Buraya kadar iki önemli nokta var: 

1. tam 18 yaşında olduğu durumu atlamamak için >= (yani büyüktür ve eşittir) kullanmak, 

2. if condition sonundaki : unutmamak.

Şimdi diğer koşulu da gerçekleştirip gerçekleştirmediğini öğrenmemiz gerekiyor, bunun için ikinci değişkeni de belirlememiz gerekiyor:

körlük = str(input("Kör müsün? "))

Şimdi de bu 2 durumu birleştirmek gerekiyor. 

Ön koşul yaş olduğundan önce onu yazıyorum ardından bir tab tuşu marifetiyle ikinci if'imi yazıyorum:

körlük = str(input("Kör müsün? "))


 

Böylece ilk koşulu sağladıysa (>=18) emeklilikte yaşa takılanlar gibi bu defa göz muayenesine takılıyor. Ona da "Hayır" cevabı verdiyse, aldı ehliyeti.

Çıktısını da şöyle bırakayım:

*** Hatırlanması gereken şu: condition kontrolü yaparken her zaman "büyük resme" bakıyor, en dıştan en içe doğru doğrulama yaparak devam ediyor.

Gelelim "Obez misin?" bölümümüze.

Daha önce BMI (Vücut kitle indeksi) hesaplayan bir makina yapmıştık. Bu sefer işleri iletletiyor ve BMI'da çıkan rakama göre obezite çarkındaki yerini söylüyoruz.

boy = float(input("Boyunuzu metre cinsinden girin: "))
kilo = float(input("Kilonuzu girin: "))

Değişkenlerimizi belirledik.

BMI hesabı şöyleydi:
bmi = round(ağırlık / (uzunluk * uzunluk))

if bmi <= 18.5:
print(f"BMI {bmi} çıktı, zayıfsın")
elif bmi <= 25:
print(f"BMI {bmi} çıktı, normalsin")
elif bmi <= 30:
print(f"BMI {bmi} çıktı, hafifşişmansın")
elif bmi <= 35:
print(f"BMI {bmi} çıktı, obez olmuşsun")
else:
print(f"BMI {bmi} çıktı, durum vahim")

 *** Tek bir if ve else arasında yazıldığı için tüm satırbaşları aynı yerde. Eğer 1 if / else condition içerisinde farklı bir if / else condition olsaydı 1 tab içeri yazmak gerekecekti. 

*** if / else arasına görüldüğü gibi dilediğim kadar elif kodu yazabiliyorum.

 

ARTIK YIL HESAPLAMA

Şimdiye kadar yazmaya çalıştığım tüm kodlar içerisinde (yani toplam 4 kod içinde :))) en saçma ve dahi can sıkıcı olan buydu çünkü öyle olursa ama böyle de olursa fakat şu olmazsa şeklinde aşırı yokuş önermeler vardı.

Artık yıl (Leap year) hesaplayacağız fakat zaten ingilizce olarak söyleneni anlamak, ardından anladığını tam olarak idrak etmek ve kağıda dökmek (evet kağıt üzerinde çözüyorum :)) baya zaman aldı.

Diyor ki: 

on every year that is evenly divisible by 4 

 **except** every year that is evenly divisible by 100 

    **unless** the year is also evenly divisible by 400

 Yani 4'e bölünürse Leap year ama 100'ede bölünüyorsa ozaman Leap year değil fakat 400e bölünüyorsa ozaman Leap year. Dediğim gibi söyleneni anlamaya çalışırken bile beynim kanadı.

Aşağıdaki gibi bişey çizdim anlayabilmek için, bu işimi baya kolaylaştırdı:

 

Ardından da şunu yazdım:

 

Çalıştığına kendim bile zor inandım :)

Bu gecelik de bu kadar.

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...