Last active
November 10, 2015 19:12
-
-
Save huseyin/2b803a0737308962166f to your computer and use it in GitHub Desktop.
Veri yapıları ödevi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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)] |
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
Ödev olan örnekleme kısmı