Algoritma Örnekleri

2 tane sorum olacak

  1. Verilen bir karakter dizisindeki büyük harfleri küçük, küçük harfleri büyük yapan bir fonksiyon oluşturalım fakat bunu karakter dizilerinin metotlarını kullanmadan yapalım.
    Örnek girdi Abc D12 ise çıktı aBC d12 olsun
  2. Üç basamaklı bir sayının basamaklarının karesi alınır ve bu sayıdaki basamakların yerine alınan karelerin birler basamağındaki sayı yazılır.Eğer bu yeni sayı başlangıçtaki sayıya eşitse Aranan sayıdır.Tüm aranan sayıların toplamı kaçtır ?
    Örnek Arananlar 100 101 105 gibi
1 Beğeni

İkinci soru için:

>>> condition = lambda s: int("".join(map(lambda x: str(int(x)**2)[-1], str(s)))) == s
>>> sum(i for i in range(100, 1000) if condition(i))
20784
>>> 
1 Beğeni

Sayenizde yeni metotlar görüyorum sum fonksiyonuna döngü ve koşul girebiliyoruz demek

Aslında sum fonksiyonunun içindeki kısım bir üreteç (generator), ve tek parametre olarak bir üreteç verdiğimiz fonksiyonlarda üretecin etrafında olması gereken parantezleri yazmamız gerekmiyor. Şu iki kod aynı aslında:

sum((i for i in range(100, 1000) if condition(i)))
sum(i for i in range(100, 1000) if condition(i))

İkinci kod, ilki için bir kısaltma. Üreteç kısmı zaten tek başına bir nesne:

>>> (i for i in range(100, 1000) if condition(i))
<generator object <genexpr> at 0x0000014ECF3E39E0>
>>> 
1 Beğeni

buda benim çözümüm

liste=[]
for sayı in range(100,1000):
    sayaç = 0
    for basamak in str(sayı):

        if str(int(basamak)**2)[-1]==basamak:
            sayaç+=1
        if sayaç==len(str(sayı)):
            liste.append(sayı)
print(sum(liste))
1 Beğeni

Forumda çok arkadaşımız problemleri tek satırlık kod yazarak çözüyor, güzel bir yaklaşım. Ama daha sonradan bu konuları acemi olanlar, detayıyla kodu görmek isteyenler okuyabiliyorlar. O yüzden anlaşılır bir şekilde kodun açık, geniş halde yazılması taraftarıyım. Şahsi görüşüm tabi bu. Sadece bir öneri, tavsiye olarak alın lütfen.

5 Beğeni

ilk soruda ASCII kodlarından yararlanılabilir zannediyorum.

ikincisinde de bir rakamın karesinin mod 10’da sadece {0, 1, 4, 5, 6, 9} değerlerini alabildiğini göz önüne alabiliriz

import itertools as it
sum(100*yuzluk + 10*onluk + 1*birlik
    for yuzluk, onluk, birlik in it.product({0, 1, 5, 6}, repeat=3)
    if yuzluk != 0)
3 Beğeni

Siz biraz analiz yapıp sadeleştirmişsiniz :slight_smile:

  1. soru için:
lower_to_upper = {chr(i): chr(i + 32) for i in range(65, 91)}
upper_to_lower = {v: k for k, v in lower_to_upper.items()}


def change_case(s: str):
    return "".join(
        lower_to_upper[i] if i in lower_to_upper
        else upper_to_lower[i] if i in upper_to_lower
        else i
        for i in s
    )
    
    
string = "Aa123b"
print(change_case(string))
#  aA123B
3 Beğeni

Bu bir str metodu ama :slightly_smiling_face:

O halde şöyle yapalım. :slight_smile:

def change_case(s: str):
    result = ""
    for i in s:
        if i in lower_to_upper:
            result += lower_to_upper[i]
        elif i in upper_to_lower:
            result += upper_to_lower[i]
        else:
            result += i
    return result

Bir çözümde benden

def değiştir(string):
    küçükler=['a','b','c','ç','d','e','f','g','ğ','h','ı','i','j','k','l','m','n','o','ö','p','r','s','ş','t','u','ü','v','y','z']
    büyükler = ['A', 'B', 'C', 'Ç', 'D', 'E', 'F', 'G', 'Ğ', 'H', 'I', 'İ', 'J', 'K', 'L', 'M', 'N', 'O', 'Ö', 'P', 'R','S', 'Ş', 'T', 'U', 'Ü', 'V', 'Y', 'Z']
    çıktı=''
    for i in string:
        if i in büyükler:
            çıktı += küçükler[büyükler.index(i)]
        elif i in küçükler:
            çıktı += büyükler[küçükler.index(i)]
        else:
            çıktı += i
    return çıktı
from string import ascii_lowercase,ascii_uppercase,digits

def swap(s):
	result = ""
	for i in s:
		if i in ascii_lowercase:
			result += chr(ord(i)-32)
		elif i in ascii_uppercase:
			result += chr(ord(i)+32)
		else:
			result += i

	return result

print(swap("Aa123b")) # aA123B

1 Beğeni