Wstęp do Informatyki II - rok akademicki 2017/2018

Przed rozpoczęciem pracy z notatnikiem zmień jego nazwę zgodnie z wzorem: {NrAlbumu}_{Nazwisko}_{Imie}_{PoprzedniaNazwa}.

Przed wysłaniem notatnika upewnij się, że rozwiązałeś wszystkie zadania/ćwiczenia, w szczególności, że uzupełniłeś wszystkie pola YOUR CODE HERE oraz YOUR ANSWER HERE. Możesz również sprawdzić czy twoje rozwiązania przechodzą wstępną walidację (Validate).

Temat: Wprowadzenie do środowiska Jupyter. Typy liczbowe.

Zapoznaj się z treścią niniejszego notatnika czytając i wykonując go komórka po komórce. Wykonaj napotkane zadania/ćwiczenia.

Informacje wstępne

Instalacja Windows

Na zajęciach korzystać będzimy z Pythona w wersji 3.6+ z dystrybucji Anaconda. W salach komputerowych Anaconda została już zainstalowana. Do korzystania na własnych komputerach można pobrania z: https://www.continuum.io/downloads. Jest to dystrybucja Pythona co oznacza, że instalujemy interpreter jaki całą masę dodatkowych pakietów, listę pakietów można zleźć tu: https://docs.continuum.io/anaconda/pkg-docs. Instalujemy z domyślnymi ustawieniami czyli klikamy Next, Next, ...

Po zainstalowaniu w menu Start pojawi się Anaconda3

Podczas zajęć pracujemy z wykorzystaniem narzędzia Jupyter Notebook (dostępnego w Start -> Anaconda -> Jupyter Notebook). Jest to interaktywna konsola Pythona (pracująca w oparciu o przeglądarkę) w postaci notebooka (ala notebook w Mathematice), czyli taki plik jak właśnie przeglądasz, więcej o Jupyter na http://jupyter.org/.

Alternatywnie

Można zainstalować sobie "czystą" wersje Pythona w wersji 3.6+ ze strony https://www.python.org/. Podczas instalacji należy zaznaczyć "dadaj do PATH" czy jakoś tak, co spowoduje że będziemy mogli korzystać z interpretera pythona bezpośrednio w konsoli cmd bez podawania ścieżki.

Instalując "czystego Pythona" zainstalujemy tylko podstawowe biblioteki, aby móc korzystać z Jupyter Notebook trzeba go sobie samemu doinstalować. Aby to zrobić trzeba w konsoli cmd wpisać polecenie

pip install jupyter

czasami zamiast pip trzeba użyć pip3 (zwłaszcza jak korzysta się Pythona w obu wersjach 2 i 3). Czasami trzeba też zakutualizować narzędzie pip, do tego służy polecenie

pip install --upgrade pip

Jakby brakowało innych pakietów to należy je zainstalować w analogiczny sposób, tj.

pip install nazwa_pakietu

Dokumentacja Python 3 (https://docs.python.org/3/).

Jupyter Notebook

Najłatwiej uruchomić Jupyter Notebook klikając w Start -> Anaconda -> Jupyter Notebook, jednak lepiej uruchomić konsolę cmd, ustawić się w katalogu (należy go wcześniej utworzyć), w którym przechowywane będą materiały z zajęć komendą

cd sciezka\do\katalogu

a następnie uruchomić Jupyter Notebook komendą

jupyter notebook

Tak procedura spowoduje, że Jupyter uruchomi się w przeglądarce i odrazu ustawi jako katalog roboczy folder który sobie stworzyliśmy.

Czasami przy pierwszym uruchomieniu w konsoli pojawia się link z tokenem, który należy skopiować i wkleić do przeglądarki www.

Zaczynamy

Komentarze w kodzie

In [ ]:
# to jest komentarz jednolinijkowy, interpreter pomija linie zaczynające się od '#'
# Wykonaj komórkę (Shift+Enter) i zobacz że nic się nie wykona
In [ ]:
"""
To jest komentarz wielolinijkowy, wszystko pomiędzy trzema znakami cudzysłowia (alternatywnie trzema apostrofami)
traktowane jest jako łańcuch znaków. Jeśli nie zostanie on przypisany do żadnej zmiennej to będzie traktowany jako 
komentarz. Często taki sposób wykorzystywany jest do dokumentowania kodu.
"""

Funkcja print()

Funkcja print() przyjmuje dowolną liczbę argumentów, dowolnego typu (no nie do końca dowolnego) i ma też parę parametrów/opcji, ale o tym innym razem.

Funkcja print jest tak zwaną funkcją wbudowaną, inne dostępne i czasami przydatne funkcje wbudowane https://docs.python.org/3/library/functions.html.

In [ ]:
print('Hello')
print('Hello',1,3,[1,3],2+4j)
print('Hello',1,3,[1,3],2+4j, sep=';',end=':')

Podstawowe typy danych

Python jest językiem dynamicznie typowanym, to znaczy, że nie ma potrzeby jawnego określania typu danej zmiennej, interpreter zrobi to za nas sam. Co więcej Python jest językiem w pełni obiektowy, w którym również zmienne są obiektami.

Typ int (liczby całkowite)

In [ ]:
a = 2    # przypisujemy zmiennej a liczbę całkowitą 2
print(a) # wydruk zmiennej a
type(a)  # wbudowana funkcja type() zwraca typ danego obiektu

Przykładowe metody obiektu int. Wciskając po napisaniu kropki Tab wyświetlone zostaną dostępne pola i metody danego obiektu.

In [ ]:
a.bit_length()

Typ float (liczba zmiennoprzecinkowa)

In [ ]:
b = 2.5
print(b)
type(b)
In [ ]:
b.is_integer()

Typ complex (liczba zespolona)

In [ ]:
z = 2+4j # j jednostka urojona, piszemy z prawej strony bez spacji
print(z)
type(z)
In [ ]:
z.imag

Typ bool (prawda, fałsz)

In [ ]:
prawda = True
falsz = False
type(prawda)

Typ tuple (krotka)

Krotka to zestawienie kilku obiektów w jeden obiekt. Mogą to być obiekty różnych typów.

In [ ]:
a = (1, 2, 3, 4)
b = (1, 3.5, 'a', a)
print(a)
print(b)
print(len(a))
type(a)

Elementy krotki można rozpakować do pojedynczych zmiennych.

In [ ]:
# rozpakowywanie krotki
a,b,c = (1, 2.5, 1+3j)
d = (1, 2.5, 1+3j)
print(a)
print(b)
print(c)
print(d)

Krotka jest obiektem niemodyfikowalnym tzn. nie można przypisać nowego wartości na danej pozycji.

In [ ]:
k = (1, 2.5)
print(k[0])
k[0] = 4.5

Typ str (łańcuch znaków)

In [ ]:
z = 'Witaj świecie'
print(z)
type(z)
In [ ]:
print(z.upper())

Operatory arytmetyczne (+, -, *, /, //, **, %)

In [ ]:
# dwie liczby typu int
a = 2
b = 5
print(a+b)
print(a-b)
print(a*b)
print(a/b) # rzutuje na float
print(a//b) # int
print(a**b) # potęgowanie
print(a%b) # reszta z dzielenia, modulo

Operatory arytmetyczne definiowane są również dla prawie wszystkich typów danych nie tylko liczbowych. Co ważne, Python jest silnie typowany co oznacza m.in., że nie można dowolnie łączyć typów w operacjach arytmetycznych.

In [ ]:
2.5 + 'a'

Jednak dla niektórych typów działa tak zwana konwersja niejawna (rzutowanie na obiekt klasy "nadrzędnej")

In [ ]:
a = 2.5 + (2-3j)
print(a)
type(a)

Operatory porównania ( ==, >, >=, <, <=, !=)

Zawsze zwracany jest typ bool (True, False).

In [ ]:
print(2==3)
print(2!=3)
print(2<3)

Operatory is, is not oraz słowo kluczowe None

In [ ]:
a = 2
b = 3
c = 2
print(a is b)
print(a is c)
print(b is not c)
d = None  # None oznacza 'nic', pusty obiekt
print(d is None)

Biblioteka matematyczna math.

W Python wbudowane są niektóre podstawowe finkcje matematyczne, taki jak abs, min, max, sum, pow. Inne znaleźć można w bibliotece (module) math. Import bibliotek (modułów, pakietów) w języku Python dokonuje się za pomocą słowa kluczowego import.

In [ ]:
print(min(1,2,-4,2))
print(max(2, 1.4, 3, 5.5))
abs(-4)
In [ ]:
# aby wczytać pakiet math wpisujemy
import math
# możemy zaimportowac tylko wybrane funkcje
from math import sin, cos
In [ ]:
math.log(1)
In [ ]:
sin(math.radians(90))

Wprowadzanie wartości z klawiatury input()

Funkcja input() zwraca obiekt typi str (łańcuch znaków/napis). Wobec czego jeśli chcemy wprowadzić liczbę musimy ją po wczytaniu skonwertować na odpowiedni typ stosują metody int(), float() lub complex().

In [ ]:
a = input()
print('Wprowadzona wartość to:', a)
print('Typ wprowadzonej wartości:', type(a))

Ćwiczenie 1:

Napisz program, który dla podanej liczby rzeczywistej zwróci licznik i mianownik z ułamka zwykłego tej liczby.

Rozwiązanie:

In [ ]:
print('Podaj liczbe rzeczywsitą: ')
a = input()
a = float(a)
b = a.as_integer_ratio()
print('Licznki:', b[0])
print('Mianowni:', b[1])

Zadanie 1

Napisz program, który przeczyta ze standartowego wejścia dwie liczby rzeczywiste i zapisze je kolejno w zmiennych $x$, $z$ typu float, przeczyta dwie liczby całkowite i zapisze je w zmiennych $i$, $j$ typu int, a następnie obliczy wartości następujących wyrażeń arytmetycznych: $$w=\sqrt[3]{\frac{x+2}{i}} \sin^{j}(x^2+z^2)$$ $$v={\frac{\ln x^2+2x^2+z^{-2}}{(x+z)i}}+\frac{i}{j} $$ $$y={\frac{x \ln(x^2+1)}{2}}\sin^{2}(2x^2-1) $$

Dla $x=1.5, z=2.3, i=2, j=3\ $ wyrażenia te mają wartości:

$w = 1.036828279188784,\quad v = 1.3903464210141043,\quad y = 0.10877412656500485$

In [ ]:
import math

# YOUR CODE HERE
raise NotImplementedError()

Zadanie 2

Jaka jest wartość funkcji: $$ F(x,y)=\frac{1}{f}\left(-ae^{[-b\sqrt{\frac{1}{n}(x^2+y^2)}]}-e^{[\frac{1}{n}(\cos(cx)+\cos(cy))]}+a+e+d \right) $$ dla $a=20, b=0.2, c=2\pi, d=5.7, f=0.8, n=2$ w punktach:

a) $(x,y) = (-1.0,1.0)$

b) $(x,y) = (0.0,1.0)$

In [ ]:
import math

# YOUR CODE HERE
raise NotImplementedError()

Zadanie 3

Napisz program, który obliczy pole oraz objętość walca. Użyj stałej $\pi$ z biblioteki math.

In [ ]:
import math

print('Podaj wysokość walca: ')
h = input()
print('Podaj promień podstawy: ')
r = input()
# YOUR CODE HERE
raise NotImplementedError()

Zadanie 4

Napisz program, który zaokrągli podaną liczbę w górę do podanej liczby miejsc po przecinku.

In [ ]:
import math

print('Podaj liczbę: ')
liczba = input()
print('Podaj liczbę miejsc po przecinku: ')
miejsca = input()
# YOUR CODE HERE
raise NotImplementedError()

Zadanie 5

Napisz program, który zamieni wspórzędne biegunowe na współrzędne kartezjańskie i odwrotnie. Można skorzytać z biblioteki cmath (https://docs.python.org/2/library/cmath.html) a dokładniej z funkcji cmath.rect oraz cmath.polar.

Biegunowe -> Kartezjańskie

In [ ]:
import math
import cmath

print('Podaj odległość: ')
r = input()
print('Podaj kąt (w stopniach): ')
f = input()
# YOUR CODE HERE
raise NotImplementedError()

Kartezjańskie -> Biegunowe (jako zadanie domowe)

In [ ]:
import math
import cmath

print('Podaj współrzędną x: ')
x = input()
print('Podaj współrzędną y: ')
y = input()
# YOUR CODE HERE
raise NotImplementedError()
© Instytut Informatyki, Politechnika Krakowska