forked from tdwojak/Python2018
Add examples to labs04
This commit is contained in:
parent
b3ba876bb1
commit
91c41d467c
37
labs04/examples/06_execution_time.py
Executable file
37
labs04/examples/06_execution_time.py
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
ExecutionTime
|
||||||
|
|
||||||
|
This class is used for timing execution of code.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
timer = ExecutionTime()
|
||||||
|
print 'Hello world!'
|
||||||
|
print 'Finished in {} seconds.'.format(timer.duration())
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
|
||||||
|
|
||||||
|
class ExecutionTime:
|
||||||
|
def __init__(self):
|
||||||
|
self.start_time = time.time()
|
||||||
|
|
||||||
|
def duration(self):
|
||||||
|
return time.time() - self.start_time
|
||||||
|
|
||||||
|
|
||||||
|
# ---- run code ---- #
|
||||||
|
|
||||||
|
|
||||||
|
timer = ExecutionTime()
|
||||||
|
sample_list = list()
|
||||||
|
my_list = [random.randint(1, 888898) for num in
|
||||||
|
range(1, 1000000) if num % 2 == 0]
|
||||||
|
print('Finished in {} seconds.'.format(timer.duration()))
|
31
labs04/examples/25_ip2geolocation.py
Executable file
31
labs04/examples/25_ip2geolocation.py
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
import csv
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def get_address():
|
||||||
|
"""
|
||||||
|
Given a CSV file, this function returns a list of lists
|
||||||
|
where each element (list) in the outer list contains the
|
||||||
|
row info from the csv file.
|
||||||
|
"""
|
||||||
|
all_addresses = [requests.get('http://ip.42.pl/raw').text.strip()]
|
||||||
|
return all_addresses
|
||||||
|
|
||||||
|
|
||||||
|
def get_geolocation(ip_address):
|
||||||
|
"""
|
||||||
|
Given a list of lists from `get_addresses()`, this function
|
||||||
|
returns an updated lists of lists containing the geolocation.
|
||||||
|
"""
|
||||||
|
print("Getting geo information...")
|
||||||
|
# update header
|
||||||
|
# get geolocation
|
||||||
|
for line in all_the_ip_address:
|
||||||
|
print("Grabbing geo info")
|
||||||
|
r = requests.get('https://freegeoip.net/json/{0}'.format(line))
|
||||||
|
print([str(r.json()['country_name']), str(r.json()['city'])])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
all_the_ip_address = get_address()
|
||||||
|
get_geolocation(all_the_ip_address)
|
47
labs04/examples/fib.py
Normal file
47
labs04/examples/fib.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
Obliczenie n-tego wyrazu ciągu fibonacciego na dwa sposoby.
|
||||||
|
1. Naiwna rekurencja: podstawienie do wzoru.
|
||||||
|
2. Wersja z cachem: każdy wyraz jest obliczany dokładnie raz.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def naive_fibonacci(n):
|
||||||
|
if n <= 0:
|
||||||
|
return 0
|
||||||
|
if n in [1,2]:
|
||||||
|
return 1
|
||||||
|
return naive_fibonacci(n-1) + naive_fibonacci(n-2)
|
||||||
|
|
||||||
|
|
||||||
|
def cache_fibonacci(n, cache=None):
|
||||||
|
if cache is None:
|
||||||
|
cache = [None for i in range(n+1)]
|
||||||
|
cache[0] = 0
|
||||||
|
cache[1] = cache[2] = 1
|
||||||
|
return cache_fibonacci(n, cache)
|
||||||
|
else:
|
||||||
|
if cache[n] is not None:
|
||||||
|
return cache[n]
|
||||||
|
else:
|
||||||
|
cache[n] = cache_fibonacci(n-1, cache) + cache_fibonacci(n-2, cache)
|
||||||
|
return cache[n]
|
||||||
|
|
||||||
|
def non_reccurent_fibonacci(n):
|
||||||
|
cache = [None for i in range(n+1)]
|
||||||
|
cache[0] = 0
|
||||||
|
cache[1] = cache[2] = 1
|
||||||
|
for i in range(2, n + 1):
|
||||||
|
cache[i] = cache[i-1] + cache[i-2]
|
||||||
|
return cache[n]
|
||||||
|
|
||||||
|
for i in [5, 10, 15, 20, 30, 40]:
|
||||||
|
print("Naive fibonacci for ", i, ":", naive_fibonacci(i))
|
||||||
|
|
||||||
|
for i in [5, 10, 15, 20, 30, 40, 100]:
|
||||||
|
print("cache fibonacci for ", i, ":", cache_fibonacci(i))
|
||||||
|
|
||||||
|
for i in [5, 10, 15, 20, 30, 40, 100]:
|
||||||
|
print("no-recurrent fibonacci for ", i, ":", non_reccurent_fibonacci(i))
|
||||||
|
|
11
labs04/examples/myip.py
Normal file
11
labs04/examples/myip.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
This simple script fetches your IP as seen by web pages, and displays it.
|
||||||
|
|
||||||
|
Execute this script locally like that:
|
||||||
|
$ curl -s https://raw.github.com/gist/3389407/myip.py | python
|
||||||
|
"""
|
||||||
|
import requests
|
||||||
|
|
||||||
|
print(requests.get('http://ip.42.pl/raw').text)
|
39
labs04/examples/wc.py
Normal file
39
labs04/examples/wc.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
Implementacja narzedzia ``wc`` z linuksa (word counter).
|
||||||
|
Zwraca liczbę słów, znaków i linii.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def count_lines(text):
|
||||||
|
""" return number of lines. """
|
||||||
|
return len(text.strip().split('\n'))
|
||||||
|
|
||||||
|
def count_words(text):
|
||||||
|
""" return number of words. """
|
||||||
|
return sum([len([1 for word in line.split(' ') if len(word)])
|
||||||
|
for line in text.split('\n')])
|
||||||
|
|
||||||
|
def count_chars(text):
|
||||||
|
""" return number of words. """
|
||||||
|
return len(text)
|
||||||
|
|
||||||
|
def wc(text):
|
||||||
|
""" proper wc """
|
||||||
|
lines = count_lines(text)
|
||||||
|
words = count_words(text)
|
||||||
|
chars = count_chars(text)
|
||||||
|
return lines, words, chars
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
""" main """
|
||||||
|
print(wc(sys.stdin.read()))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user