Przykładowe zadania na poprawę kolokwium: Do I kolokwium: 1
Transkrypt
Przykładowe zadania na poprawę kolokwium: Do I kolokwium: 1
Przykładowe zadania na poprawę kolokwium: Do I kolokwium: 1. Tworzymy ciąg, którego pierwszym wyrazem jest liczba naturalna n, a każdym kolejnym iloczyn cyfr poprzedzającego go wyrazu. Jeśli w ciągu pojawi się liczba jednocyfrowa, to jest ona ostatnim wyrazem tego ciągu. Na przykład dla n = 663 i dla n = 999 mamy następujące ciągi: 663 → 108 → 0 999 → 729 → 126 → 12 → 2 Wiadomo, że dla każdej liczby naturalnej n, tak określony ciąg zakończy się liczbą jednocyfrową. Napisz program pobierający liczbę naturalną n, który kolejno wypisuje wszystkie wyrazy ciągu i zlicza ich ilość. Wejście: n = 999 Wyjście: 999, 729, 126, 12, 2 Ilość wyrazów ciągu: 5 2. Napisz program, który zlicza ilość tych wierszy w pliku o nazwie podanej przez użytkownika, w których występuje zadane przez użytkownika słowo S. Jeśli słowo S występuję w pliku, program podaj numery wierszy i pozycję w wierszu, w których to słowo występuje. Wiersze w pliku i pozycje w wierszu numerujemy od 1. Np. Wejście: S = ''dobry'' dane.txt Piotr jest dobry i już Ania jest uczciwa i tak a …....... to..... dobry jest człowiek Wyjście: Ilość wierszy ze słowem „dobry”: 2 Wiersz nr: 1 Pozycja nr: 3 Wiersz nr: 5 Pozycja nr: 1 3. Utwórz plik o nazwie dane.txt i zapisz w nim 5 wierszy danych. Napisz program, który losowo zmienia kolejność tych wierszy w pliku i zapisuje je w tej nowej kolejności do pliku losowo.txt. Na koniec program zlicza wiersze, które nie zmieniły swojej pierwotnej kolejności i je wyświetla. 4. Utwórz plik, w którym każda linia składa się z imienia (imion) i nazwiska pojedyńczego studenta. Następnie napisz program, który: a) sortuje tę listę studentów względem nazwiska i drukuje posortowaną listę b) sprawdza, czy student o podanym przez użytkownika nazwisku znajduje się na tej liście, jeśli tak drukuje jego numer na posortowanej liście i jego pierwsze imię. Jeśli jest więcej niż jeden student o podanym nazwisku, drukuje wszystkie pierwsze imiona znalezionych studentów i ich numery na posortowanej liście. Do II kolokwium: 1. a) Napisz moduł Date zawierający definicję funkcji wczesniej, której parametrami są dwa łańcuchy oznaczające datę zapisaną w formacie dd.mm.rrrr . Funkcja zwraca wartość True jeśli pierwsza data jest wcześniejsza od drugiej i wartość False w przeciwnym wypadku. Jeśli jeden z łańcuchów jest pusty, funkcja podnosi wyjątek ValueError. Np. >> wczesniej(''12.03.2015'',''16.05.2015'') True >> wczesniej('''',''16.05.2015'') Błąd: ValueError b) Napisz program, który odczytuje plik daty.txt (zakładamy, że w każdej linii jest zapisana jedna data w w/w formacie) i zapisuje do pliku wyjściowego daty_sort.txt posortowane daty od najwcześniejszej do najpóźniejszej (każdą w oddzielnej linii). Użyj do tego celu funkcji wczesniej z modułu Date. Rozwiązanie: #moduł Date def wczesniej(datap,datak): datap = datap.split(".") datak = datak.split(".") datap = [int(datap[0]),int(datap[1]),int(datap[2])] datak = [int(datak[0]),int(datak[1]),int(datak[2])] if datap[2] < datak[2]: #lata return True elif datap[2] == datak[2]: if datap[1] < datak[1]:#miesiące return True elif datap[1] == datak[1]: if datap[0] < datak[0]:#dni return True else: return False else: return False else: return False #moduł główny from Date import wczesniej def najwczes(lista_dat): najwczes = lista_dat[0] for data in lista_dat: if wczesniej(data,najwczes): najwczes = data return najwczes wej = open("daty.txt","r") lista_dat = [] for line in wej: line = line.split() lista_dat.append(line[0]) wej.close() wyj = open("daty_sort.txt", "w") while len(lista_dat) > 0: wyj.write(najwczes(lista_dat) + "\n") lista_dat.remove(najwczes(lista_dat)) wyj.close() 2. a) Utwórz moduł Palindrom zawierający definicję funkcji czy_palindrom, pobierającą jako parametr łańcuch znaków i zwracającą informację czy podany łańcuch jest palindromem, tzn. ciągiem znaków, który czytany od lewej i od prawej strony jest taki sam np. ''atomotomota ''. Funkcja ma zwracać True, jeśli parametr jest palindromem i False, gdy nim nie jest. np. >>czy_palindrom(''ikarraki'') True >>czy_palindrom(''ikarraKi'') False b) Napisz program sprawdzający, czy w pliku tekstowym o nazwie podanej przez użytkownika są linie będące palindromami. Program wypisuje listę składającą się z numerów linii (numerujemy od 1), które są palindromami. Użyj funkcji czy_palindrom z modułu Palindrom. 3. a) Utwórz moduł Sygnalizacja zawierający definicję funkcji zwieksz_zielone pobierającą jako parametr listę liczb całkowitych nieujemnych (składającą się z co najmniej 3 liczb) oraz liczbę całkowitą N > 0. Jeśli na liście pojawią się trzy kolejne liczby w porządku ściśle rosnącym (zwane trójką) i każda z nich będzie przekraczać N, to funkcja zwraca wartość trzeciej liczby(w trójce) oraz jej numer indeksu na liście. Listę numerujemy od 1. Jeśli taka trójka nie pojawi się na liście funkcja zwraca 0. Jeśli wejściowa lista jest pusta lub składa się z mniej niż 3 liczb, funkcja podnosi wyjątek ValueError >>zielone([3, 4, 5, 4, 4, 5, 6, 4], 3) Trzecia liczba w trójce: 6 Nr indeksu: 7 b) Napisz program obsługujący sygnalizację na jednym wlocie skrzyżowania. Pracownik organizacji ruchu podaje liczbę całkowitą N≥0 oraz listę ilości aut pozostających na wlocie po kolejnych cyklach świateł (co najmniej 3 cyklach). W każdym cyklu świateł sterownik zlicza pozostającą na wlocie ilość aut. Jeżeli ilość ta wzrasta w trzech kolejnych cyklach, a jej wartość w każdym z tych trzech kolejnych cykli wynosi więcej niż N samochodów, to światło zielone zielone wydłuża swoją długość o 1s na każde pozostające auto w ostatnim z tych trzech kolejnych cykli. Program ma obliczać po którym cyklu zwiększać długość zielonego światła na tym wlocie i o ile. Użyj funkcji zwieksz_zielone z modułu Sygnalizacja. Np. gdy N = 9 i ilości aut pozostających po kolejnych cyklach tworzą następującą listę: [7, 8, 9, 5, 10, 12, 14, 11, 10] to wynik programu jest następujący. Zwiększyć długość zielonego światła po cyklu nr: 7 o sekund: 14