Sunteți pe pagina 1din 13

Ministerul Educaţiei și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei

Departamentul Informatică și Ingineria Sistemelor

Disciplina: “Medii integrate de programare


interactive”

RAPORT
Lucrarea de laborator nr. 1

A efectuat:
st. gr. CR-212
Pirlea Cristian

A verificat: V. Struna

Chişinău – 2023

1
Cuprins
1. Tema: Introducere în limbajul Python................................................................................................3
1.1 Obiective:....................................................................................................................................3
1.2 Cerinte:........................................................................................................................................3
2. Partea practica:....................................................................................................................................4
2.1 Varianta:......................................................................................................................................4
2.2 Codul:..........................................................................................................................................4
2.3 Rezultatele rularii:.......................................................................................................................4
2.4 Concluzie:....................................................................................................................................5
3. Webografie..........................................................................................................................................6

2
1.

3
Cod:
class Stack:
def __init__(self):
self.items = []

def is_empty(self):
return len(self.items) == 0

def push(self, item):


self.items.append(item)

def pop(self):
if not self.is_empty():
return self.items.pop()
else:
print("Stack is empty. Cannot pop.")

def peek(self):
if not self.is_empty():
return self.items[-1]
else:
print("Stack is empty. Cannot peek.")

def size(self):
return len(self.items)

def __str__(self):
return str(self.items)

def save(self, filename):


with open(filename, 'w') as file:
file.write(str(self.items))

def load(self, filename):


with open(filename, 'r') as file:
content = file.read()
self.items = eval(content)

@classmethod
def from_string(cls, str_value):
stack = cls()
for item in str_value.split():
stack.push(item)
return stack

if __name__ == "__main__":
# Crearea unui obiect Stack și adăugarea elementelor
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)

print("Stack initial:", stack)

4
# Salvarea într-un fișier
stack.save("stack_data.txt")

# Crearea unui nou obiect Stack prin încărcarea din fișier


new_stack = Stack()
new_stack.load("stack_data.txt")
print("Stack încărcat:", new_stack)

# Crearea unui obiect Stack dintr-un șir de caractere


str_stack = Stack.from_string("4 5 6")
print("Stack din șir:", str_stack)

# Operatii pe stiva initiala


print("Pop element:", stack.pop())
print("Peek element:", stack.peek())
print("Size of stack:", stack.size())

print("Stack final:", stack)

Rezultatul rularii programului:

5
Cod:
class Stack:
def __init__(self):
self.items = []

def is_empty(self):
return len(self.items) == 0

def push(self, item):


self.items.append(item)

def pop(self):
if not self.is_empty():
return self.items.pop()
else:
print("Stack is empty. Cannot pop.")

def peek(self):
if not self.is_empty():
return self.items[-1]
else:
print("Stack is empty. Cannot peek.")

def size(self):
return len(self.items)

def __str__(self):
return str(self.items)

def save(self, filename):


with open(filename, 'w') as file:
file.write(str(self.items))

def load(self, filename):


6
with open(filename, 'r') as file:
content = file.read()
self.items = eval(content)

@classmethod
def from_string(cls, str_value):
stack = cls()
for item in str_value.split():
stack.push(item)
return stack

# if __name__ == "__main__":
# # Crearea unui obiect Stack și adăugarea elementelor
# stack = Stack()
# stack.push(1)
# stack.push(2)
# stack.push(3)
#
# print("Stack initial:", stack)
#
# # Salvarea într-un fișier
# stack.save("stack_data.txt")
#
# # Crearea unui nou obiect Stack prin încărcarea din fișier
# new_stack = Stack()
# new_stack.load("stack_data.txt")
# print("Stack încărcat:", new_stack)
#
# # Crearea unui obiect Stack dintr-un șir de caractere
# str_stack = Stack.from_string("4 5 6")
# print("Stack din șir:", str_stack)
#
# # Operatii pe stiva initiala
# print("Pop element:", stack.pop())
# print("Peek element:", stack.peek())
# print("Size of stack:", stack.size())
#
# print("Stack final:", stack)

#------------------------------------------------------------------
#B
class StackCollection:
def __init__(self):
self._data = []

def add(self, stack):


if isinstance(stack, Stack):
self._data.append(stack)
else:
print("Invalid type. Expected Stack object.")

def remove(self, index):


if 0 <= index < len(self._data):
removed_stack = self._data.pop(index)
print(f"Removed stack at index {index}: {removed_stack}")
else:
print(f"Index {index} is out of range.")

def save(self, filename):


with open(filename, 'w') as file:
for stack in self._data:

7
file.write(str(stack.items) + '\n')

def load(self, filename):


with open(filename, 'r') as file:
lines = file.readlines()
self._data = [Stack.from_string(line.strip()) for line in lines]

def __str__(self):
return '\n'.join([f"Stack {i}: {stack}" for i, stack in
enumerate(self._data)])

def __getitem__(self, index):


if 0 <= index < len(self._data):
return self._data[index]
else:
print(f"Index {index} is out of range.")
return None

# Testarea funcționalității clasei StackCollection


if __name__ == "__main__":
# Crearea unui obiect StackCollection
stack_collection = StackCollection()

# Adăugarea unor obiecte Stack


stack_collection.add(Stack.from_string("1 2 3"))
stack_collection.add(Stack.from_string("4 5 6"))
stack_collection.add(Stack.from_string("7 8 9"))

print("StackCollection initial:")
print(stack_collection)

# Salvarea într-un fișier


stack_collection.save("stack_collection_data.txt")

# Eliminarea unui element din StackCollection


stack_collection.remove(1)

print("\nStackCollection după eliminare:")


print(stack_collection)

# Încărcarea din fișier


new_stack_collection = StackCollection()
new_stack_collection.load("stack_collection_data.txt")

print("\nStackCollection încărcat:")
print(new_stack_collection)

# Accesarea elementelor prin index


print("\nElement la index 0:")
print(new_stack_collection[0])

print("\nElement la index 2:")


print(new_stack_collection[2])

print("\nElement la index inexistent:")


print(new_stack_collection[5])

8
Rezultatul rularii codului:

Cod:
class Ticket:
def __init__(self, limit):
self._limit = limit
self._remaining_trips = limit
self._trips_taken = 0

def deduct_trip(self):
if self._remaining_trips > 0:
9
self._remaining_trips -= 1
self._trips_taken += 1
print(f"Trip deducted. Remaining trips:
{self._remaining_trips}.")
else:
print("No available trips on this ticket.")

def __str__(self):
return f"Ticket with a limit of {self._limit} trips,
{self._remaining_trips} remaining."

class TravelCardTicket(Ticket):
def __init__(self):
super().__init__(limit=10)
self._type = "Travel Card Ticket"

def additional_method(self):
print("This is an additional method for Travel Card Ticket.")

class UnlimitedTicket(Ticket):
def __init__(self):
super().__init__(limit=float('inf'))
self._type = "Unlimited Ticket"

class LimitedTicket(Ticket):
def __init__(self, limit):
super().__init__(limit)
self._type = "Limited Ticket"

class LimitedTripsTicket(LimitedTicket):
def __init__(self):
super().__init__(limit=5)
self._type = "Limited Trips Ticket"

# Testing the functionality


if __name__ == "__main__":
travel_card_ticket = TravelCardTicket()
unlimited_ticket = UnlimitedTicket()
limited_ticket = LimitedTicket(limit=7)
limited_trips_ticket = LimitedTripsTicket()

print(travel_card_ticket)
travel_card_ticket.deduct_trip()
travel_card_ticket.additional_method()

print("\n" + "=" * 40 + "\n")

print(unlimited_ticket)
unlimited_ticket.deduct_trip()

print("\n" + "=" * 40 + "\n")

print(limited_ticket)
limited_ticket.deduct_trip()

print("\n" + "=" * 40 + "\n")

print(limited_trips_ticket)

10
limited_trips_ticket.deduct_trip()
limited_trips_ticket.deduct_trip()
limited_trips_ticket.deduct_trip()

REzultatul rularii programului

11
Concluzie:

În concluzie, programarea orientată pe obiect (OOP) în Python oferă o


abordare flexibilă și eficientă pentru dezvoltarea software-ului. Principiile
OOP, cum ar fi încapsularea, moștenirea și polimorfismul, permit
dezvoltatorilor să creeze cod modular, ușor de înțeles și de întreținut. În
Python, totul este un obiect, ceea ce înseamnă că fiecare entitate în program
este o instanță a unei clase, inclusiv tipurile de bază precum liste și
dicționare.Utilizarea clasei și a obiectelor în Python facilitează organizarea
codului și promovează reutilizarea acestuia. Metodele și atributele clasei
oferă o modalitate de a structura logic operațiunile și datele asociate. De
asemenea, conceptele de polimorfism și moștenire permit dezvoltatorilor să
creeze soluții flexibile și extensibile.
Python oferă și funcționalități avansate precum decoratori și gestionarea
excepțiilor, care pot fi integrate în proiectele bazate pe OOP pentru a
îmbunătăți calitatea și robustețea codului. În general, OOP în Python oferă
un mediu puternic și coerent pentru dezvoltarea de programe complexe,
permițând programatorilor să creeze aplicații scalabile și ușor de întreținut.

12
2. Webografie

www.jetbrains.com
https://www.w3schools.com/python/module_math.asp
https://www.w3schools.com/python/module_cmath.asp
https://pythonru.com/osnovy/cikl-while-v-python
https://habr.com/ru/articles/123821/
https://habr.com/ru/articles/510426/

13

S-ar putea să vă placă și