Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # >>>> https://pastebin.com/c8Nv7D43
- # Może i jeszcze bym cośtam komentarzy poskrobał, ale spać mi się chce :-)
- # coding: utf-8
- """
- Na początek dygresja mocno przyszłościowa i z dupy w tym wypadku.
- Fajnie jest sobie wyobrażać model danych na przykładzie tabeli z bazy danych. Ogarniasz koncepcję
- Powiedzmy:
- tabelka users: id, login, password
- tabelka pages: id, user_id, page, password
- Fragment kodu do popaczania:
- user_list = [] # coś co nam robi za fake'ową tabele
- class User(object):
- def __init__(self, login=None, password=None):
- self.validate_login(login)
- self.validate_password(password)
- self.login = login
- self.password = password
- def register(self):
- global user_list
- user_list.append(self)
- def unregister(self):
- global user_list
- del user_list[self]
- def __str__(self):
- print('User: %s' % self.login)
- def validate_login(self, login):
- global user_list
- for user in user_list:
- if user.login == login:
- raise Exception('User already exists :<')
- def validate_password(self, password):
- bla bla bla itd.
- user1 = User('Adolf', 'ArbeitMachtFrei')
- user1.register()
- user2 = User('Adolf', 'Arbeit ist nich spaB')
- # pizd po ryju, bo adolf już sobie istnieje
- """
- """
- Teraz czas na uwagi co do samego kodu. To ponizej, fajnie by było capnąć w jedną strukturę, żeby nie bylo budrelu.
- W pajtónie masz pare bazowych kolekcji tj. list, tuple, dict, set. Jest tego od chuja więcej, ale nie będe mieszał teraz.
- Listę tworzy się poprzez [] lub list(...)
- Tuplę () lub tuple(...)
- Set {} lub set(...)
- Słownik {} lub dict(...)
- Między deklaracją słownika i set'u jest taka różnica, że ten pierwszy to klucz:wartość, a drugi lista elementów.
- więc tak. Z tego user_list itd.
- user_list = ["michal","monika"]
- user_password = ["pierogi","papuga"]
- page_base = [["netflix.com","google.com","dupa.pl"],["netflix.com","jeja.pl"]]
- pass_base = [["kalafior","cokolwiek","dupa"],["kalafior","jej"]]
- można by sobie zrobić w wersji mega na bogato:
- database = {
- 'users': {
- 'michal': {
- 'password': 'pierogi',
- 'pages': {
- 'netflix.com': 'kalafior',
- 'google.com': 'cokolwiek'
- }
- }
- }
- }
- # I wtedy jak np. chcemy sie logować:
- if login in database['users'] and database['users'][login]['password'] == password:
- print('Zalogowano!')
- # Dostep do stron poprzez: (zakładając, że strony są unikalne, ale tak wywnioskowałem po kodzie)
- database['users'][login]['pages']
- # Skasowanie strony po jej urlu:
- del database['users'][login]['pages']['google.com']
- # Wylistowanie stron (samych urli)
- print(database['users'][login]['pages'].keys())
- # Dodanie strony:
- database['users'][login]['pages']['dupa.pl'] = 'dupa'
- """
- user_list = ["michal","monika"]
- user_password = ["pierogi","papuga"]
- page_base = [["netflix.com","google.com","dupa.pl"],["netflix.com","jeja.pl"]]
- pass_base = [["kalafior","cokolwiek","dupa"],["kalafior","jej"]]
- user = input ("Podaj nazwe uzytkownika: ").strip().lower()
- password = input ("Podaj haslo:").strip().lower()
- x = True
- y = True
- # Bardzo fajnie, ze uzyles nawiasów. Często to ratuje dupe, bo składnia się złapie na co innego niż chcesz.
- if (user in user_list) and (password in user_password):
- """
- Tutaj jak nie znajdzie, to sie wypierdoli program :-)
- W pajtonie albo jedzie się na "bezpiecznym" wykonaniu, czyli sprawdzaniu większej ilości warunków, albo łapaniu wyjątków.
- Bezpiecznie byłoby:
- u_s = user in user_list and user_list.index(user) or None
- if u_s is not None:
- ... tutaj reszta kodu ...
- else:
- print('User nie istnieje')
- A z łapaniem wyjątków:
- try:
- u_s = user_list.index(user)
- except ValueError:
- print('User nie istnieje')
- ... tutaj reszta kodu ...
- """
- u_s = user_list.index(user)
- u_p = user_password.index(password)
- if u_s == u_p:
- # mozna uprościc do while x. if, while i inne podobne rzutują wartość na True/False.
- while x == True:
- """
- Dobrą opcją na printowanie i tworzenie stringów itd itp jest używanie ciągów formatujących
- print('Witaj %s!' % user.capitalize())
- %s - string, %d - liczba itd.
- Warto zwrócić uwagę na to, że używając odpowiedniego formatera, dane są rzutowane w tym miejscu na ten typ.
- Czyli, jak czegoś się nie da przerzutować, to dostanie się w ryj.
- """
- print ("Witaj "+user.capitalize()+"!")
- """
- w pajtonie mozna sklejac tekst z wielu linijek :>
- zamiast tego ponizej, mogloby byc:
- (zauważ brak przecinków! Jak byś je dal, byłaby z tego tuple(taka inna lista))
- choice = int(input(
- "W czym moge Ci pomoc?\n"
- " 1.Sprawdz liste stron\n"
- ... itd.
- ))
- """
- choice = int(input ("W czym moge Ci pomoc?\n 1.Sprawdz liste stron\n 2.Sprawdz haslo dla strony\n 3.Dodaj strone i haslo\n 4.Usun strone i haslo\n 5.Zakończ\nWybor: "))
- if choice == 1:
- # taka uwaga ogólna. Jak wiesz, że są sobie równe, możesz zadeklarować gdzieś wyżej zmienną np.
- # idx = u_s i z niej korzystac. Dla przejrzystosci kodu.
- for pages in page_base[u_p] :
- print (pages)
- elif choice == 2:
- # Muszę się czepić :D lepiej zamienić miejscem .strip() i .lower()
- # W tym wypadku ma to chuja znaczenie, ale w innych sytuacjach fajnie optymalizuje.
- # jak by haslo mialo 10 miliardów trylionów znakow, lepiej najpierw je skrócić, a później dopiero pomniejszać :-)
- page = input ("Haslo do ktorej strony chcesz sprawdzic?: ").lower().strip()
- if page in (page_base[u_s]):
- page_pass = page_base[u_s].index(page)
- print ("\nHaslo do strony "+ page+ " to:")
- print (pass_base[u_s][page_pass])
- # :-) print("\nHaslo do strony %s to: %s" % (page, pass_base[u_s][page_pass]))
- else:
- print("Brak strony w bazie")
- elif choice == 3:
- n_page = input("Podaj adres strony: ").lower().strip()
- n_pass = input("Podaj haslo do strony: ").strip()
- if n_page in page_base[u_s]:
- print ("Strona juz jest w bazie")
- u_choice = int(input ("1. Zaktualizuj dane\n2.Anuluj\nWybor:"))
- if u_choice == 1:
- n_pass = input ("Podaj nowe haslo: ").strip()
- pass_new = page_base[u_s].index(n_page)
- print (pass_new)
- del pass_base [u_s][pass_new]
- pass_base [u_s].insert(pass_new,n_pass)
- """
- ostatnie 2 linijki można, a nawet wypada uprościć. Można nadpisywać elementy listy. Nie trzeba nic kasować
- n_pass = input ("Podaj nowe haslo: ").strip()
- page_idx = page_base[u_s].index(n_page)
- print page_idx
- page_base[u_s][page_idx] = n_pass
- """
- print ("Zmieniono haslo")
- elif u_choice == 2:
- print ("Anulowano")
- else:
- print ("Niepoprawna komenda")
- else:
- page_base[u_s].append(n_page)
- pass_base[u_s].append(n_pass)
- print (choice)
- elif choice == 4:
- n_pass = input ("Ktora strone chcesz usunac?: ")
- if n_pass in page_base[u_s]:
- n_page = page_base[u_s].index(n_pass)
- del pass_base [u_s][n_page]
- del page_base [u_s][n_page]
- print ("Strona zostala usunieta pomyslnie!")
- else:
- print ("Podana strona nie znajduje sie w bazie")
- elif choice == 5:
- x = False
- else:
- print("Niepoprawny wybor!!!")
- else:
- # zamiast else: quit() możesz po prostu dać quit() na poziomie (wcięciu) else.
- # Zauważ, że while się wykonuje do skutku
- # poza tym, i tak program się zakończy po wyjściu z while więc quit() niepotrzebny
- quit()
- else:
- print ("Haslo lub nazwa uzytkownika jest niepoprawne")
- else:
- print ("Haslo lub nazwa uzytkonika niepoprawne ")
- """
- No i ciekawostka na koniec. W pajtonie nie ma czegoś takiego jak w JavaScriptcie switch()
- switch(choice) {
- case 1:
- bla bla bla
- break;
- case 2:
- ...
- default:
- bla bla.
- }
- Dlatego nadupca się często rzeczywiście if elif elif elif ... else,
- choć na ogół stara się tak nie projektować logiki.
- Jest jednak możliwość przekombinowania :>
- Paczaj, można wykorzystać słowik do tego. Klucz-wartość dobrze siada.
- --------------------
- def fun_1():
- rób coś
- def fun_2():
- rób coś 2
- def fun_default():
- rob coś w każdym innym wypadku
- menu = {
- 1: fun_1,
- 2: fun_2,
- ...
- }
- if opcja in menu:
- menu[opcja]()
- else:
- fun_default()
- --------------------
- albo level-asian
- menu.get(opcja, fun_default)()
- """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement