Projekt G: przeszukiwanie zbioru

Transkrypt

Projekt G: przeszukiwanie zbioru
2016-12-07
Przygotować dwie funkcje wyszukiwania wszystkich wystąpień słowa w zbiorze
tekstowym:
• opartą na liniowym przeszukiwaniu,
• opartą na przeszukiwaniu binarnym
Przygotować funkcje wykonujące następujące operacje na zawartości zbioru tekstowego
• funkcji usuwającej wszystkie znaki, które nie są literami małymi lub
dużymi poza kropkami
• funkcji zamieniającej wszystkie litery na duże
• funkcji zliczającej wszystkie wystąpienia wszystkich możliwych zlepków
trzyliterowych
• funkcji wybierającej z teksu linie, w których ilość wystąpień danej litery jest
większa od pewnej liczby.
Wyniki działania funkcji umieścić w plikach wynikowych
Zadbać, aby testowanie funkcji odbywało się na odpowiednio obszernym tekście
Typ list w Pythonie:
złożony typ danych służący do grupowania różnych wartości
a= ['boczek','jaja', 12, 3.8888]
print(a)
for element in a:
print(element)
https://pl.python.org/docs/tut/node5.html
https://pl.python.org/docs/tut/node7.html
Typ dictionary w Pythonie:
złożony typ danych ”tablica asocjacyjna, ” w odróżnieniu od sekwencji, które są
indeksowane liczbami, słowniki indeksowane są kluczami, które mogą być obiektami dowolnego,
niemutowalnego typu, np. napisy i liczby zawsze mogą być kluczami.
Najlepiej wyobrazić sobie słownik jako nieuporządkowany zbiór par klucz:wartość, z założeniem, że
klucze są unikalne (w jednym słowniku).
Para nawiasów klamrowych tworzy pusty słownik: {}.
telefony = {'janek': 4098, 'kazik': 4139, 'dorota':
1234}
print(telefony)
print(telefony.items())
print(telefony.keys())
print(telefony.values())
0_lista_slownik.py
1
2016-12-07
Algorytmy wyszukiwania:
• wyszukiwanie to powszechne używane i dobrze rozpoznane zadanie.
• formalnie: przy zadanej funkcji porównującej dwie wartości i określonej wartości
znaleźć na zadanej liście pozycję gdzie dana wartość występuje.
• dwa podstawowe algorytmy to
• przeszukiwanie liniowe ( algorytm zachłanny) : sprawdzanie kolejnych wartości
na liście
Znajdź ’J’
Z biblioteki
def linear_search( items, desired_item):
implementacji
for position, item in enumerate(items):
algorytmów
if item == desired_item:
return position
raise ValueError("%s was not found in the list." % desired_item)
http://python-textbok.readthedocs.io/en/1.0/Sorting_and_Searching_Algorithms.html
Built-in Functions
abs()
divmod()
input()
open()
staticmethod()
all()
enumerate()
int()
ord()
str()
any()
eval()
isinstance()
pow()
sum()
basestring()
execfile()
issubclass()
print()
super()
bin()
file()
iter()
property()
tuple()
bool()
filter()
len()
range()
type()
bytearray()
float()
list()
raw_input()
unichr()
callable()
format()
locals()
reduce()
unicode()
chr()
frozenset()
long()
reload()
vars()
classmethod()
getattr()
map()
repr()
xrange()
cmp()
globals()
max()
reversed()
zip()
compile()
hasattr()
memoryview()
round()
__import__()
complex()
hash()
min()
set()
delattr()
help()
next()
setattr()
dict()
hex()
object()
slice()
dir()
id()
oct()
sorted()
2
2016-12-07
enumerate()
jedna z wbudowanych funkcji Pytona. Zwraca ponumerowany obiekt. Ten obiekt
to lista par. Każda para składa się z indeksu i wartości.
Przykład:
choices = ['apple', 'banana', 'grapes', 'pear']
print (list (enumerate(choices)) )
wyświetli
[(0, ’apple'), (1, ’banana'), (2, ’grapes'), (3, ’pear')]
raise ValueError()
Instrukcja raise służy do wymuszania pojawienia się podanego wyjątku,
Jest to opieka/obsługa wyjątkowych sytuacji. U nas brak znalezionego słowa.
formatowane wyjścia
print("%10.3f"% (356.08977))
print("%10.3e"% (356.08977))
print("Cena produktu to %5.2f zl"% (356.08977))
1A_linear_search.py
1_linear_search.py
• Przeszukiwanie binarne: wymaga listy posortowanej.
• czy element z połówkowy listy to poszukiwany element
• jeśli nie:
• czy element połówkowy listy jest większy niż poszukiwany element
• Jeśli tak to przeszukuj binarnie prawą połówkę
• Jeśli nie to przeszukuj binarnie lewą połówkę
Znajdź ’J’
def binary_search(items, desired_item, start=0, end=None):
if end == None:
2A_binary_search.py
end = len(items)
2B_binary_search.py
if start == end:
raise ValueError("%s was not found in the list." % desired_item)
pos = (end - start) // 2 + start
if desired_item == items[pos]:
return pos
elif desired_item > items[pos]:
return binary_search(items, desired_item, start=(pos + 1), end=end)
else: # desired_item < items[pos]:
return binary_search(items, desired_item, start=start, end=pos)
3
2016-12-07
Phython for Biologists: 8: Dictionaries
Lista
a
slownik
dna = "AATGATCGATCGTACGCTGA"
all_counts = []
all_trinucleotides = []
for base1 in ['A', 'T', 'G', 'C']:
for base2 in ['A', 'T', 'G', 'C']:
for base3 in ['A', 'T', 'G', 'C']:
trinucleotide = base1 + base2 + base3
count = dna.count(trinucleotide)
all_counts.append(count)
all_trinucleotides.append(trinucleotides)
print(all_counts)
print(all_trinucleotides)
dna = "AATGATCGATCGTACGCTGA"
counts = {}
for base1 in ['A', 'T', 'G', 'C']:
for base2 in ['A', 'T', 'G', 'C']:
for base3 in ['A', 'T', 'G', 'C']:
trinucleotide = base1 + base2 + base3
count = dna.count(trinucleotide)
counts[trinucleotide] = count
print(counts)
3_zmieniaj_plik.py
4