http___programarcadegames.com_index.php_chapter_sorting_lang_tr_3.xml
1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 10.2 10.3 11.1 12.1 13.1 13.2 13.3 13.4 13.5 15.1 16.1 17.1 17.2 19.1 21.1 21.2 21.3 21.4 21.5 22.1 22.2 23.1 23.2 23.3 23.4 24.1 24.2 25.1 25.2 27.1 27.2 27.3 27.4 27.5 28.1 29.1 29.2 29.3 29.4 29.5 30.1 31.1 32.1 32.2 32.3 33.1 34.1 35.1 36.1 37.1 37.2 38.1 38.2 38.3 39.1 39.2 40.1 40.2 40.3 41.1 42.1 42.2 43.1 43.2 43.3 43.4 43.5 43.6 43.7 43.8 43.9 43.10 44.1 44.2 45.1 46.1 47.1 48.1 48.2 49.1 50.1 51.1 51.2 52.1 53.1 54.1 54.2 54.3 54.4 55.1 55.2 56.1 57.1 57.2 57.3 58.1 59.1 59.2 60.1 61.1 61.2 62.1 63.1 64.1 65.1 66.1 67.1 67.2 68.1 69.1 70.1 70.2 71.1 71.2 71.3 71.4 72.1 72.2 72.3 72.4 73.1 74.1 75.1 76.1 77.1 78.1 79.1 79.2 80.1 80.2 81.1 81.2 82.1 83.1 83.2 84.1 84.2 85.1 86.1 87.1 87.2 87.3 88.1 89.1 90.1 91.1 92.1 93.1 94.1 96.1 97.1 97.2 98.1 99.1 100.1 101.1 102.1 103.1 104.1 105.1 106.1 107.1 108.1
Program Arcade GamesWith Python And Pygame Chapter 7: Introduction to Lists 7.1 Data Types So far this book has shown four types of data: - String (a string is short for “string of characters,” which normal people think of as text.) - Integer - Floating point - Boolean Python can display what type of data a value is with the type function. This type function isn't useful for other programming in this book, but it is good to demonstrate the types of data introduced so far. Type the following into the interactive IDLE shell. (Don't create a new window and type this in as a program; it won't work.) It is also possible to use the type function on a variable to see what kind of data is in it. x = 3 type(x) The two new types of data introduced in this chapter are Lists and Tuples. Lists are similar to another data structure called an array. A list can be resized, but an array can not. A course in data structures will teach you the details, but it that is beyond the scope of this book. Try running the following commands in the interactive Python shell and see what is displayed: 7.2 Working With Lists You've created grocery lists, to-do lists, bucket lists, but how do you create a list on the computer? Try these examples using IDLE's command line. To create a list and print it out, try the following: To print an individual element in a list: This number with the item's location is called the index. Note that list locations start at zero. So a list or array with 10 elements does not have an element in spot [10]. Just spots [0] through [9]. It can be very confusing to create an list of 10 items and then not have an item 10, but most computer languages start counting at 0 rather than 1. Think of a list as an ice cube tray that holds numbers, as shown in Figure 7.2. The values are stored inside each tray spot, and written on the side of the tray are numbers starting at zero that identify the location of each spot. Remember, there are two sets of numbers to consider when working with a list of numbers: the position and the value. The position, also known as index, refers to where a value is. The value is the actual number stored at that location. When working with a list or array, make sure to think if you need the location or the value. It is easy to get the value given the location, but it is harder to get the location given the value. Chapter 15 is dedicated to answering how to find the location of a particular value. A program can assign new values to an individual element in a list. In the case below, the first spot at location zero (not one) is assigned the number 22. Also, a program can create a “tuple.” This data type works just like a list, but with two differences. First, it is created with parentheses rather than square brackets. Second, it is not possible to change the tuple once created. See below: >>> x = (1, 2) >>> print(x) (1, 2) >>> print(x[0]) 1 >>> x[0] = 22 Traceback (most recent call last): File " ", line 1, in   x[0] = 22 TypeError: 'tuple' object does not support item assignment >>> As can be seen from the output of the code above, we can't assign an item in the tuple a new value. Why would we want this limitation? First, the computer can run faster if it knows the value won't change. Second, some lists we don't want to change, such as a list of RGB colors for red. The color red doesn't change, therefore an immutable tuple is a better choice. 7.3 Iterating (Looping) Through a List If a program needs to iterate through each item in a list, such as to print it out, there are two types of for loops that can do this. The first method to iterate through each item in a loop is by using a “for-each” loop. This type of loop takes a collection of items, and loops the code once per item. It will take a copy of the item and store it in a variable for processing. The format of the command: for item_variable in list_name: Here are some examples: Programs can store strings in lists too: Lists can even contain other lists. This iterates through each item in the main list, but not in sublists. The other way to iterate through a list is to use an index variable and directly access the list rather than through a copy of each item. To use an index variable, the program counts from 0 up to the length of the list. If there are ten elements, the loop must go from 0 to 9 for a total of ten elements. The length of a list may be found by using the len function. Combining that with the range function allows the program to loop through the entire list. This method is more complex, but is also more powerful. Because we are working directly with the list elements, rather than a copy, the list can be modified. The for-each loop does not allow modification of the original list. 7.4 Adding to a List New items may be added to a list (but not a tuple) by using the append command. For example: Side note: If performance while appending is a concern, it is very important to understand how a list is being implemented. For example, if a list is implemented as an array data type, then appending an item to the list is a lot like adding a new egg to a full egg carton. A new egg carton must be built with thirteen spots. Then twelve eggs are moved over. Then the thirteenth egg is added. Finally the old egg carton is recycled. Because this can happen behind the scenes in a function, programmers may forget this and let the computer do all the work. It would be more efficient to simply tell the computer to make an egg carton with enough spots to begin with. Thankfully, Python does not implement a list as an array data type. But it is important to pay attention to your next semester data structures class and learn how all of this works. To create a list from scratch, it is necessary to create a blank list and then use the append function. This example creates a list based upon user input: If a program needs to create an array of a specific length, all with the same value, a simple trick is to use the following code: # Create an array with 100 zeros. 7.5 Summing or Modifying a List Creating a running total of an array is a common operation. Here's how it is done: # Copy of the array to sum my_list = [5,76,8,5,3,3,56,5,23] # Initial sum should be zero list_total = 0 # Loop from 0 up to the number of elements # in the array: for i in range(len(my_list)): # Add element 0, next 1, then 2, etc. list_total += my_list[i] # Print the result print(list_total) The same thing can be done by using a for loop to iterate the array, rather than count through a range: # Copy of the array to sum my_list = [5, 76, 8, 5, 3, 3, 56, 5, 23] # Initial sum should be zero list_total = 0 # Loop through array, copying each item in the array into # the variable named item. for item in my_list: # Add each item list_total += item # Print the result print(list_total) Numbers in an array can also be changed by using a for loop: # Copy of the array to modify my_list = [5, 76, 8, 5, 3, 3, 56, 5, 23] # Loop from 0 up to the number of elements # in the array: for i in range(len(my_list)): # Modify the element by doubling it my_list[i] = my_list[i] * 2 # Print the result print(my_list) However version 2 does not work at doubling the values in an array. Why? Because item is a copy of an element in the array. The code below doubles the copy, not the original array element. # Copy of the array to modify my_list = [5, 76, 8, 5, 3, 3, 56, 5, 23] # Loop through each element in myArray for item in my_list: # This doubles item, but does not change the array # because item is a copy of a single element. item = item * 2 # Print the result print(my_list) 7.6 Slicing Strings Strings are actually lists of characters. They can be treated like lists with each letter a separate item. Run the following code with both versions of x: x = "This is a sample string" #x = "0123456789" print("x=", x) # Accessing a single character print("x[0]=", x[0]) print("x[1]=", x[1]) # Accessing from the right side print("x[-1]=", x[-1]) # Access 0-5 print("x[:6]=", x[:6]) # Access 6 print("x[6:]=", x[6:]) # Access 6-8 print("x[6:9]=", x[6:9]) Strings in Python may be used with some of the mathematical operators. Try the following code and see what Python does: a = "Hi" b = "There" c = "!" print(a + b) print(a + b + c) print(3 * a) print(a * 3) print((a * 2) + (b * 2)) It is possible to get a length of a string. It is also possible to do this with any type of array. a = "Hi There" print(len(a)) b = [3, 4, 5, 6, 76, 4, 3, 3] print(len(b)) Since a string is an array, a program can iterate through each character element just like an array: for character in "This is a test.": print(character) Exercise: Starting with the following code: months = "JanFebMarAprMayJunJulAugSepOctNovDec" n = int(input("Enter a month number: ")) Print the three month abbreviation for the month number that the user enters. (Calculate the start position in the string, then use the info we just learned to print out the correct substring.) 7.7 Secret Codes This code prints out every letter of a string individually: plain_text = "This is a test. ABC abc" for c in plain_text: print(c, end=" ") Computers do not actually store letters of a string in memory; computers store a series of numbers. Each number represents a letter. The system that computers use to translate numbers to letters is called Unicode. The full name for the encoding is Universal Character Set Transformation Format 8-bit, usually abbreviated UTF-8. The Unicode chart covers the Western alphabet using the numbers 0-127. Each Western letter is represented by one byte of memory. Other alphabets, like Cyrillic, can take multiple bytes to represent each letter. A partial copy of the Unicode chart is below: For more information about ASCII (which has the same values as Unicode for the Western alphabet) see: http://en.wikipedia.org/wiki/ASCII For a video that explains the beauty of Unicode, see here: http://hackaday.com/2013/09/27/utf-8-the-most-elegant-hack This next set of code converts each of the letters in the prior example to its ordinal value using UTF-8: plain_text = "This is a test. ABC abc" for c in plain_text: print(ord(c), end=" ") This next program takes each UTF-8 value and adds one to it. Then it prints the new UTF-8 value, then converts the value back to a letter. plain_text = "This is a test. ABC abc" for c in plain_text: x = ord(c) x = x + 1 c2 = chr(x) print(c2, end="") The next code listing takes each UTF-8 value and adds one to it, then converts the value back to a letter. # Sample Python/Pygame Programs # Simpson College Computer Science # http://programarcadegames.com/ # http://simpson.edu/computer-science/ # Explanation video: http://youtu.be/sxFIxD8Gd3A plain_text = "This is a test. ABC abc" encrypted_text = "" for c in plain_text: x = ord(c) x = x + 1 c2 = chr(x) encrypted_text = encrypted_text + c2 print(encrypted_text) Finally, the last code takes each UTF-8 value and subtracts one from it, then converts the value back to a letter. By feeding this program the output of the previous program, it serves as a decoder for text encoded by the prior example. # Sample Python/Pygame Programs # Simpson College Computer Science # http://programarcadegames.com/ # http://simpson.edu/computer-science/ # Explanation video: http://youtu.be/sxFIxD8Gd3A encrypted_text = "Uijt!jt!b!uftu/!BCD!bcd" plain_text = "" for c in encrypted_text: x = ord(c) x = x - 1 c2 = chr(x) plain_text = plain_text + c2 print(plain_text) 7.8 Associative Arrays Python is not limited to using numbers as an array index. It is also possible to use an associative array. An associative array works like this: # Create an empty associative array # (Note the curly braces.) x = {} # Add some stuff to it x["fred"] = 2 x["scooby"] = 8 x["wilma"] = 1 # Fetch and print an item print(x["fred"]) You won't really need associative arrays for this class, but I think it is important to point out that it is possible. 7.9 Review 7.9.1 Multiple Choice Quiz Click here for a multiple-choice quiz. 7.9.2 Short Answer Worksheet Click here for the chapter worksheet. Click here for the chapter lab. You are not logged in. Log in here and track your progress. English version by Paul Vincent Craven Spanish version by Antonio Rodríguez Verdugo Russian version by Vladimir Slav Turkish version by Güray Yildirim Portuguese version by Armando Marques Sobrinho and Tati Carvalho Dutch version by Frank Waegeman Hungarian version by Nagy Attila Finnish version by Jouko Järvenpää French version by Franco Rossi Korean version by Kim Zeung-Il Chinese version by Kai Lin
1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1 11.1 12.1 13.1 14.1 15.1 16.1 17.1 18.1 19.1 20.1 21.1 22.1 23.1 24.1 25.1 26.1 27.1 28.1 29.1 30.1 31.1 32.1 33.1 34.1 35.1 36.1 37.1 38.1 39.1 40.1 41.1 42.1 43.1 44.1 45.1 46.1 47.1 48.1 49.1 50.1 51.1 52.1 54.1 56.1 58.1 59.1 60.1 61.1 62.1 63.1 64.1 65.1 66.1 67.1 68.1 69.1 70.1 71.1 72.1 73.1 74.1 75.1
Arcade Türü Oyun Programlamayıve Bilgisayar Bilimleri Öğrenin Chapter 18: Sıralama Bölerek arama sadece sıralanmış listelerde çalışmaktadır. Peki programlar listeleri nasıl sıralarlar? Bir program kullanıcı sütun başlığına tıkladığında öğelerin listesini nasıl sıralar ya da bir şeyin sıralanması gerektiğinde ne yapar? Bunu yapmak için birkaç algoritma vardır. Sıralama yapabilmek için en basit iki algoritma ise selection sort ve insertion sort'dır. Diğer sıralama algoritmaları da bulunmaktadır, mesela shell, merge, heap ve quick sıralama algoritmaları. Çok kullanılan sıralama lgoritmalarının uygulamaları için, alttaki siteye göz atın: http://www.sorting-algorithms.com/ Her sıralama avantaj ve dezavantajlara sahiptir. Bazıları başlangıçta liste neredeyse sıralıysa bu tür listeleri oldukça hızlı sıralar. Bazıları liste tamamen rastgele sıralandıysa o tür listeleri hızlı sıralar. Diğer listeler hızlı sıralanır, fakat daha fazla hafıza tüketir. 18.1 Değerleri Takas Etmek Bir dizide iki değeri değiş tokuş etmek çoğu sıralama algoritmasının ortak işlemidir. Örneğin, programın alttaki gibi bir listesinin olduğunu varsayalım: Geliştirici sırayla 15 ve 14 sayılarını içeren 0 ve 2 konumlarının yerlerini değiştirmek istiyor. Bu kodu yazmak için ilk deneme şuna benzer: list[0] = list[2] list[2] = list[0]Grafikte, gerçekleşen şu olacaktır: Açıkça görünüyor ki bu çalışmıyor. İlk list[0] = list[2] ataması 0 konumundaki 15 değerinin üzerine 2 pozisyonundaki 14 değerinin yazılmasına sebep oluyor ve geri alınamaz kayıp ortaya çıkıyor. Alttaki satırda list[2] = list[0] ile 14 sadece değeri zaten 14 olan 2. hücreye geri kopyalanıyor. Bu sorunu çözmek için, bir dizideki değerlerin yerlerinin değiştirilmesi üç aşamada yapılmalıdır. Değiştirme işlemi esnasında değeri tutması için geçici bir değişken oluşturmak gereklidir. Değişimi yapacak kod alttaki gibidir: temp = list[0] list[0] = list[2] list[2] = temp İlk satır 0 konumundaki değeri temp değişkenine kopyalıyor. Bu, kodun 0 konumuna veri kaybedilmeden 2 konumundaki veriyi yazmasına izin veriyor. Son satırda o anda temp değişkeninde tutulan 0 konumunun eski değeri alınıyor ve 2 konumuna yerleştiriliyor. 18.2 Seçmeli Sıralama Seçmeli sıralama listenin başından başlar. Daha sonra kod listenin kalanını tarar ve en küçük sayıyı bulur. En küçük sayı o konumdakiyle yer değiştirir. Daha sonra kod bir sonraki sayıya kayar. Görsel olarak, sıralama alttaki resimdeki gibidir: Seçmeli sıralama için olan kod iki iç içe döngü içerir. Dış döngü kodun en küçük değerle yer değiştireceği konumu tutar. İç döngü geçerli konumdan başlayarak sağa doğru en küçük değeri tarar. En küçük değeri bulduğunda, değiş tokuş işlemi gerçekleşir. # Seçmeli sıralama def selection_sort(list): # Tüm dizi boyunca döngü for curPos in range( len(list) ): # En küçük sayıya sahip konumu bul # Geçerli konumdan başla minPos = curPos # Kalanını tara for scanPos in range(curPos+1, len(list) ): # Bu konum en küçük mü? if list[scanPos] < list[minPos]: # Bu en küçük, bu konumu en küçük olarak işaretle minPos = scanPos # İki değerin yerini değiştir temp = list[minPos] list[minPos] = list[curPos] list[curPos] = temp Dış döngü yer zaman $n$ kez çalışacaktır. İç döngü $n/2$ kez çalışacaktır. Bu listenin sıralı olup olmadığına bakılmaksızın gerçekleşecektir. Döngülerin verimliliği 16. satırda minPos ve curPos'un eşit olup olmadığının kontrolüyle artırılabilir. Bu değerler eşitse, üç satırlık değiştirme kodunun yapılmasına gerek yoktur. Yukarıdaki sıralama kodunu test etmek için alttaki kod kullanılabilir. İlk fonksiyon listeyi ekrana yazdıracaktır. Sontaki kod rastgele sayılardan oluşan bir liste oluşturacak, onu yazdıracak, sıralayacak ve sonra tekrar yazdıracaktır. def print_list(list): for item in list: print( "%3d" % item,end="" ) print() # Rastgele sayılardan oluşan bir liste oluştur list = [] for i in range(10): list.append(random.randrange(100)) # Sıralamayı dene print_list(list) selection_sort(list) print_list(list) 18.3 Eklemeli Sıralama Eklemeli sıralama seçmeli sıralamaya dıştaki döngünün nasıl çalıştığı konusunda benzerdir. Eklemeli sıralama listenin sol tarafından başlar ve sağ tarafı ile çalışır. Fark ise eklemeli sıralama en küçük elemanı seçip onu yerine koymaz; eklemeli sıralama zaten sıralanmış olanın sağındaki bir sonraki elemanı seçer. Daha sonra ekleme yapacağı doğru yeri bulana kadar her daha büyük elemanı ileri kaydırır. Görsel olarak, şuna benzer: Eklemeli sıralama listeyi iki bölüme ayırır; "sıralanmış" yarısı ve "sıralanmamış" yarısı. Dış döngünün her bir devrinde, algoritma bir sonraki sıralanmamış elemanı alır ve onu listede gerekli araya ekler. Alttaki kodta, keyPos listenin sıralanmış ve sıralanmamış kısımları arasındaki sınırı işaretler. Algoritma scanPos değişkenini kullanarak keyPos'un solunu tarar. Eklemeli sıralamada scanPos'un artmak yerine azaldığına dikkat edin. keyValue'den büyük her hücre konumu bit yöne taşınır(sağa doğru). Döngü keyValue'den daha küçük bir konum bulduğunda, durur ve keyValue değerini onun soluna koyar. Bir eklemeli sıralamada dış döngü $n$ kez çalışacaktır. İç döngü eğer döngü rastgele karıştırıldıysa ortalama $n/2$ kez çalışacaktır. Eğer döngü sıralanmış bir döngüye zaten yakın durumdaysa, iç döngü pek fazla çalışmaz ve sıralama zamanı $n$'e daha yakındır. def insertion_sort(list): # İkinci elemandan başla (konum 1). # Bu elemanı kullanarak listeye # ekleme yap. for keyPos in range(1, len(list)): # Eklenecek elemanın değerini al keyValue = list[keyPos] # Sol tarafa doğru tara scanPos = keyPos - 1 # Her elemana döngü kur, konuma # ulaşana kadar onları kaydır while (scanPos >=0) and (list[scanPos] > keyValue): list[scanPos+1] = list[scanPos] scanPos = scanPos - 1 # Her şey yoldan dışarı taşındı, keyValue # değerini doğru konuma ekle list[scanPos+1] = keyValue 18.4 Tekrar Bu sorular çalışma kağıdı olarak da aynı şekilde indirilebilir: [docx] [doc] [pdf] Çalışma kağıdını tamamladıktan sonra, ne kadar iyi yaptığınızı cevap kağıdına bakarak kontrol edebilirsiniz. Cevap anahtarı buradan indirilebilir: [docx] [doc] [pdf] Çalışma kağıdındaki cevapların tam açıklamasını içeren bir video [buradan] görüntülenebilir. - Yatay bir satıra on adet yıldız (*) yazdıran bir "for" döngüsü yazın. - 10x10 yıldız kutusu yazdıran iki iç içe for döngüsü yazın. - 100 sıfırdan bir dizi oluşturan Python kodu yazın. - Bir sınıf ve nesne arasındaki fark nedir? - Fonksiyon ile metot arasındaki fark nedir? - Uğurlu sayınızı yazdıran bir fonksiyon yazın. - Uğurlu sayınızı yazdıran fonksiyonu çağırın. - Üç sayı alan ve ortalamasını döndüren bir fonksiyon yazın. - Programlama sınıfları: - Top isimli bir sınıf için kod yazın. pozisyon ve hız niteliklerini verin. - update() isimli, topun hızına göre konumunu ayarlayacak bir metot oluşturun. - Ball sınıfının bir örneğini oluşturup niteliklerini ayarlayın. - Create a for loop that will call the update() method on ball 10 times, and print the ball's position. Top için update() metodunu 10 kere çağıracak ve topun konumunu ekrana yazdıran bir for döngüsü oluşturun. - 25 ile 40'ın yerlerini değiştiren kod yazın. - 2 ile 25'in yerlerini değiştiren kod yazın. - Alttaki kod neden çalışmaz? - Alttaki sayı listesinin nasıl sıralandığını seçmeli sıralamayı kullanarak gösterin: - Alttaki sayı listesinin nasıl sıralandığını seçmeli sıralamayı kullanarak gösterin: - Alttaki sayı listesinin nasıl sıralandığını eklemeli sıralamayı kullanarak gösterin: - Alttaki sayı listesinin nasıl sıralandığını eklemeli sıralamayı kullanarak gösterin: - Seçmeli sıralamada minPos'un ne yaptığını açıklayın. - Seçmeli sıralamada curPos'un ne yaptığını açıklayın. - Seçmeli sıralamada scanPos'un ne yaptığını açıklayın. - Eklemeli sıralamada keyPos ve keyValue değişkenlerinin ne olduğunu açıklayın. - scanPos'un eklemeli sıralamada olmasını açıklayın. - Sıralamaları iç döngünün ve dış döngünün kaç kez çalıştığını ekrana yazdıracak şekilde değiştirin. 18.4.1 Önceki Bölümler 18.4.2 Sıralama Bölümü You are not logged in. Log in here and track your progress. English version by Paul Vincent Craven Russian version by Vladimir Slav Turkish version by Güray Yildirim Dutch version by Frank Waegeman Portuguese version by Tati Carvalho