Lekcja 4 - Nikola Horn

Lekcja 4 - Nikola Horn
Photo by Qijin Xu / Unsplash

Zadanie domowe

Możemy zrobić listę pytań używając listy, a później użyć "random" do wyświetlenia ich w losowej kolejności. Nie wiem tylko jak później sprawdzić prawidłową odpowiedź? Jednym z moich pomysłów jest stworzenie 3 list z pytaniami, osobno dla odpowiedzi "a", "b" i "c", ale wtedy nie będą one wystarczająco losowe...

Imię użytkownika najlepiej zapisać przy pomocy "input" i słownika. Imię będzie kluczem, a pytania i jego odpowiedzi listą/krotką z wartościami (nie wiem niestety jak to zrobić, żeby sukcesywnie dodawać odpowiedzi do tego listy w tym kluczu?).

Tutaj moje zliczanie punktów na brudno z gotową już listą pytań i pustym słownikiem, a także pytaniem o imię.

import random

punkty=0

pytania = ["""
  Jakie zwierzę ma krótki ogon? 
  a. szczur 
  b. jaszczurka 
  c. chomik
  """, """
  Jakie zwierzę potrafi skakać? 
  a. chomik 
  b. jaszczurka 
  c. wąż
  """, """
  Jakie zwierzę potrafi latać? 
  a. pingwin 
  b. kura 
  c. świnia
  """, """
  Jakie zwierzę zapada w sen zimowy? 
  a. jaszczurka 
  b. jeleń 
  c. zając
  """, """
  Jakie zwierzę lubi piaskowe kąpiele? 
  a. królik 
  b. świnka morska 
  c. chomik
  """]

#Tworzę pusty słownik
imiona={}

imie=(input("Jak się nazywasz? "))

print("Jakie zwierzę ma krótki ogon? a. szczur b. jaszczurka c. chomik")
odp1=(input("Odp: "))
if odp1=="c":
    print("Dobra odpowiedź!")
    punkty=punkty+1
else:
    print("Zła odpowiedź")

print("Jakie zwierzę potrafi skakać? a. chomik b. jaszczurka c. wąż")
odp2=(input("Odp: "))
if odp2=="b":
    print("Dobra odpowiedź!")
    punkty=punkty+1
else:
    print("Zła odpowiedź")

print("Jakie zwierzę potrafi latać? a. pingwin b. kura c. świnia")
odp3=(input("Odp: "))
if odp3=="b":
    print("Dobra odpowiedź!")
    punkty=punkty+1
else:
    print("Zła odpowiedź")

print("Jakie zwierzę zapada w sen zimowy? a. jaszczurka b. jeleń c. zając")
odp4=(input("Odp: "))
if odp4=="a":
    print("Dobra odpowiedź!")
    punkty=punkty+1
else:
    print("Zła odpowiedź")

print("Jakie zwierzę lubi piaskowe kąpiele? a. królik b. świnka morska c. chomik")
odp5=(input("Odp: "))
if odp5=="c":
    print("Dobra odpowiedź!")
    punkty=punkty+1
else:
    print("Zła odpowiedź")

print(f"Udało ci się uzyskać {punkty} punktów")

Papier/kamień/nożyce - najprostsza wersja

import random

gra = ["papier", "nożyce", "kamień"]

wybor = (input("""Wpisz papier, nożyce lub kamień
         """))
wyborkomp = random.choice(gra)

print(f"Komputer wybrał {wyborkomp}")

if wybor == wyborkomp:
    print("Remis!")
elif wybor == "papier" and wyborkomp == "nożyce":
    print("Przegrana!")
elif wybor == "papier" and wyborkomp == "kamień":
    print("Wygrana!")
elif wybor == "nożyce" and wyborkomp == "kamień":
    print("Przegrana!")
elif wybor == "nożyce" and wyborkomp == "papier":
    print("Wygrana!")
elif wybor == "kamień" and wyborkomp == "papier":
    print("Przegrana!")
elif wybor == "kamień" and wyborkomp == "nożyce":
    print("Wygrana!")

Papier/kamień/nożyce - wersja z indeksami i ASCII

import random

gra = ["""
    _______
---'   ____)____
          ______)
          _______)
         _______)
---.__________)

papier
""", """
    _______
---'   ____)____
          ______)
       __________)
      (____)
---.__(___)

nożyce
""", """
    _______
---'   ____)
      (_____)
      (_____)
      (____)
---.__(___)

kamień
"""]

wybor = int(input("""Wpisz 0 - papier, 1 - nożyce lub 2- kamień
               0 - papier
               1 - nożyce
               2 - kamień
         """))
wyborkomp = random.choice(gra)

print(f"Komputer wybrał {wyborkomp}")

if wybor == 0 and wyborkomp == gra[0]:
    print("Remis!")
elif wybor == 1 and wyborkomp == gra[1]:
    print("Remis!")
elif wybor == 2 and wyborkomp == gra[2]:
    print("Remis!")
elif wybor == 0 and wyborkomp == gra[1]:
    print("Przegrana!")
elif wybor == 0 and wyborkomp == gra[2]:
    print("Wygrana!")
elif wybor == 1 and wyborkomp == gra[0]:
    print("Wygrana!")
elif wybor == 1 and wyborkomp == gra[2]:
    print("Przegrana!")
elif wybor == 2 and wyborkomp == gra[0]:
    print("Przegrana!")
elif wybor == 2 and wyborkomp == gra[1]:
    print("Wygrana!")

Notatki z zajęć

punkty = punkty+1 i punkty += 1 to to samo

"""
tekst
tekst 3 cudzysłowie do dużej ilości tekstu z interliniami
tekst
"""

inna opcja: \n - nowa linijka

print(f"\n xxx \n Twój wynik to: {punkty} \n xxx"

Listy i krotki - podobieństwa i różnice

  • służą do przechowywania danych w zorganizowany sposób
  • każdy element ma swój indeks (!!!)
  • mogą posiadać duplikaty (!), np. kilka razy liczbę 1

Listy (ang. list)

  • są modyfikowalne (mutable) - można dodawać/odejmować elementy za pomocą funkcji
  • deklaruje się poprzez użycie [ ]
  • unika się sięgania po elementy gdzieś w środku bardzo długich list
moje_ksiazki=["Blade Runner", "Hobbit", "Unicorn Project"]

Dodawanie do listy:

.append()

m2.append(8)

m2 - nazwa listy; .append - metoda; 8 - wartość, którą dodajemy do list

użycie + łączy dwie listy, np.:

[1,2] + [2,1]

to da nam listę o zwartości [1, 2, 2, 1]

Krotki (ang. tuple)

  • niemodyfikowalne (immutable)
  • mają stałą długość, więc częściej sięgamy po elementy znajdujące się gdzieś głęboko w nich
  • deklaruje się poprzez użycie ( )
kategorie_menu = ("przystawki", "zupy", "dania")

Indeksy

Indeksy liczymy od 0!

moja_lista = ["cos1", "cos2", "cos3"]
print(moja_lista[2])

to nam wyświetli "cos3", ponieważ "cos1" ma indeks 0, a "cos2" indeks 1

Możemy liczyć też indeksy od tyłu, używając liczb minusowych, np.:

moja_lista = ["cos1", "cos2", "cos3"]
print(moja_lista[-1])

także wyświetli "cos3"

indeks -1 - ostatni element; -2 - przedostatni itp.

"Cięcie"/"filtrowanie" list i krotek

moja_zmienna[start:koniec]
moja_lista = [1 , 4 , 6, 8]
print(moja_lista[1:3])

wyświetli nam [4, 6] ponieważ "start" ma indeks 1, a "koniec" indeks 4, ale zawsze obcina wartości OD startu do PRZED końcem!!

moja_lista[2:] - od elementu z indeksem 2 do końca

moja_lista[:2] - od początku listy do elementu PRZED indeksem 2

List/tupple unpacking

Możemy łatwo stworzyć zmienne ze wszystkich wartości na liście/krotce

mlist = [1 , 2 , 3]
a, b, c = mlist

to da nam 3 zmienne:

a=1; b=2; c=3

Metody

specjalne funkcje przypisane do danego obiektu

nazwa_zmiennej.nazwa_metody(parametr)
moja_lista.append(nowy_element)

Tuple methods:

Słowniki (dictionary)

moj_slownik = {klucz: wartość}
moj_slownik = {"klucz1" : "wartość1", "klucz2" : "wartość2", "klucz3" : "wartość3"}

Klucz musi być unikalny!

Dobrą praktyką jest stosowanie jednorodnego schematu klucz:wartość.

Klucze wykorzystujemy, żeby szybko znaleźć zawartość.

moj_slownik = {"klucz1" : "wartość1", "klucz2" : "wartość2", "klucz3" : "wartość3"}
print(moj_slownik["klucz1"])

to wyświetli "wartość1"

Dodawanie do słownika:

moj_slownik["klucz4"]="wartość4"

Usuwanie:

moj_slownik.pop("klucz1")

Wartościami w słowniku mogą być listy lub krotki, np.

menu = {
  "soki" : ["pomarańczowy", "jabłkowy", "marchewkowy"], 
  "zupy" : ["ogórkowa", "pomidorowa", "rosół"]
  }

w takim wypadku możemy używać indeksów list zawartych w słowniku, np.:

print(menu["soki"][0])

wyświetli "pomarańczowy"

menu["soki"].pop(0)

usunie pierwszą wartość z klucza soki, czyli "pomarańczowy"

menu.clear()

wyczyści CAŁY słownik

Zbiory (set)

moj_zbior = {unikat1, unikat2, unikat3}
  • to słownik z samymi kluczami
  • zbiory nie mają powtórzeń
  • nie mają indeksu
  • jak chcemy usunąć powtórzenia z listy to możemy zamienić ją na zbiór i z powrotem!