9_1. Napisz definicję funkcji zamień, która zamienia liczbę zapisaną
Transkrypt
9_1. Napisz definicję funkcji zamień, która zamienia liczbę zapisaną
'''9_1. Napisz definicję funkcji zamień, która zamienia liczbę zapisaną w systemie szestnastkowym na liczbę w systemie dwójkowym. Zarówno dane, jak i wynik, powinny być w postaci łańcucha cyfr (odpowiednio szesnastkowych i dwójkowych), np. ‘4bf’ powinno być zamienione na ‘010010111111’. Zamieniaj znaki przy pomocy słownika (klucze to znaki odpowiadające cyfrom szesnastkowym).''' def zamien(szesn): kod = {'1': '0001', '2': '0010', '3': '0011', '4': '0100', '5': '0101', '6': '0110', '7': '0111', '8': '1000', '9': '1001', 'a': '1010', 'b': '1011', 'c': '1100', 'd': '1101', 'e': '1110', 'f': '1111'} cyfra_2 = '' for cyfra in szesn: cyfra = kod[cyfra]# lub kod[cyfra.lower()] gdy dopuszczamy duże litery szesnastkowe cyfra_2 += cyfra return cyfra_2 '''9_2. Użyj słownika do zdefiniowania funkcji znajdującej najczęstsze słowo w czytanym pliku i drukującej zarówno to słowo, jak i liczbę jego wystąpień (znajdowanie mody).''' def moda(plik): f = open(plik,'r') lista = f.read().split() slownik = {} for slowo in lista: if slowo not in slownik: slownik[slowo] = 1 else: slownik[slowo] += 1 i=0 dominanty = '' for slowo in slownik: if slownik[slowo] == max(slownik.values()): i += 1 dominanty = dominanty +' ' + slowo if i == 1: print('Jest tylko jedno najczęściej występujące słowo, zatem moda istnieje:') print(dominanty,max(slownik.values())) elif 1< i < len(slownik): print('Są',i,'dominanty, czyli słowa występujące najczęściej:') print(dominanty,'każde',max(slownik.values()),'razy') else: print('Nie ma dominant, wszystkie słowa występuja z tą samą częstością',max(slownik.values())) '''9_3. Napisz definicję funkcji, która zamienia ocenę liczbową na słowną, np. 3,5 na dostateczny plus. Użyj do tego celu słownika.''' def zamiana(ocena_liczbowa): kod = {2:'niedostateczny', 3:'dostateczny plus', 3.5:'dostateczny plus', 4:'dobry', 4.5:'dobry plus', 5:'bardzo dobry'} if ocena_liczbowa in kod: return kod[ocena_liczbowa] else: print("Nie ma takiej oceny u nas") '''9_4. Napisz funkcję, która pobiera z wejścia listę liczb całkowitych, a następnie zwraca zbiór tych liczb z listy, które występują na niej więcej niż raz.''' # bez użycia słownika def rep_1(lista): return {liczba for liczba in lista if lista.count(liczba) > 1} # bez użycia słownika def rep_2(lista): rep = set() for liczba in lista: if lista.count(liczba)>1: rep.add(liczba) return rep # bez użycia słownika def rep_3(lista): rep = set() i=0 for liczba in lista: i+=1 for liczbaa in lista[i:]: if liczba == liczbaa: rep.add(liczba) return rep # z użyciem słownika def rep_4(lista): powt = {} rep = set()#zbiór pusty for liczba in lista: if liczba not in powt: powt[liczba] = 1 else: powt[liczba] += 1 for liczba in powt: if powt[liczba] > 1: rep.add(liczba) return rep # z użyciem słownika def rep_5(lista): powt = {} for liczba in lista: if liczba not in powt: powt[liczba] = 1 else: powt[liczba] += 1 return {liczba for liczba in powt if powt[liczba] > 1} '''9_5. Napisz funkcję, której jedynym argumentem jest słownik, i która zwraca liczbę różnych wartości, które ten słownik zawiera. Np. dla {‘jeden’:1, ‘two’:2, ‘one’:1} odpowiedź powinna być 2.''' def rozne_wartosci(slownik): return len(set(slownik.values())) def r(s): i=0 values = [] for klucz in s: if s[klucz] not in values: values.append(s[klucz]) i+=1 return i #len(values) '''9_6. Wektor rzadki to taki, który zawiera wiele zer. By nie tracić miejsca, można go zapisać w postaci słownika, na przykład [0,1,0,0,0,2,0,3,0,0,0,0,0,0,0,5] można zapisać jako {1:1, 5:2, 7:3,15:5} (to znaczy kluczami są indeksy niezerowych wartości). Napisz program, który dodaje dwa wektory rzadkie zapisane w postaci słowników, a także program, który liczy ich iloczyn skalarny.''' def suma_1(v1,v2): suma = {} suma_kluczy = set(v1.keys()) | set(v2.keys()) #suma kluczy for klucz in suma_kluczy: if klucz in v1.keys() and klucz not in v2.keys(): suma[klucz] = v1[klucz] elif klucz in v2.keys() and klucz not in v1.keys(): suma[klucz] = v2[klucz] else: suma[klucz] = v1[klucz] + v2[klucz] return suma #z użyciem metody get def suma_2(v1,v2): suma = {} suma_kluczy = set(v1.keys()) | set(v2.keys()) #suma kluczy for klucz in suma_kluczy: suma[klucz] = v1.get(klucz,0) + v2.get(klucz,0) return suma def iloczyn(v1,v2): iloczyn = {} iloczyn_kluczy = set(v1.keys()) & set(v2.keys()) #cz??? wsp?lna kluczy for klucz in iloczyn_kluczy: iloczyn[klucz] = v1[klucz]*v2[klucz] return iloczyn v1 = input("Podaj pierwszy wektor: ") v2 = input("Podaj drugi wektor: ") print(suma_2(eval(v1),eval(v2))) print(iloczyn(eval(v1),eval(v2))) '''9_7. Napisz funkcję, której jedynym argumentem jest słownik. Funkcja ta nie zwraca żadnej wartości, ale drukuje ten słownik w zwykły sposób, ale tak, by klucze były uporządkowane od najmniejszego do największego. Np. {4:’ala’, 3:’basia’, 1: ‘cesia’} powinno być zamienione na {1: ‘cesia’, 3:’basia’, 4: ‘ala’}''' def sortedDictValues1(adict): keys = list(adict.keys()) keys.sort() print({key: adict[key] for key in keys}) def sortedDictValues2(adict): items = list(adict.items()) items.sort()#domyślne sortowanie wg kluczy print({key:value for key, value in items})