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})

Podobne dokumenty