Python’da orta seviye algoritmalar

Enes Eren
3 min readJul 13, 2023

Bu yazıda HackerRank üzerinden orta seviye Python algoritmalarını çözeceğiz. Algoritmaları istediğimiz şekilde (belirli kuralları takip ederek) çözebiliriz, yani herkes birbirinden farklı yollardan giderek ama eninde sonunda aynı sonuca çıkacak şekilde algoritmaları yazabilir. Ben kendi çözümlerimi burada açıklayarak anlatacağım.

  1. Permütasyon
valueX = input("X değerini giriniz:").strip()
valueY = input("Y değerini giriniz:").strip()
valueZ = input("Z değerini giriniz:").strip()
valueN = input("Boyut değerini giriniz:").strip()

def Permutasyon(valueX,valueY,valueZ,valueN):
try:
x = int(valueX)
y = int(valueY)
z = int(valueZ)
n = int(valueN)
coordinates = [[i,j,k] for i in range(x + 1) for j in range(y + 1) for k in range(z + 1) if i + j + k != n]
print(coordinates)
except:
print("Lütfen sayı giriniz")
Permutasyon(valueX,valueY,valueZ,valueN)

Burada kullanıcıda ilk önce 4 adet sayı istenmektedir. Bu sayılardan ilk üçü listenin üç elemanı, sonuncusu ise boyuttur. Ardından try except bloğu içerisinde değerlerin sayı olduğunu doğruluyarak coordinates adındaki değişkenimizde bir list comprehension fonksiyonu yazıyoruz. Bu fonksiyonda üç adet döngü bulunmaktadır. Örneğin ilk döngüde x’in alabileceği tüm değerler kadar bir yenileme işlemi yapılacaktır. Eğer valueX değerini 1 olarak girerseniz; döngü 2 kez yineleme yapar 0 ve 1 için. Ardından if bloğu içinde i, j ve k nin toplamının n olmadığı permütasyonları seçiyoruz.

2. İkinci Değer

value = input("Yanyana birçok sayı yazınız").strip()

def IkinciDeger(value):
try:
arr = [int(n) for n in value]
arr = sorted(list(arr))
arr = set(arr)
arr = list(arr)
print(arr[-2])
except:
print("Lütfen yanyana birçok sayı giriniz Örn: 12312321321")

IkinciDeger(value)

Burada ilk öncek kullanıcdan string içerisinde bir dizi sayı alacağız. Örneğin: 123456. Daha sonra bu stringi list comprehension fonksiyonu ile bir liste haline getiriyoruz ([1,2,3,4,5,6]). Daha sonra bu listeyi küçükten büyüğe doğru sıralayıp, set fonksiyonuyla aynı değerleri siliyoruz ve sadece özel değerler kalıyor. Son olarak endeksleme özelliğini kullanmak için tekrar listeye dönüştürüp sondan ikinci değerini seçiyoruz. Böylece bir dizi sayılardaki en büyük ikinci değeri bu şekilde seçmiş olduk.

3. İkinci En Düşük Not

def function():
student_list = []

for _ in range(int(input("Bir sayı giriniz"))):
name = input("Bir isim giriniz")
score = float(input("Bir not giriniz"))
student_list.append([name,score])

def IkinciEnDusukNot(student_list):
try:
unique_scores = sorted(list(set([student[1] for student in student_list])))
second_lowest_score = unique_scores[1]
filtered_list = [student for student in student_list if student[1] == second_lowest_score]
filtered_list = sorted(filtered_list, key=lambda x: x[0])

for student in filtered_list:
print(student[0])

except:
print("Lütfen değerleri doğru giriniz")

IkinciEnDusukNot(student_list)

function()

Burada önce boş bir liste oluşturuyorum. Bu listeyi [isim, not] şeklinde listelerle dolduracağız. Öncelikle bir for döngüsü oluşturuyoruz bu for döngüsünün ne kadar yineleneceği kullancıdan aldığı sayıya göredir. Yani kullanıcı buraya 2 girerse 2 öğrenci içeren bir liste oluşturulacaktır. Ayrıca bu öğrencilerin adını ve notunu da yine kullanıcı dolduracaktır. Append metodu ile birlikte her bir isim ve notu listeye gönderiyoruz. En sonunda elimizde öğrencilerle dolu bir liste olacaktır bu öğrenciler ise isim ve notlardan oluşacaktır. Daha sonra bu listedeki öğrencileri birbiri ile aynı olmayan notları içerecek şekilde filtreleyip küçükten büyüğe doğru sıralıyoruz. Buradan en düşük 2. notu seçiyoruz. Daha sonra öğrenci listesini isme göre alfabetik olarak sıralıyoruz ve son olarak en düşük 2. nota sahip olanı seçip for döngüsü ile isimleri yazdırıyoruz.

4. Harf Büyüklüğünü Değiştir

Burada amacımı “Merhaba” şeklindeki bir metinsel değeri “mERHABA” şeklinde yazmaktır.

s = input("Bir metin giriniz:")

def swap_case(s):
arr = []
for c in s:
if c.lower() == c:
arr.append(c.upper())
else:
arr.append(c.lower())
print("".join(arr))

swap_case(s)

Burada input fonksiyonu ile kullanıcıdan bir metinsel değer alıyoruz. Daha sonra arr adındaki değişkene boş bir liste atıyoruz. Metinsel değerlere for döngüsünü kullanırsak her bir harfi yineler. Bu yüzden for döngüsünü kullanarak her bir harfi kontrol ediyoruz. Eğer harfin küçük hali kendisi ise büyük halini yazıyoruz aksi takdirde küçük halini ve bunu arr listesine gönderiyoruz. En sonunda elimizde [“m”, “E”, “R”, ”H”, ”A”, ”B”, ”A”] şeklinde bir liste olacak bunu da boş bir stringe joinleyerek “mERHABA” şeklinde çıktımızı alıyoruz.

--

--