Lectures OOP Python

Download as pdf or txt
Download as pdf or txt
You are on page 1of 22

OOP Python LABs

Instructor: Ngolah Kenneth Tim

Lecture 1

Setting Up Your Programming Environment

Python Versions: 3.6 and above

Text editor: Sublime Text Editor

Installing Python

Running Python in a Terminal Session


Open a command window and enter python in lowercase. You should see
a Python prompt (>>>), which means Windows has found the version of
Python you just installed.
2. Locate your code and run (e.g. x.py)

C:\>cd Desktop\python_work
C:\Desktop\python_work>dir
hello_world.py
C:\Desktop\python_work>python hello_world.py or C:\Desktop\python_work>python
hello_world.py
Hello Python world!

Installing Sublime Text

DOS Commands of Windows os

• Operating system commands

– Internal and external DOS Commands

1|Page
– BIOS and CMOS commands (e.g F2 for Dell, F10 for compaq, Esc+F1 for IBM

• Commands to:

– Check content of a document:DIR

– Change directory:CD

– Check date:DATE

– Clear command prompt screen:CLS

– Make directory:MD, mkdir

– Check time:TIME

– Check the version of windows:VER

– Check disk space:VOL,

– Exit the command prompt: EXIT

– To create a text file: copy con X.x(good for win10) where X is file name and x is extension,
edit X.x, star X.x or echo xxxxx>X.x(good for win 7)

Where xxxxx is the content of file

– To open a file: X.x

– To edit a file: edit X.x

– To close text file: ctrl+c

– To unhide a file: attrib -r– h –s /s /d

– To hide a file: atrrib +r+h +s /s /d

– Moving back a directory:cd.., cd\, cd\windows

– Switch to a drive e.g F: F:

– Remove a directory: RMDIR

– Delete file: del *

– Rename: rencomand

Running a program: X.x

Slash (/) commands

• Dir/p: lists one screen at a time

• Dir/w: presents information using wide format where details are omitted and files and folders are
listed in columns on the screen

• Dir/s: include sub folders


2|Page
• Copy/A: Only copy files with archive attribute on

• Copy/V: Size of each new file is compared to the size of the original file

• Copy/Y: Confirmation message does not appear to confirm before overwriting

• Xcopy/S: Include sub directories

• Xcopy/C: Keep copying even with errors

• Wild card caracters: ? For one character and * for one or more characters

• Copy command:

• copy c:\myfile.txt d: copy the file "myfile.txt" on the C: drive to the d: drive.

• copy *.txt e: copy all text files in the current directory to the E: drive.

• copy f:\example.xls: copy the file "example.xls" on the F: drive to the current directory.

• Graphics:

• jpeg: Joint Photographic Expert Group

• Tiff: Tag Image File Format

• Gif: Graphics Interchange Format

• Png: Portable Network graphics

• Sounds

• Wav: Audio format for windows

• Mp3: MPEG-1 audio layer 3

• Mp4: MPEG-1 audio layer 4

• Videos

• Avi: Audio/Video Interleaved

• Mpeg: Moving Picture and video compression

• Documents

• .txt: text file

• .doc: word 2003 file

• .docx: word 2007 file

• .xls: excel 2003 file

• .xlsx: excel 2007 file

• .ppt, .pptx: power point files


3|Page
• .accdb: access file

• .pub: publisher file

• .pdf: portable document format file

• Hypermedia

• .html: hypertext markup language

• .xml : extended markup language

• .exe: executable file

Shell scripting

• Shell is a command line interpreter (CLI)

• Other command lines interfaces for unix are sh and bash

• Unix simple commands

– Pwd: print working directory(goes to current directory

– Ls: listing (to see what is in the current directory)

• Ls-f:shows directories with trailing slash

• Ls-a:shows all files and directories including those whose names begin with a . (dot)

• Ls-t:shows new files

Creating files and directories

 Mkdir:creates a directory (mkdir has no output)

 Cd: change directory

 Cd /: go to root directory

 Cd..:go back to one directory level

 cd-:go to previous directory

 Cd~:go to home directory

 To navigate to multiple directories: cd /x/y/z or cd~/desktop

• Mv: moves a file to a different location

• Rm:removes or deletes a file

• Rmdir:deletes an empty directory

• Rm-r: removes directory with content

• Sudo: used to perform file operation on root

• Clear:clears the screen

4|Page
• Cp:copies files and directories

• Echo:print arguments

• Passwd:change password

Wild Cards

?: matches any single character

??: matches any double character

*.doc: matches any word document

Shell Environment Variables

• Use upper case

• Get a particular variable’s value by putting a $ in front of its name

– $SET: gives command listing

– $HOME: gives the current user’s home directory

• Important shell environment variables

– Name Typical value meaning

– HOME /home/ngolah users home dir

– HOSTNAME ―hibmat‖ computer name

– OS Windows_7 running OS

– PATH /home/ngolah/bin:/user/local/bin:/python 24/

– PWD /home/ngolah/swc/lec present working directory

– SHELL /bin/bash what shell is being used

– USER ngolah the current user ID

There are a couple of methods:

• If you're running Unity: open the dash, type terminal, hit Return.

• If you're on the old style menus, Applications → Accessories → Terminal.

• Control + Alt + T.

• Alt + F2, gnome-terminal, Return.

• For a TTY: Control + Alt + F1..7.

5|Page
Tools

 Python — a programming language

 Tweepy — a type of RESTful API specifically for Twitter

 Textblob — processed textual data library tool (already trained on numerous textual data.)

 Pandas — data manipulation and analysis library

 NumPy — scientific computing library

 Matplotlib — plotting library

 Plotly — plotting library

 Seaborn — Data visualization library based on Matplotlib

 Wordcloud — library for a visual representation of textual data

Lecture 2

Basic Syntaxsyntax

1.Output= print("Hello Python world!") OR print"Hello, Python!"

2. Python Identifiers = same as in C


3. Reserved Words
and exec not

assert finally or

break for pass

class from print

continue global raise

6|Page
def if return

del import try

elif in while

else is with

except lambda yield

4. Lines and Indentation = Python is strict on indentation e.g


if True:
print "True"
else:
print "False"

5. Quotation in Python
Python accepts single ('), double (") and triple (''' or """) quotes to denote string literals, as long as the
same type of quote starts and ends the string.

The triple quotes are used to span the string across multiple lines. For example, all the following are
legal −

6. Comments in Python
A hash sign (#) that is not inside a string literal begins a comment. All characters after the # and up to the
end of the physical line are part of the comment and the Python interpreter ignores them

7. Multiple Statements on a Single Line


The semicolon ( ; ) allows multiple statements on the single line given that neither statement starts a new
code block
8. Assigning Values to Variables
Python variables do not need explicit declaration to reserve memory space

9. Multiple Assignmente.g
a,b,c = 1,2,"john"

10. Standard Data Types

A) Numbers
var1 = 1
var2 = 10

Number Type Conversion


7|Page
 Type int(x) to convert x to a plain integer.

 Type long(x) to convert x to a long integer.

 Type float(x) to convert x to a floating-point number.

 Type complex(x) to convert x to a complex number with real part x and imaginary part zero.

 Type complex(x, y) to convert x and y to a complex number with real part x and imaginary part
y. x and y are numeric expressions

B) String
Strings in Python are identified as a contiguous set of characters represented in the quotation
marks. Python allows for either pairs of single or double quotes. Subsets of strings can be taken
using the slice operator ([ ] and [:] ) with indexes starting at 0 in the beginning of the string and
working their way from -1 at the end.
The plus (+) sign is the string concatenation operator and the asterisk (*) is the repetition
operator.

str='Hello World!'

printstr# Prints complete string

printstr[0]# Prints first character of the string

printstr[2:5]# Prints characters starting from 3rd to 5th

printstr[2:]# Prints string starting from 3rd character

printstr*2# Prints string two times

printstr+"TEST"# Prints concatenated string

String Formatting Operator


Live Demo
Here is the list of complete set of symbols which can be used along with % −

Format Symbol Conversion

%c character

%s string conversion via str() prior to formatting

%i signed decimal integer

8|Page
%d signed decimal integer

%u unsigned decimal integer

%o octal integer

%x hexadecimal integer (lowercase letters)

%X hexadecimal integer (UPPERcase letters)

%e exponential notation (with lowercase 'e')

%E exponential notation (with UPPERcase 'E')

%f floating point real number

%g the shorter of %f and %e

%G the shorter of %f and %E

C) List

Lists are the most versatile of Python's compound data types. A list contains items separated by
commas and enclosed within square brackets ([]). To some extent, lists are similar to arrays in C.
One difference between them is that all the items belonging to a list can be of different data type

list=['abcd',786,2.23,'john',70.2]

tinylist=[123,'john']

print list # Prints complete list

print list[0]# Prints first element of the list

print list[1:3]# Prints elements starting from 2nd till 3rd

print list[2:]# Prints elements starting from 3rd element

printtinylist*2# Prints list two times

print list +tinylist# Prints concatenated lists

Basic List Operations


Lists respond to the + and * operators much like strings; they mean concatenation and repetition here too,
except that the result is a new list, not a string.
In fact, lists respond to all of the general sequence operations we used on strings in the prior chapter.

9|Page
Python Expression Results Description

len([1, 2, 3]) 3 Length

[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Concatenation

['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] Repetition

3 in [1, 2, 3] True Membership

for x in [1, 2, 3]: print x, 123 Iteration

D) Tuple
A tuple is another sequence data type that is similar to the list. A tuple consists of a number of
values separated by commas. Unlike lists, however, tuples are enclosed within parentheses.
The main differences between lists and tuples are: Lists are enclosed in brackets ( [ ] ) and their
elements and size can be changed, while tuples are enclosed in parentheses ( ( ) ) and cannot be
updated. Tuples can be thought of as read-only lists.

tuple=('abcd',786,2.23,'john',70.2)

tinytuple=(123,'john')

print tuple # Prints complete list

print tuple[0]# Prints first element of the list

print tuple[1:3]# Prints elements starting from 2nd till 3rd

print tuple[2:]# Prints elements starting from 3rd element

printtinytuple*2# Prints list two times

print tuple +tinytuple# Prints concatenated lists

Basic Tuples Operations


Python Expression Results Description

len((1, 2, 3)) 3 Length

(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) Concatenation

10 | P a g e
('Hi!',) * 4 ('Hi!', 'Hi!', 'Hi!', 'Hi!') Repetition

3 in (1, 2, 3) True Membership

for x in (1, 2, 3): print x, 123 Iteration

D) Dictionary
Python's dictionaries are kind of hash table type. They work like associative arrays or hashes
found in Perl and consist of key-value pairs. A dictionary key can be almost any Python type, but
are usually numbers or strings. Values, on the other hand, can be any arbitrary Python object.
Dictionaries are enclosed by curly braces ({ }) and values can be assigned and accessed using
square braces ([]).

dict={}

dict['one']="This is one"

dict[2]="This is two"

tinydict={'name':'john','code':6734,'dept':'sales'}

printdict['one']# Prints value for 'one' key

printdict[2]# Prints value for 2 key

printtinydict# Prints complete dictionary

printtinydict.keys()# Prints all the keys

printtinydict.values()# Prints all the values

Types of Operator = Python uses same operators like c

Python Decision , if statements


If the suite of an if clause consists only of a single line, it may go on the same line as the header
statement.

e.g

var=100

11 | P a g e
if(var==100):print"Value of expression is 100"

print"Good bye!"

Python - Loops = Python uses same loops as c

concatenation: Difference between

full_name = "{} {}".format(first_name, last_name) for <3.5 and full_name = f"{first_name}

{last_name}" >3.5

EXAMPLES

A )STRINGS

example 1
name = "Ada Lovelace"
print(name.upper()) #To change to upper case
print(name.lower()) #To change to lower case
name = "adalovelace"
print(name.title())#To start with capital letter

example 2
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"#To concatenate names
message = f"Hello, {full_name.title()}!"
print(message)

Underscores in Numbers
When you’re writing long numbers, you can group digits using underscores
to make large numbers more readable:

>>>universe_age = 14_000_000_000
Exercise 1
1. Use a variable to represent a person’s name, and print
a message to that person. Your message should be simple, such as, “Hello Eric,
would you like to learn some Python today?”
2. Use a variable to represent a person’s name, and then print
that person’s name in lowercase, uppercase, and title case.

B) LISTS

example 3

12 | P a g e
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())
print(bicycles[1])
print(bicycles[3])

Exercise 2
1. Store the names of a few of your friends in a list called names. Print
each person’s name by accessing each element in the list, one at a time.
2. Start with the list you used in Exercise 1, but instead of just
printing each person’s name, print a message to them. The text of each message
should be the same, but each message should be personalized with theperson’s name.

Modifying elements

example 4
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)

Adding elements

example 5
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)

example 6
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)

INSERTING ELEMENTS

example 7
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)

REMOVING ELTS

example 8
13 | P a g e
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)

example 9
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

example 10
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)

example 11
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print(f"\nA {too_expensive.title()} is too expensive for me.")

SORTING A LIST Pamenantly

example 12
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

example 13
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

SORTING A LIST Temporary

example 14
print("Here is the original list:")
print(cars)
print("\nHere is the sorted list:")
print(sorted(cars))
print("\nHere is the original list again:")
print(cars)

14 | P a g e
PRINTING A LIST IN REVERSE ORDER

example 15
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)

FINDING THE LENGTH OF THE LIST

example 16
cars = ['bmw', 'audi', 'toyota', 'subaru']
len(cars)

Exercise 3
1. Think of at least five places in the world you’d like tovisit.
• Store the locations in a list. Make sure the list is not in alphabetical order.
• Print your list in its original order. Don’t worry about printing the list neatly,
just print it as a raw Python list.
• Use sorted() to print your list in alphabetical order without modifying the
actual list.
• Show that your list is still in its original order by printing it.
• Use sorted() to print your list in reverse alphabetical order without changing
the order of the original list.
• Show that your list is still in its original order by printing it again.
• Use reverse() to change the order of your list. Print the list to show that its
order has changed.
• Use reverse() to change the order of your list again. Print the list to show
it’s back to its original order.
• Use sort() to change your list so it’s stored in alphabetical order. Print the
list to show that its order has been changed.
• Use sort() to change your list so it’s stored in reverse alphabetical order.
Print the list to show that its order has changed.

Lecture 3

Looping Through a List

for loop

magicians = ['alice', 'david', 'carolina']


for magician in magicians: # syntax = for x in y: for cat in cats: e.g for dog in dogs: for item in
list_of_items:
15 | P a g e
print(magician) #indent the block

print(f"{magician.title()}, that was a great trick!") # from 3.6 version

print(f"I can't wait to see your next trick, {magician.title()}.\n")

print("Thank you, everyone. That was a great magic show!") #after the loop

Using the range() Function

for value in range(1, 5): # to print 1 2 3 4. Not the last value in the range is not printed
print(value)

# list of first five numbers

numbers = list(range(1, 6))# to print a list of numbers [1 2 3 4 5]


print(numbers)

#even numbers

even_numbers = list(range(2, 11, 2))# range syntax= range(first, last, increment)


print(even_numbers) # to print even numbers

#sqaure of first 10 numbers

squares = []
for value in range(1, 11):
square = value ** 2
squares.append(square)
print(squares)
OR
squares = []
for value in range(1,11):
squares.append(value**2)
print(squares)
OR
squares = [value**2 for value in range(1, 11)]
print(squares)

#to check max, min etc


digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
min(digits)
max(digits)
sum(digits)

Slicing a List
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3]) #to print from first to third values
print(players[2:])# to print from second and above elt.
print(players[-3:])# to print the last 3 elements. Negative is for last
16 | P a g e
Tuples
dimensions = (200, 50) # Use tuples when you want to store a set of unchangeble values
for dimension in dimensions:
print(dimension)

if Statements

ifconditional_test:
do something

cars = ['audi', 'bmw', 'subaru', 'toyota']


for car in cars:
if car == 'bmw':
print(car.upper())
else:
print(car.title())

banned_users = ['andrew', 'carolina', 'david']


user = 'marie'
if user not in banned_users: # checking if value is not
print(f"{user.title()}, you can post a response if you wish.")

age = 12
if age < 4:
price = 0
elif age < 18:
price = 25
else:
price = 40
print(f"Your admission cost is ${price}.")

#when ifs are independent

requested_toppings = ['mushrooms', 'extra cheese']


if 'mushrooms' in requested_toppings:
print("Adding mushrooms.")
if 'pepperoni' in requested_toppings:
print("Adding pepperoni.")
if 'extra cheese' in requested_toppings:
print("Adding extra cheese.")
print("\nFinished making your pizza!")

Dictionaries

alien_0 = {'color': 'green', 'points': 5} #name={'key':'value'}


print(alien_0['color'])#accessing values
print(alien_0['points'])

17 | P a g e
#adding key value pairs

alien_0 = {'color': 'green', 'points': 5}


print(alien_0)
u alien_0['x_position'] = 0
v alien_0['y_position'] = 25
print(alien_0)

#Modifying values

alien_0 = {'color': 'green'}


print(f"The alien is {alien_0['color']}.")
alien_0['color'] = 'yellow'
print(f"The alien is now {alien_0['color']}.")

#Removing key value pair

alien_0 = {'color': 'green', 'points': 5}


print(alien_0)
del alien_0['points']# this will be removed permanently
print(alien_0)

#If the key does not exist, use get

alien_0 = {'color': 'green', 'speed': 'slow'}


point_value = alien_0.get('points', 'No point value assigned.')
print(point_value)

Exercise: Using the concept of dictionary, create a key value pair that will will document information
about HIBMAT. it should be such that once the key words appear, the information is displayed. e.g

HIBMAT: Higher Institute of Business Management and Technology

President: Mr. Jude ChilakaAnyawu

Rector: Prof Ibrahim Talla

etc.

Program it in such a way that if the keyword is not found, it will ask if you want to add the pair and you
do so.

User Input and while Loops

input() Function

message = input("Tell me something, and I will repeat it back to you: ") #use terminal to run input
functions
print(message)

18 | P a g e
name = input("Please enter your name: ")
print(f"\nHello, {name}!")

Using int() to Accept Numerical Input

height = input("How tall are you, in inches? ")


height = int(height)
if height >= 48:
print("\nYou're tall enough to ride!")
else:
print("\nYou'll be able to ride when you're a little older.")

#to get a number and check if it is even or odd

number = input("Enter a number, and I'll tell you if it's even or odd: ")
number = int(number)
if number % 2 == 0:
print(f"\nThe number {number} is even.")
else:
print(f"\nThe number {number} is odd.")

The while Loop in Action

current_number = 1
whilecurrent_number<= 5:
print(current_number)
current_number += 1

#user chose when to quit

prompt = "\nTell me something, and I will repeat it back to you:"


prompt += "\nEnter 'quit' to end the program. "
User Input and while Loops 119
message = ""
while message != 'quit':
message = input(prompt)
if message != 'quit':
print(message)

#continue loop for odd numbers


current_number = 0
whilecurrent_number< 10:
current_number += 1
ifcurrent_number % 2 == 0:
continue
print(current_number)
#in case of infinite loop, press ctrl-C

19 | P a g e
Functions
defgreet_user(): #define function
"""Display a simple greeting."""
print("Hello!")
greet_user()#call function

#argument and parameters


defdescribe_pet(animal_type, pet_name):
"""Display information about a pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet('hamster', 'harry') # the order matters here
describe_pet('dog', 'willie')

Cl asses
Creating Class
class Dog: #define a class called Dog. By convention, capitalized names refer to classesin Python
"""A simple attempt to model a dog.""" # docstring describing what this class does.
def __init__(self, name, age):
# The __init__() Method, A function that’s part of a class is a method. a special method that Python runs
#automatically whenever we create a new instance. This method has two leading #underscores and two
trailing #underscores
"""Initialize name and age attributes."""
self.name = name #attributes.
self.age = age
def sit(self): #other methods
"""Simulate a dog sitting in response to a command."""
print(f"{self.name} is now sitting.")
defroll_over(self):
"""Simulate rolling over in response to a command."""
print(f"{self.name} rolled over!")
my_dog = Dog('Willie', 6) # instance of a class=object
print(f"My dog's name is {my_dog.name}.") # my_dog.name is to access attribute of an instance, we use
dot notation
print(f"My dog is {my_dog.age} years old.")
my_dog.sit() # calling a method we use dot notation
my_dog.roll_over()

#example Car class


class Car:
def __init__(self, make, model, year):
"""Initialize attributes to describe a car."""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
defget_descriptive_name(self):
"""Return a neatly formatted descriptive name."""
long_name = f"{self.year} {self.manufacturer} {self.model}"
returnlong_name.title()
defread_odometer(self):

20 | P a g e
"""Print a statement showing the car's mileage."""
print(f"This car has {self.odometer_reading} miles on it.")
my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
my_new_car.odometer_reading = 23 #modify attributes
my_new_car.read_odometer()

Inheritance
class Car: #parent class
"""A simple attempt to represent a car."""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
defget_descriptive_name(self):
long_name = f"{self.year} {self.manufacturer} {self.model}"
returnlong_name.title()
defread_odometer(self):
print(f"This car has {self.odometer_reading} miles on it.")
defupdate_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
defincrement_odometer(self, miles):
self.odometer_reading += miles
classElectricCar(Car): #Child class i.e inheritance
"""Represent aspects of a car, specific to electric vehicles."""
def __init__(self, make, model, year):
"""
Initialize attributes of the parent class.
Then initialize attributes specific to an electric car.
"""
super().__init__(make, model, year)
self.battery_size = 75 #attributes for a child class
defdescribe_battery(self):
"""Print a statement describing the battery size."""
print(f"This car has a {self.battery_size}-kWh battery.")
my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()

Importing classes
from car import Car# where car is the file name e.g car.py and Car is the class name
import car # i.e import an entire file
fromelectric_car import ElectricCar as EC# using alias

21 | P a g e
HIBMAT Buea
Python CA:
Lecturer: Mr. Ngolah
Presentation: last class of January
Tasks:
1) Create an app to be used in a newly created snack bar in town. The app should be such
that it takes the number of bottles and calculate the bill. You can optionally make
provision for the printing of the receipt or not.
** check sample below

2) Create an app to be used in HIBMAT as a dictionary. The app should be able to define
the concepts very common in the institution
3) Design a simple game that can be used in software engineering club.
e.g *** a game to guess the right number

22 | P a g e

You might also like