Advertisement
Guest User

Untitled

a guest
Apr 18th, 2017
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.73 KB | None | 0 0
  1. # >>>> https://pastebin.com/c8Nv7D43
  2.  
  3. # Może i jeszcze bym cośtam komentarzy poskrobał, ale spać mi się chce :-)
  4.  
  5.  
  6.  
  7. # coding: utf-8
  8.  
  9. """
  10. Na początek dygresja mocno przyszłościowa i z dupy w tym wypadku.
  11. Fajnie jest sobie wyobrażać model danych na przykładzie tabeli z bazy danych. Ogarniasz koncepcję
  12.  
  13. Powiedzmy:
  14.  
  15. tabelka users: id, login, password
  16. tabelka pages: id, user_id, page, password
  17.  
  18. Fragment kodu do popaczania:
  19.  
  20. user_list = []  # coś co nam robi za fake'ową tabele
  21.  
  22. class User(object):
  23.    def __init__(self, login=None, password=None):
  24.        self.validate_login(login)
  25.        self.validate_password(password)
  26.  
  27.        self.login = login
  28.        self.password = password
  29.  
  30.    def register(self):
  31.        global user_list
  32.        user_list.append(self)
  33.  
  34.    def unregister(self):
  35.        global user_list
  36.        del user_list[self]
  37.  
  38.    def __str__(self):
  39.        print('User: %s' % self.login)
  40.  
  41.    def validate_login(self, login):
  42.        global user_list
  43.        for user in user_list:
  44.            if user.login == login:
  45.                raise Exception('User already exists :<')
  46.  
  47.    def validate_password(self, password):
  48.        bla bla bla itd.
  49.  
  50.  
  51. user1 = User('Adolf', 'ArbeitMachtFrei')
  52. user1.register()
  53.  
  54. user2 = User('Adolf', 'Arbeit ist nich spaB')
  55. # pizd po ryju, bo adolf już sobie istnieje
  56.  
  57. """
  58.  
  59. """
  60. Teraz czas na uwagi co do samego kodu. To ponizej, fajnie by było capnąć w jedną strukturę, żeby nie bylo budrelu.
  61. W pajtónie masz pare bazowych kolekcji tj. list, tuple, dict, set. Jest tego od chuja więcej, ale nie będe mieszał teraz.
  62.  
  63. Listę tworzy się poprzez [] lub list(...)
  64. Tuplę () lub tuple(...)
  65. Set {} lub set(...)
  66. Słownik {} lub dict(...)
  67.  
  68. Między deklaracją słownika i set'u jest taka różnica, że ten pierwszy to klucz:wartość, a drugi lista elementów.
  69.  
  70. więc tak. Z tego user_list itd.
  71.  
  72. user_list = ["michal","monika"]
  73. user_password = ["pierogi","papuga"]
  74. page_base = [["netflix.com","google.com","dupa.pl"],["netflix.com","jeja.pl"]]
  75. pass_base = [["kalafior","cokolwiek","dupa"],["kalafior","jej"]]
  76.  
  77. można by sobie zrobić w wersji mega na bogato:
  78.  
  79. database = {
  80.    'users': {
  81.        'michal': {
  82.            'password': 'pierogi',
  83.            'pages': {
  84.                'netflix.com': 'kalafior',
  85.                'google.com': 'cokolwiek'
  86.            }
  87.        }
  88.    }
  89. }
  90.  
  91. # I wtedy jak np. chcemy sie logować:
  92.  
  93. if login in database['users'] and database['users'][login]['password'] == password:
  94.    print('Zalogowano!')
  95.  
  96.  
  97. # Dostep do stron poprzez: (zakładając, że strony są unikalne, ale tak wywnioskowałem po kodzie)
  98. database['users'][login]['pages']
  99.  
  100. # Skasowanie strony po jej urlu:
  101. del database['users'][login]['pages']['google.com']
  102.  
  103. # Wylistowanie stron (samych urli)
  104. print(database['users'][login]['pages'].keys())
  105.  
  106. # Dodanie strony:
  107. database['users'][login]['pages']['dupa.pl'] = 'dupa'
  108.  
  109. """
  110.  
  111. user_list = ["michal","monika"]
  112. user_password = ["pierogi","papuga"]
  113. page_base = [["netflix.com","google.com","dupa.pl"],["netflix.com","jeja.pl"]]
  114. pass_base = [["kalafior","cokolwiek","dupa"],["kalafior","jej"]]
  115.  
  116.  
  117.  
  118. user = input ("Podaj nazwe uzytkownika: ").strip().lower()
  119. password = input ("Podaj haslo:").strip().lower()
  120. x = True
  121. y = True
  122.  
  123.  
  124. # Bardzo fajnie, ze uzyles nawiasów. Często to ratuje dupe, bo składnia się złapie na co innego niż chcesz.
  125. if (user in user_list) and (password in user_password):
  126.  
  127.     """
  128.    Tutaj jak nie znajdzie, to sie wypierdoli program :-)
  129.  
  130.    W pajtonie albo jedzie się na "bezpiecznym" wykonaniu, czyli sprawdzaniu większej ilości warunków, albo łapaniu wyjątków.
  131.  
  132.    Bezpiecznie byłoby:
  133.  
  134.    u_s = user in user_list and user_list.index(user) or None
  135.    if u_s is not None:
  136.        ... tutaj reszta kodu ...
  137.    else:
  138.        print('User nie istnieje')
  139.  
  140.    A z łapaniem wyjątków:
  141.  
  142.    try:
  143.        u_s = user_list.index(user)
  144.    except ValueError:
  145.        print('User nie istnieje')
  146.  
  147.    ... tutaj reszta kodu ...
  148.    """
  149.     u_s = user_list.index(user)
  150.     u_p = user_password.index(password)
  151.  
  152.     if u_s == u_p:
  153.  
  154.         # mozna uprościc do while x. if, while i inne podobne rzutują wartość na True/False.
  155.         while x == True:
  156.  
  157.             """
  158.            Dobrą opcją na printowanie i tworzenie stringów itd itp jest używanie ciągów formatujących
  159.            print('Witaj %s!' % user.capitalize())
  160.  
  161.            %s - string, %d - liczba itd.
  162.            Warto zwrócić uwagę na to, że używając odpowiedniego formatera, dane są rzutowane w tym miejscu na ten typ.
  163.            Czyli, jak czegoś się nie da przerzutować, to dostanie się w ryj.
  164.  
  165.            """
  166.             print ("Witaj "+user.capitalize()+"!")
  167.  
  168.             """
  169.            w pajtonie mozna sklejac tekst z wielu linijek :>
  170.            zamiast tego ponizej, mogloby byc:
  171.  
  172.            (zauważ brak przecinków! Jak byś je dal, byłaby z tego tuple(taka inna lista))
  173.  
  174.            choice = int(input(
  175.                "W czym moge Ci pomoc?\n"
  176.                " 1.Sprawdz liste stron\n"
  177.                ... itd.
  178.            ))
  179.  
  180.            """
  181.             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: "))
  182.             if choice == 1:
  183.                 # taka uwaga ogólna. Jak wiesz, że są sobie równe, możesz zadeklarować gdzieś wyżej zmienną np.
  184.                 # idx = u_s     i z niej korzystac. Dla przejrzystosci kodu.
  185.                 for pages in page_base[u_p] :
  186.                     print (pages)
  187.             elif choice == 2:
  188.                 # Muszę się czepić :D lepiej zamienić miejscem .strip() i .lower()
  189.                 # W tym wypadku ma to chuja znaczenie, ale w innych sytuacjach fajnie optymalizuje.
  190.                 # jak by haslo mialo 10 miliardów trylionów znakow, lepiej najpierw je skrócić, a później dopiero pomniejszać :-)
  191.                 page = input ("Haslo do ktorej strony chcesz sprawdzic?: ").lower().strip()
  192.                 if page in (page_base[u_s]):
  193.                     page_pass = page_base[u_s].index(page)
  194.                     print ("\nHaslo do strony "+ page+ " to:")
  195.                     print (pass_base[u_s][page_pass])
  196.  
  197.                     # :-)     print("\nHaslo do strony %s to: %s" % (page, pass_base[u_s][page_pass]))
  198.                 else:
  199.                     print("Brak strony w bazie")
  200.             elif choice == 3:
  201.                 n_page = input("Podaj adres strony: ").lower().strip()
  202.                 n_pass = input("Podaj haslo do strony: ").strip()
  203.                 if n_page in page_base[u_s]:
  204.                     print ("Strona juz jest w bazie")
  205.                     u_choice = int(input ("1. Zaktualizuj dane\n2.Anuluj\nWybor:"))
  206.                     if u_choice == 1:
  207.                         n_pass = input ("Podaj nowe haslo: ").strip()
  208.                         pass_new = page_base[u_s].index(n_page)
  209.                         print (pass_new)
  210.                         del pass_base [u_s][pass_new]
  211.                         pass_base [u_s].insert(pass_new,n_pass)
  212.  
  213.                         """
  214.                        ostatnie 2 linijki można, a nawet wypada uprościć. Można nadpisywać elementy listy. Nie trzeba nic kasować
  215.  
  216.                        n_pass = input ("Podaj nowe haslo: ").strip()
  217.                        page_idx = page_base[u_s].index(n_page)
  218.                        print page_idx
  219.                        page_base[u_s][page_idx] = n_pass
  220.                        """
  221.  
  222.                         print ("Zmieniono haslo")
  223.                     elif u_choice == 2:
  224.                         print ("Anulowano")
  225.                     else:
  226.                         print ("Niepoprawna komenda")
  227.                 else:
  228.                     page_base[u_s].append(n_page)
  229.                     pass_base[u_s].append(n_pass)
  230.                     print (choice)
  231.             elif choice == 4:
  232.                 n_pass = input ("Ktora strone chcesz usunac?: ")
  233.                 if n_pass in page_base[u_s]:
  234.                     n_page = page_base[u_s].index(n_pass)
  235.                     del pass_base [u_s][n_page]
  236.                     del page_base [u_s][n_page]
  237.                     print ("Strona zostala usunieta pomyslnie!")
  238.                 else:
  239.                     print ("Podana strona nie znajduje sie w bazie")
  240.             elif choice == 5:
  241.                 x = False
  242.             else:
  243.                 print("Niepoprawny wybor!!!")
  244.         else:
  245.             # zamiast else: quit() możesz po prostu dać quit() na poziomie (wcięciu) else.
  246.             # Zauważ, że while się wykonuje do skutku
  247.             # poza tym, i tak program się zakończy po wyjściu z while więc quit() niepotrzebny
  248.             quit()
  249.     else:
  250.         print ("Haslo lub nazwa uzytkownika jest niepoprawne")
  251. else:
  252.     print ("Haslo lub nazwa uzytkonika niepoprawne ")
  253.  
  254. """
  255. No i ciekawostka na koniec. W pajtonie nie ma czegoś takiego jak w JavaScriptcie switch()
  256.  
  257. switch(choice) {
  258.    case 1:
  259.        bla bla bla
  260.        break;
  261.    case 2:
  262.        ...
  263.    default:
  264.        bla bla.
  265. }
  266.  
  267.  
  268. Dlatego nadupca się często rzeczywiście if elif elif elif ... else,
  269. choć na ogół stara się tak nie projektować logiki.
  270.  
  271. Jest jednak możliwość przekombinowania :>
  272.  
  273. Paczaj, można wykorzystać słowik do tego. Klucz-wartość dobrze siada.
  274.  
  275. --------------------
  276. def fun_1():
  277.    rób coś
  278.  
  279. def fun_2():
  280.    rób coś 2
  281.  
  282. def fun_default():
  283.    rob coś w każdym innym wypadku
  284.  
  285. menu = {
  286.    1: fun_1,
  287.    2: fun_2,
  288.    ...
  289. }
  290.  
  291. if opcja in menu:
  292.    menu[opcja]()
  293. else:
  294.    fun_default()
  295. --------------------
  296. albo level-asian
  297.  
  298. menu.get(opcja, fun_default)()
  299.  
  300. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement