Spotkanie XX.

Kiedy mogą przydać się listy?

Chodzi oczywiście o listy (tablice) służące do przechowywania informacji w pamięci komputera – a nie o listy pisane do kogoś (chociaż w czasie pracy zdalnej i narzuconego odosobnienia, powrót do pisania tradycyjnych listów może całkiem miłym zajęciem).

Niniejsze zajęcia będą poświęcone kilku przykładom mniej lub bardziej typowym przykładom zadań algorytmicznych, w których listy mogą być bardzo przydatne.

Przykład 1. Chcemy napisać program, który po wczytaniu ocen danego ucznia, obliczy ich średnią i wypisze jej wartość na ekranie komputera.

Spróbujmy zaplanować rozwiązanie najpierw przy użyciu Scratcha, a później Pythona. W Scratchu dane wejściowe (czyli oceny) najwygodniej przechowywać używając listy.

Lista OCENY i obsługujący ją program.

Pokazany fragment programu, używając pętli, oblicza sumę wszystkich ocen zawartych na liście OCENY i zapamiętuję są w zmiennej o nazwie suma_ocen. Oczywiście, aby dokończyć trzeba tę sumę jeszcze podzielić przez liczbę wszystkich ocen na liście.

Ćwiczenie 1. Dokończ powyższy program tak, żeby duszek wyświetlał (blok powiedz) wartość obliczonej średniej przez 10 sekund.

Jeśli się zastanowimy, to tak naprawdę przechowywanie wszystkich ocen w pamięci komputera nie jest konieczne – można je wprowadzać już po uruchomieniu programu, a w przygotowanej zmiennej możemy pamiętać sumę wszystkich podanych liczb. Schemat dla takiego programu w Pythonie może wyglądać np. tak.

  • podaj liczbę ocen ucznia (zmienna n)
  • podaj kolejne oceny i zapamiętaj ich sumę (zmienna suma_ocen)
  • wypisz średnią na ekranie.

Oczywiście należy pamiętać o specyficznej składni Pythona (np. o tym, że wszystkie wprowadzane dane są traktowane jako zmienne znakowe i trzeba dokonać ich konwersji na wartości typu liczbowego).

n = int(input("Podaj liczbe ocen: "))
suma_ocen = 0
for k in range(n):
    ocena = int(input("kolejna ocena: "))
    suma_ocen = suma_ocen + ocena
print("Obliczona srednia wynosi",suma_ocen/n)

Ćwiczenie 2. Napisz – w Scratchu lub w Pythonie – program, który dla wprowadzonych ocen ucznia wypisze krótki raport informujący o tym ile było ocen pozytywnych (a więc od stopnia dopuszczającego wzwyż), a ile negatywnych (niedostatecznych).

Przykład 2. Listy mogą też być wykorzystane do pamiętania jakiejś wielkości, która zmienia się w czasie działania programu, bo wykonywane są na niej jakieś operacje (mówimy wtedy, że jest to zmienna dynamiczna, w odróżnieniu od zmiennej statycznej – jaką była lista ocen w poprzednim przykładzie). Spróbujemy napisać program, który będzie symulował grę Taśma, którą poznaliśmy na spotkaniu X.

Ćwiczenie 3. Przypomnij sobie zasady gry Taśma. Zastanów się, w jaki sposób lista mogłaby być odpowiednikiem planszy do tej gry.

Tym razem napiszemy najpierw odpowiedni program w Pythonie. Schemat działania będzie następujący:

  • wczytanie wielkości planszy
  • ustawienie początkowych wartości zmiennych roboczych
  • główna pętla programu: naprzemienne ruchy grających, sprawdzanie czy gra już się nie zakończyła
  • wyświetlenie komunikatu o zwycięzcy
n = int(input("Podaj wielkosc planszy: "))
zajete = 0          # zmienna ta przechowuje ile pol jest 
                    # juz wykorzystanych, dopoki (zajete < n), 
                    # gra toczy sie nadal
                    
plansza = [0]*n     # pusta plansza - lista dlugosci n 
blad = 1            # zmienna pomocnicza 

def ruch(X):
    global blad, zajete, plansza 
    blad=1 
    while blad==1:
        A = int(input("Ruch gracza "+X+": "))
        if A<0 or A>n-1 :
            print("Pole poza plansza - podaj inne.")
        elif plansza[A]!=0 :
            print("Pole zajete - podaj inne.")
        else :
            blad = 0
            plansza[A]=1
            zajete = zajete + 1
            if A>0 and plansza[A-1]==0 :
                plansza[A-1]=1
                zajete = zajete + 1
            if A<n-1 and plansza[A+1]==0 :
                plansza[A+1]=1
                zajete = zajete + 1
        if zajete == n :
            print("Wygral gracz: "+X+"!")
                
while zajete < n:
    ruch("A")
    if zajete < n:
        ruch("B")

Uwaga. Ze względu na przejrzystość kodu, w programie powyżej została wykorzystana tzw. funkcja ruch(), która jest taka sama dla obu graczy – pozwala to uniknąć powielenia tego samego fragmentu ciągu instrukcji. Słowo global sprawia, że wymienione po nim zmienne można używać wewnątrz funkcji tak samo jak poza jej obrębem. W przeciwnym razie komputer utworzyłby nowe zmienne o tych samych nazwach ale ich wartości nie były widoczne poza blokiem dotyczącym instrukcji def. Drugą sprawą jest to, że dla planszy o długości n gracze podając numery poszczególnych pól muszą używać wartości od 0 do n – 1. Wynika to z faktu, że taka jest numeracja kolejnych elementów listy w Pythonie (i w wielu innych językach programowania).

Zadanie. Wykorzystując wcześniej utworzoną listę, spróbuj zaprojektować w Scratchu program symulujący grę Taśma.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *