Skip to content

Instantly share code, notes, and snippets.

@huseyin
Last active November 10, 2015 19:12
Show Gist options
  • Save huseyin/2b803a0737308962166f to your computer and use it in GitHub Desktop.
Save huseyin/2b803a0737308962166f to your computer and use it in GitHub Desktop.
Veri yapıları ödevi
# -*- coding: utf-8 -*-
""" String'ler için birtakım fonksiyonlar
Dikkat: Buradaki fonksiyonlar stringler için built-in fonksiyonlar
değildir. Fonksiyonlar peşi sıra değil, iç içe kullanılmalıdır.
Public değişkenler:
lower_letters: abecesel karakterlerin küçük halleri
upper_letters: abecesel karakterlerin büyük halleri
from: Hüseyin Tekinaslan <[email protected]>
subject: Veri Yapıları - Python Egzersizleri (Data Types - Python Exercies)
"""
# abecesel karakter varyasyonları
lower_letters = "abcdefghijklmnoprstuvyzwqx"
upper_letters = "ABCDEFGHIJKLMNOPRSTUVYZWQX"
# sesli veya sessiz karakter varyasyonları
vowels = "aeiou"
nonvowels = "bcdfghjklmnprstvyzqwx"
# Stringleri büyük harfleştir.
def upcase(str):
""" upcase(str)
"""
s = ''
for letter in str:
if islower(letter):
s += upperize(letter)
else:
s += letter
return s
# Stringleri küçük harfleştir.
def downcase(str):
""" downcase(str)
"""
s = ''
for letter in str:
if isupper(letter):
s += lowerize(letter)
else:
s += letter
return s
# Stringi ters düz et. Öyle ki, küçük harfler büyüsün,
# büyük harfler küçülsün.
def swapcase(str):
""" swapcase(str)
"""
s = ''
for letter in str:
if isupper(letter):
s = s + lowerize(letter)
elif islower(letter):
s = s + upperize(letter)
else:
s = s + letter
return s
# Stringin sadece ilk harfini büyüt.
def capitalize(str):
""" capitalize(str)
Dikkat: Sadece stringlerin ilk harfini büyütür. Örneğin,
capitalize("foo") ve capitalize("foo bar baz")
durumlarının her ikisinde de sadece ilk harfler büyür.
"Foo" ve "Foo bar baz"
şeklinde bir çıktı oluşur.
"""
s = ''
if islower(str[0]):
s += upperize(str[0])
s += str[1:]
return s
# Stringteki sesli harfleri yok eder.
def nonvowel(str):
""" nonvowel(str)
"""
s = ''
for char in str:
if char in vowels:
s += ''
else:
s += char
return s
# Stringteki sessiz harfleri yok eder.
def nonconson(str):
""" nonconson(str)
"""
s = ''
for char in str:
if char in nonvowels:
s += ''
else:
s += char
return s
# Stringte bir karakteri diğer bir karakter ile değiştir.
def translate(str, chr, sep='*'):
""" translate(str, chr, sep='*')
Dikkat: Bu fonksiyon her şekilde bir karakterin yerine farklı
bir karakter atamak üzere tasarlanmıştır. Yani üçüncül bir
parametre verilmediğinde otomatik olarak '*' karakteri ile
değişim yapar.
"""
s = ''
for item in str:
if item == chr:
s += sep
else:
s += item
return s
# Karakter büyük mü kontrol et.
def isupper(chr):
if chr in upper_letters:
return True
else:
return False
# Karakter küçük mü kontrol et.
def islower(chr):
if chr in lower_letters:
return True
else:
return False
# String içinde bir karakterin ilk bulunduğu indisi döndür.
def index(fromch, tostr):
idx = 0
for c in tostr:
if c == fromch:
break
idx += 1
return idx
# Bir karakteri büyük halini döndür.
def upperize(letter):
return upper_letters[index(letter, lower_letters)]
# Bir karakterin küçük halini döndür.
def lowerize(letter):
return lower_letters[index(letter, upper_letters)]
@huseyin
Copy link
Author

huseyin commented Oct 24, 2015

Ödev olan örnekleme kısmı

from mystring import *

# Örnek stringleri belirle
string1 = "foo bar"
string2 = "FOO BAR"
string3 = "fOo BaR"

upcase(string1)         # harfleri büyüt
downcase(string2)       # harfleri küçült
swapcase(string3)       # ters düz et
nonvowel(string1)       # seslileri kaldır
nonconson(string1)      # sessizleri kaldır
translate(string1, 'a') # a harflerini * ile değiştir
translate(string1, 'a', '-') # a harflerini - ile değiştir

@huseyin
Copy link
Author

huseyin commented Oct 24, 2015

Ayrıca,

Betikte dolaylı bir dict (ruby için hash) kullanılmıştır. Yani küçük harfler ile büyük harfler dönüşümlü olarak birbirlerinin key-value çiftleri olmuştur. Bunu gerçek manada dict'leştirebilirdik ancak iki yönlü kullanmamız zorlaşırdı.

...
# Sadece bu program için hash'leştir. (aksi halde aynı iki key'de sıkıntı olur)
def hashize(str1, str2):
    hash = {}  # Dikkat edelim ki 'hash', python için built-in bir fonksiyonu da işaret eder. Ancak buradaki hash değişken adıdır, karıştırılmamalıdır. (bknz: https://docs.python.org/2/library/functions.html)
    # uzunlukları eşit olmalı
    if len(str1) is not len(str2):
        raise()
    for c in str1:
        hash[c] = str2[index(c, str1)]
    return hash
....

gibi bir yolla iki string tek taraflı olarak birbirinin key-value çiftini oluşturdu.

inst = hashize(lower_letters, upper_letters)
print inst.keys()    # keylere bir göz at.
print inst.values()  # valulara bir göz at.
print inst.reverse() # tabiki de böyle bir dict metodu yok. yazılabilir ama ek iş gücü. (bknz: monkey patching)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment