http___programarcadegames.com_index.php_lang_tr_chapter_libraries_2.xml
1.1 2.1 3.1 3.2 3.3 4.1 4.2 4.3 5.1 5.2 5.3 5.4 6.1 6.2 6.3 7.1 8.1 9.1 10.1 11.1 12.1 12.2 12.3 12.4 13.1 13.2 13.3 13.4 13.5 14.1 14.2 14.3 14.4 15.1 16.1 16.2 17.1 17.2 18.1 18.2 18.3 18.4 19.1 19.2 19.3 20.1 20.2 20.3 21.1 22.1 23.1 23.2 23.3 24.1 25.1 25.2 25.3 25.4 26.1 27.1 27.2 28.1 29.1 29.2 29.3 29.4 30.1 31.1 32.1 32.2 32.3 32.4 33.1 34.1 34.2 34.3 34.4 34.5 34.6 35.1 36.1 36.2 36.3 36.4 37.1 38.1 39.1 40.1 41.1 41.2 42.1 43.1 44.1 45.1 46.1 47.1 48.1 49.1 50.1 51.1 52.1 53.1 53.2 54.1 55.1 55.2 56.1 56.2 57.1 58.1 59.1 60.1 60.2 61.1 61.2 61.3 62.1 63.1 64.1 64.2 65.1 66.1 66.2 66.3 67.1 67.2 68.1 68.2 68.3 69.1 69.2 69.3 70.1 71.1 71.2 72.1 73.1 74.1 75.1 76.1 76.2 77.1 77.2 78.1 79.1 79.2 80.1 81.1 81.2 82.1 82.2 83.1 83.2 84.1 85.1 85.2 85.3 86.1 87.1 87.2 87.3 87.4 87.5 88.1 89.1 90.1 90.2 91.1 92.1 93.1 94.1 95.1 96.1 98.1 99.1 99.2 100.1 101.1 102.1 103.1 104.1 105.1 106.1 107.1 108.1 109.1 110.1
Program Arcade GamesWith Python And Pygame Chapter 14: Libraries and Modules A library is a collection of code for functions and classes. Often, these libraries are written by someone else and brought into the project so that the programmer does not have to “reinvent the wheel.” In Python the term used to describe a library of code is module. By using import pygame and import random, the programs created so far have already used modules. A library can be made up of multiple modules that can be imported. Often a library only has one module, so these words can sometimes be used interchangeably. Modules are often organized into groups of similar functionality. In this class programs have already used functions from the math module, the random module, and the pygame library. Modules can be organized so that individual modules contain other modules. For example, the pygame module contains submodules for pygame.draw, pygame.image, and pygame.mouse. Modules are not loaded unless the program asks them to. This saves time and computer memory. This chapter shows how to create a module, and how to import and use that module. 14.1 Why Create a Library? There are three major reasons for a programmer to create his or her own libraries: - It breaks the code into smaller, easier to use parts. - It allows multiple people to work on a program at the same time. - The code written can be easily shared with other programmers. Some of the programs already created in this book have started to get rather long. By separating a large program into several smaller programs, it is easier to manage the code. For example, in the prior chapter's sprite example, a programmer could move the sprite class into a separate file. In a complex program, each sprite might be contained in its own file. If multiple programmers work on the same project, it is nearly impossible to do so if all the code is in one file. However, by breaking the program into multiple pieces, it becomes easier. One programmer could work on developing an “Orc” sprite class. Another programmer could work on the “Goblin” sprite class. Since the sprites are in separate files, the programmers do not run into conflict. Modern programmers rarely build programs from scratch. Often programs are built from parts of other programs that share the same functionality. If one programmer creates code that can handle a mortgage application form, that code will ideally go into a library. Then any other program that needs to manage a mortgage application form at that bank can call on that library. 14.2 Creating Your Own Module/Library File: In this example we will break apart a short program into multiple files. Here we have a function in a file named test.py, and a call to that function: # Foo function def foo(): print("foo!") # Foo call foo() Yes, this program is not too long to be in one file. But if both the function and the main program code were long, it would be different. If we had several functions, each 100 lines long, it would be time consuming to manage that large of a file. But for this example we will keep the code short for clarity. We can move the foo function out of this file. Then this file would be left with only the main program code. (In this example there is no reason to separate them, aside from learning how to do so.) To do this, create a new file and copy the foo function into it. Save the new file with the name my_functions.py. The file must be saved to the same directory as test.py. # Foo function def foo(): print("foo!") # Foo call that doesn't work foo() Unfortunately it isn't as simple as this. The file test.py does not know to go and look at the my_functions.py file and import it. We have to add the command to import it: # Import the my_functions.py file import my_functions # Foo call that still doesn't work foo() That still doesn't work. What are we missing? Just like when we import pygame, we have to put the package name in front of the function. Like this: # Import the my_functions.py file import my_functions # Foo call that does work my_functions.foo() This works because my_functions. is prepended to the function call. 14.3 Namespace A program might have two library files that need to be used. What if the libraries had functions that were named the same? What if there were two functions named print_report, one that printed grades, and one that printed an account statement? For instance: def print_report(): print("Student Grade Report:" ) def print_report(): print("Financial Report:" ) How do you get a program to specify which function to call? Well, that is pretty easy. You specify the namespace. The namespace is the work that appears before the function name in the code below: import student_functions import financial_functions student_functions.print_report() financial_functions.print_report() So now we can see why this might be needed. But what if you don't have name collisions? Typing in a namespace each and every time can be tiresome. You can get around this by importing the library into the local namespace. The local namespace is a list of functions, variables, and classes that you don't have to prepend with a namespace. Going back to the foo example, let's remove the original import and replace it with a new type of import: # import foo from my_functions import * foo() This works even without my_functions. prepended to the function call. The asterisk is a wildcard that will import all functions from my_functions. A programmer could import individual ones if desired by specifying the function name. 14.4 Third Party Libraries When working with Python, it is possible to use many libraries that are built into Python. Take a look at all the libraries that are available here: http://docs.python.org/3/py-modindex.html It is possible to download and install other libraries. There are libraries that work with the web, complex numbers, databases, and more. - Pygame: The library used to create games. http://www.pygame.org/docs/ - wxPython: Create GUI programs, with windows, menus, and more. http://www.wxpython.org/ - pydot: Generate complex directed and non-directed graphs http://code.google.com/p/pydot/ - NumPy: Sophisticated library for working with matrices. http://numpy.scipy.org/ A wonderful list of Python libraries and links to installers for them is available here: http://www.lfd.uci.edu/~gohlke/pythonlibs/ Going through lists of libraries that are available can help you brainstorm what types of programs you can create. Most programming involves assembling large parts, rather than writing everything from scratch. 14.4.1 Examples: OpenPyXL Library This example uses a library called OpenPyXL to write an Excel file. It is also easy to read from an Excel file. You can install OpenPyXL from the Windows command prompt by typing pip install openpyxl. If you are on the Mac or a Linux machine, you can type pip3 install openpyxl. """ Example using OpenPyXL to create an Excel worksheet """ from openpyxl import Workbook import random # Create an Excel workbook wb = Workbook() # Grab the active worksheet ws = wb.active # Data can be assigned directly to cells ws['A1'] = "This is a test" # Rows can also be appended for i in range(200): ws.append([random.randrange(1000)]) # Save the file wb.save("sample.xlsx") 14.4.2 Examples: Beautiful Soup Library This example grabs information off a web page. You can install Beautiful Soup from the Windows command prompt by typing pip install bs4. If you are on the Mac or a Linux machine, you can type pip3 install bs4. """ Example showing how to read in from a web page """ from bs4 import BeautifulSoup import urllib.request # Read in the file url= "http://www.espnfc.com/spi/rankings/_/view/fifa/teamId/203/mexico?cc=5901" page = urllib.request.urlopen(url) soup = BeautifulSoup(page.read(), "html.parser") # Find the table with the data rank = soup.find("table").tbody # Get a list of rows in the table rows = rank.findAll("tr") # Loop through each row for row in rows: # Get a list of cells in the row cells = row.findAll("td") # Loop through each cell for cell in cells: print(cell.text, end=", ") # Ok, done with that row. Print a blank line so we go to the next. print() 14.4.3 Examples: Matplotlib Library Here is an example of what you can do with the third party library “Matplotlib.” You can install Matplotlib from the Windows command prompt by typing pip install matplotlib. If you are on the Mac or a Linux machine, you can type pip3 install matplotlib. To start with, here is the code to create a simple line chart with four values: """ Line chart with four values. The x-axis defaults to start at zero. """ import matplotlib.pyplot as plt y = [1, 3, 8, 4] plt.plot(y) plt.ylabel('Element Value') plt.xlabel('Element Number') plt.show() Note that you can zoom in, pan, and save the graph. You can even save the graph in vector formats like ps and svg that import into documents without loss of quality like raster graphics would have. The x value for Example 1, Figure 14.1 defaults to start at zero. You can change this default and specify your own x values to go with the y values. See Example 2 below. """ Line chart with four values. The x-axis values are specified as well. """ import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 3, 8, 4] plt.plot(x, y) plt.ylabel('Element Value') plt.xlabel('Element') plt.show() It is trivial to add another data series to the graph. """ This example shows graphing two different series on the same graph. """ import matplotlib.pyplot as plt x = [1, 2, 3, 4] y1 = [1, 3, 8, 4] y2 = [2, 2, 3, 3] plt.plot(x, y1) plt.plot(x, y2) plt.ylabel('Element Value') plt.xlabel('Element') plt.show() You can add a legend to the graph: import matplotlib.pyplot as plt x = [1, 2, 3, 4] y1 = [1, 3, 8, 4] y2 = [2, 2, 3, 3] plt.plot(x, y1, label = "Series 1") plt.plot(x, y2, label = "Series 2") legend = plt.legend(loc='upper center', shadow=True, fontsize='x-large') legend.get_frame().set_facecolor('#00FFCC') plt.ylabel('Element Value') plt.xlabel('Element') plt.show() You can add annotations to a graph: """ Annotating a graph """ import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 3, 8, 4] plt.annotate('Here', xy = (2, 3), xycoords = 'data', xytext = (-40, 20), textcoords = 'offset points', arrowprops = dict(arrowstyle="->", connectionstyle="arc,angleA=0,armA=30,rad=10"), ) plt.plot(x, y) plt.ylabel('Element Value') plt.xlabel('Element') plt.show() Don't like the default lines styles for the graph? That can be changed by adding a third parameter to the plot command. """ This shows how to set line style and markers. """ import matplotlib.pyplot as plt x = [1, 2, 3, 4] y1 = [1, 3, 8, 4] y2 = [2, 2, 3, 3] # First character: Line style # One of '-', '--', '-.', ':', 'None', ' ', ” # Second character: color # http://matplotlib.org/1.4.2/api/colors_api.html # Third character: marker shape # http://matplotlib.org/1.4.2/api/markers_api.html plt.plot(x, y1, '-ro') plt.plot(x, y2, '--g^') plt.ylabel('Element Value') plt.xlabel('Element') plt.show() A bar chart is as easy as changing plot to bar. """ How to do a bar chart. """ import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 3, 8, 4] plt.bar(x, y) plt.ylabel('Element Value') plt.xlabel('Element') plt.show() You can add labels to axis values. """ How to add x axis value labels. """ import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 3, 8, 4] plt.plot(x, y) labels = ['Frogs', 'Hogs', 'Bogs', 'Slogs'] plt.xticks(x, labels) plt.ylabel('Element Value') plt.xlabel('Element') plt.show() You can graph functions as well. This uses a different package called numpy to graph a sine function. """ Using the numpy package to graph a function over a range of values. """ import numpy import matplotlib.pyplot as plt x = numpy.arange(0.0, 2.0, 0.001) y = numpy.sin(2 * numpy.pi * x) plt.plot(x, y) plt.ylabel('Element Value') plt.xlabel('Element') plt.show() You can fill in a graph if you like. """ Using 'fill' to fill in a graph """ import numpy import matplotlib.pyplot as plt x = numpy.arange(0.0, 2.0, 0.001) y = numpy.sin(2 * numpy.pi * x) plt.plot(x, y) # 'b' means blue. 'alpha' is the transparency. plt.fill(x, y, 'b', alpha=0.3) plt.ylabel('Element Value') plt.xlabel('Element') plt.show() Create a pie chart. """ Create a pie chart """ import matplotlib.pyplot as plt # Labels for the pie chart labels = ['C', 'Java', 'Objective-C', 'C++', 'C#', 'PHP', 'Python'] # Sizes for each label. We use this to make a percent sizes = [17, 14, 9, 6, 5, 3, 2.5] # For list of colors, see: # https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/colors.py colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral', 'darkcyan', 'darksage', 'rosybrown'] # How far out to pull a slice. Normally zero. explode = (0, 0.0, 0, 0, 0, 0, 0.2) # Set aspect ratio to be equal so that pie is drawn as a circle. plt.axis('equal') # Finally, plot the chart plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90) plt.show() You can do really fancy things, like pull stock data from the web and create a candlestick graph for Apple Computer: """ Create a candlestick chart for a stock """ import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter, WeekdayLocator,\ DayLocator, MONDAY from matplotlib.finance import quotes_historical_yahoo_ohlc, candlestick_ohlc # Grab the stock data between these dates date1 = (2014, 10, 13) date2 = (2014, 11, 13) # Go to the web and pull the stock info quotes = quotes_historical_yahoo_ohlc('AAPL', date1, date2) if len(quotes) == 0: raise SystemExit # Set up the graph fig, ax = plt.subplots() fig.subplots_adjust(bottom=0.2) # Major ticks on Mondays mondays = WeekdayLocator(MONDAY) ax.xaxis.set_major_locator(mondays) # Minor ticks on all days alldays = DayLocator() ax.xaxis.set_minor_locator(alldays) # Format the days weekFormatter = DateFormatter('%b %d') # e.g., Jan 12 ax.xaxis.set_major_formatter(weekFormatter) ax.xaxis_date() candlestick_ohlc(ax, quotes, width=0.6) ax.autoscale_view() plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right') plt.show() There are many more things that can be done with matplotlib. Take a look at the thumbnail gallery: http://matplotlib.org/gallery.html 14.5 Review 14.5.1 Multiple Choice Quiz Click here for a multiple-choice quiz. 14.5.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 10.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 53.1 54.1 55.1 56.1 57.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 76.1 77.1 78.1
Arcade Türü Oyun Programlamayıve Bilgisayar Bilimleri Öğrenin English Dutch - Nederlands French Hungarian - Magyar Portuguese - Português Russian - Pycckий Spanish - Español Turkish - Türkçe Chapter 15: Kütüphaneler ve Modüller Kütüphane, fonksiyon ve sınıfların toplanmış kodlarına denir. Çoğu kez, bu kütüphaneler farklı kişiler tarafından yazılır ve programcının "tekerleği yeniden icat etmemesi" için projeye dahil edilir. Python'da, kod kütüphanesini tarif etmek için kullanılan terim modül'dür. import pygame ve import random'un kullanılmasıyla, programlar şu ana kadar zaten modülleri kullandı. Bir kütüphane import edilebilen birden çok modül içerebilir. Çoğu kez bir kütüphane sadece bir modüle sahiptir, yani bu kelimeler bazen birbirlerinin yerine kullanılabilir. Modüller sık sık benzer işlevi olanlara göre gruplara yerleştirilirler. Bu derste, programlar zaten math modülünden, random modülünden ve pygame kütüphanesinden fonksiyonlar kullandılar. Modüller tek başlarına başka modülleri içerecek şekilde düzenlenebilirler. Örneğin, pygame modülü pygame.draw, pygame.image ve pygame.mouse alt modüllerini içerir. Modüller program onlardan istemedikçe yüklenmezler. Bu, zaman ve bilgisayar hafızasından alan sağlar. Bu bölüm nasıl bir modül oluşturulacağını, ve bu modülün nasıl import edileceği ile kullanımını gösterecek. 15.1 Neden bir kütüphane oluşturulmalıdır? Bir programcı için kendi kütüphanesini oluşturmasına neden olacak üç ana sebep vardır: - Kodu küçük ve kullanımı kolay bölümlere ayırır. - Aynı anda birden çok insanın bir program üzerinde çalışmasına izin verir. - Yazılan kod kolayca diğer programcılarla paylaşılabilir. Bu kitapta oluşturulan bazı programlar zaten oldukça uzun hale gelmeye başladılar. Geniş bir programı birkaç ufak programa bölerek kodun yönetimi kolaylaştırılabilir. Örneğin, önceki bölümde yer alan sprite örneğinde, programcı sprite sınıfını ayrı bir dosyaya aktarabilirdi. Karmaşık bir programda, her sprite kendi dosyasında barındırılabilir. Birden çok programcı aynı proje üzerinde çalışıyorsa, tüm kodu tek bir dosyadayken bunu yapmak neredeyse imkansızdır. Ancak, programı birden çok parçaya bölerek, bu daha kolaylaşır. Bir programcı "Yaratık" sprite sınıfını geliştirir. Başka bir programcı "Gulyabani" sprite sınıfını geliştirir. Spritelar ayrı dosyalarda olduğu için, programcılar uyumsuzlukla karşılaşmazlar. Modern programcılar programları nadiren başlangıçtan itibaren yaparlar. Çoğu kez programlar aynı işlevselliği paylaşan başka programların bölümlerinden yapılır. Bir programcı mortgage başvuru formuyla uğraşacak bir kod oluşturuyorsa, bu kod ideal olarak bir kütüphaneye gider. Daha sonra mortgage başvuru formunu yönetme ihtiyacı duyan herhangi bir başka program onu bu kütüphaneden çağırabilir. 15.2 Kendi modül/kütüphane dosyanızı oluşturun Bazı programlar bir dosyada yönetilmek için çok uzun bir hal alabilir. Bu programları yönetilebilir tutmak için tek yol onları farklı dosyalara bölmektir. Alttaki örneğe bakın: # Foo fonksiyonu def foo(): print ("foo!") # Foo'yu çağır foo() Evet, bu program tek bir dosyada bulunmak için çok uzun değil. Fakat hem fonksiyon hem de ana program uzun olsaydı, durum farklı olurdu. Özellikle birkaç fonksiyon olsaydı. Bu örnek için, açık bir şekilde anlatabilmek için örneği kısa tutacağız. foo fonksiyonunu bu dosyanın dışına taşıyabiliriz. Daha sonra bu dosya sadece ana program kodundan ibaret olacaktır. (Bu örnekte, nasıl yapılacağını öğrenmekten başka onları ayırmak için hiçbir sebep yoktur.) Bunu yapabilmek için, yeni bir dosya oluşturun ve foo fonksiyonunu onun içine kopyalayın. Yeni dosyayı my_functions.py adıyla kaydedin. # Foo fonksiyonu def foo(): print ("foo!") # Çalışmayan foo fonksiyonu çağırılması foo() Ne yazık ki olay bu kadar basit değil. Test.py dosyası my_functions.py dosyasına gidip bakacağını ve onu import edeceğini bilmiyor. Biz onu import etmeliyiz: # my_functions.py dosyasını import et import my_functions # Foo fonksiyonunun çağırılması hala çalışmıyor foo() Bu hala çalışmıyor. Kaçırdığımız şey ne? Tıpkı pygame'i import ederken yaptığımız gibi, fonksiyonun önüne paket adını koymak zorundayız. Şunun gibi: # my_functions.py dosyasını import et import my_functions # Foo fonksiyonunun çağırılması çalışıyor my_functions.foo() Bu my_functions fonksiyon çağırılmasının başına eklendiği için çalışır. 15.3 İsim Alanı (Namespace) Bir program kullanımına ihtiyaç duyulacak iki kütüphane dosyasına sahip olabilir. Peki eğer kütüphaneler aynı isimde fonksiyonlara sahipse? Mesela: def print_report(): print ("Öğrenci Not Raporu:" ) def print_report(): print ("Finansal Rapor:" ) Programa hangi fonksiyonu çağıracağını nasıl belirteceksiniz? Güzel, bu oldukça kolay. “namespace”i (isim alanını) belirteceksiniz. Namespace fonksiyon alttaki kodta fonksiyon isminden önce etkili olmuştur: import student_functions import financial_functions student_functions.print_report() financial_functions.print_report() Sonuç olarak şu an buna neden ihtiyaç duyulacağını görüyoruz. Fakat eğer siz isim çakışmaları yaşamayacaksanız ne olacak? Her namespace'i her seferinde yazmak yorucu olabilir. Kütüphaneyi "yerel isim alanına" (local namespace) import ederek bundan kurtulabilirsiniz. Yerel isim alanı bir isim alanı ile belirtmediğiniz fonksiyonların, değişkenlerin ve sınıfların listesidir. foo örneğine dönüo, orijinal import'u kaldıralım ve onu yeni import türüyle değiştirelim: # import foo from my_functions import * foo() Bu fonksiyon çağırmaların başına my_functions. eklenmeden bile çalışıyor. Bu yıldız my_functions'tan bütün fonksiyonları import edecek bir genel arama karakteridir. Programcı istese bunlardan istediklerini teker teker fonksiyon ismini belirterek import edebilirdi. 15.4 Üçüncü Parti Kütüphaneler Python ile çalışırken, Python'a gömülü gelen çok sayıda kütüphaneyi kullanmak mümkündür. Burda mevcut bütün kütüphaneler yer alıyor, biz göz atın: http://docs.python.org/modindex.html Başka kütüphaneleri indirmek ve yüklemek mümkündür. Web ile, karmaşık sayılarla, veritabanlarıyla ve daha fazlasıyla çalışan kütüphaneler vardır. - Pygame: Oyun yapmak için kullanılan kütüphane. http://www.pygame.org/docs/ - wxPython: Pencereler, menüler ve daha fazlasıyla GUI programları oluşturmak için. http://www.wxpython.org/ - pydot: Karmaşık yönlü veya yönsüz grafikler oluşturur http://code.google.com/p/pydot/ - NumPy: Matrislerle çalışmak için gelişmiş modül. http://numpy.scipy.org/ 15.5 Tekrar Sınıflar, kütüphaneler ve modüller hakkındaki bu çalışma kağıdını doldurmaya çalışın: classes_libraries_and_modules_worksheet.docx (MS Word 2007+) classes_libraries_and_modules_worksheet.doc (MS Word before 2003) classes_libraries_and_modules_worksheet.pdf (PDF) - Python kütüphanesi nedir? Python modülü nedir? - Programcının kendi kütüphane dosyasını oluşturması için olan sebeplerden birkaçı nelerdir? - Kütüphane dosyalarını import etmek için Python'da iki yol vardır. - Her birine birer örnek verin. - Kütüphanenin import edilme şekline göre fonksiyonların ve sınıfların çağırılması nasıl değişir? - Kütüphane dosyaları farklı kütüphane dosyalarını import edebilir mi? - İlk olarak, kodu kağıda yazmayı deneyin. Daha sonra bilgisayara yazın. - Tür ve vurma puanları niteliklerine sahip bir Canavar() sınıfı oluşturun. Canavarın türünü ve kaç kez vurduğunu ekrana yazdıran bir yazdir() metodu oluşturun. - "Yaratik" ve "Gulyabani" isimli alt sınıfları oluşturun. "Yaratik" veya "Gulyabani" için tür değerini atayan __init__ bir fonksiyonu oluşturun. Ayrıca, Gulyabani için vurma sayısını 5-10 arası rastgele bir sayı ve Yaratik için 15-30 arasında rastgele bir sayı olarak belirleyin. - Canavarların bir listesini oluşturun ve listeye birkaç yaratık ve gulyabani ekleyin. Daha sonra yazdir() metodunu listedeki her öğe için çağırın. - Bir önceki labda yer alan programı alın. Onun bir kopyasını yapın. Sınıfları ve fonksiyonları başka bir dosyaya ayırın. You are not logged in. Log in here and track your progress.Copyright © 2015 English version by Paul Vincent Craven Spanish version by Antonio Rodríguez 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 French version by Franco Rossi