Last active
August 11, 2023 11:19
-
-
Save AmirMahdyJebreily/80cdf17ba93a6e0257cec46768a673bc to your computer and use it in GitHub Desktop.
oop course : create an oop contacts app with python
This file contains 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
import re | |
phonenumberValidateRegEx = r"((0?9)|(\+?989))((14)|(13)|(12)|(19)|(18)|(17)|(15)|(16)|(11)|(10)|(90)|(91)|(92)|(93)|(94)|(95)|(96)|(32)|(30)|(33)|(35)|(36)|(37)|(38)|(39)|(00)|(01)|(02)|(03)|(04)|(05)|(41)|(20)|(21)|(22)|(23)|(31)|(34)|(9910)|(9911)|(9913)|(9914)|(9999)|(999)|(990)|(9810)|(9811)|(9812)|(9813)|(9814)|(9815)|(9816)|(9817)|(998))\W?\d{3}\W?\d{4}" | |
# use this RegEx for encapsulate email field in contacts class | |
emailValidateRegEx = r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$" | |
# OOP (Object oriented Programming) => Class : Polymorphysm : Inheritance : Encapsulation | |
# S.O.L.I.D | |
class Contact: | |
# -----------------------------{تکلیف}-------------------------------- | |
def chechEmail(email): | |
pass # Completethe code ... # | |
def setEmail(self, email): | |
pass # Complete the code ... # | |
def getEmail(self): | |
return self.__email # Remember why ... # | |
# -------------------------------------------------------------------- | |
def checkPhoneNumber(phoneNumber): | |
if re.findall( | |
phonenumberValidateRegEx, phoneNumber | |
): # آیا این واقعا شماره تلفنه ؟ | |
return True | |
else: | |
return False | |
def setPhoneNumber(self, phoneNumber): | |
if Contact.checkPhoneNumber(phoneNumber): | |
self.__phoneNumber = phoneNumber | |
else: | |
raise ValueError("phone number is not valid !") | |
def getPhoneNumber(self) -> str: | |
return self.__phoneNumber | |
def __init__(self, name, address, phoneNumber, email): | |
self.name = name | |
self.address = address | |
self.__email = email # تکلیف : انکپسولِیت کردن این خصوصیت | |
# سعی کنید یادتون بیاد چرا پشت اسم متغیر ایمیل دوتا __ گذاشتم | |
# اگر یادتون نیومد | |
# https://www.geeksforgeeks.org/underscore-_-python/ | |
# https://dbader.org/blog/meaning-of-underscores-in-python#:~:text=The%20single%20underscore%20is%20simply,sometimes%20used%20for%20this%20purpose.&text=Besides%20its%20use%20as%20a,expression%20evaluated%20by%20the%20interpreter. | |
# اگر یادتون نیومد این دوتا لینک رو بخونید | |
# یاد بگیرید از مقاله هایی به زبون دیگه، اون چیزی که میخواید رو استخراج کنید. | |
# گوگل ترنسلیت کمکتون میکنه | |
# چیزای جدید تر هم در کنار اون چیزی که میخواید یاد میگیرید | |
# تکلیفتونو تا جلسه قبل به آیدی زیر توی تلگرام یا ایتا ارسال کنید (ترجیحا تلگرام) | |
# @am_jcs | |
self.setPhoneNumber(phoneNumber) | |
def __str__(self): | |
# سعی کنید دلیل نوشته شدن این کد رو اینجا یادتون بیاد. اگر یادتون نیومد از اون لینک های بالا میتونید به یه نتیجه کلی برسید | |
# اگه با اونا باز هم به نتیجه نرسیدید این لینک رو ببینید : | |
# https://www.pythonlikeyoumeanit.com/Module4_OOP/Special_Methods.html | |
# | |
# اگر با بالایی هم یادتون نیومد اینجا توضیح داده | |
# https://www.scaler.com/topics/python-str/ | |
# | |
# | |
# راهنمایی | |
# توی کد یه جای دیگه هم این کامنت رو گذاشتم. پیداش کنین به جواب می رسین | |
# (1) | |
return self.name | |
contacts = [ | |
Contact("CodeAgha", "Mashhad", "09331962277", "[email protected]"), | |
Contact("Aref", "Mashhad", "09155517670", "[email protected]"), | |
] | |
c = True | |
while c: | |
print() | |
print(*contacts, sep=", ") # (1) | |
inputedName = input( | |
"enter name of a contact. \nif you want to add anouther one enter anouther name : " | |
) | |
isExist = False | |
cont = None | |
for contact in contacts: | |
isExist = contact.name == inputedName | |
if isExist: | |
cont = contact | |
if isExist: | |
print("\n", cont.name, "'s Phone number is : ", cont.getPhoneNumber()) | |
print(cont.name, "'s Address is : ", cont.address) | |
print( | |
"اینجا باید مثل متن های بالا ایمیل کاربر چاپ بشه و حواستون باشه به ارور نخورید " | |
) # اینجا هم باید تغییر بدی | |
else: | |
newAddress = input("Enter new contact address : ") | |
newEmail = input("Enter new contact email : ") | |
c_for_pn = True | |
while c_for_pn: | |
newPhoneNumber = input("Enter new contact phone number: ") | |
if Contact.checkPhoneNumber(newPhoneNumber): | |
c_for_pn = False | |
else: | |
print("phone number is not valid ! \n") | |
try: | |
newContact = Contact(inputedName, newAddress, newPhoneNumber, newEmail) | |
except: | |
print("phone number is not valid ! \n") | |
contacts.append(newContact) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment