Python nauka

Wstęp

Naukę warto rozpocząć zapoznania się z podstawową składnią języka Python.
Składnia jest bardzo fajnie wytłumaczona na stronie w3schools.com.

Strona jest po angielsku, ale jest napisana bardzo prostym językiem. Jeżeli chcesz programować to musisz zaczać przyzwyczajać się do języka angielskiego.
Odpowiedzi na wiele probemów nie znajdziesz po polsku. W języku angielskim znajdziesz odpowiedź na kazde pytanie 😉

Następny krok to zrobienie prostych zadań z Python. Znajdziesz je na w3resource.com.
Zadania ze strony w3resource mają też klucz odpowiedzi, więc jeżeli nie bedziesz wiedział jak coś zrobić, to możesz podejżeć odpowiedź.

Kolejny krok to robienie prawdziwych zadań z Polskiego SPOJ’a.
Zrób ich około 50. Wtedy zrozumiesz jak są pisane tego typu zadania i jak się je rozwiązuje. Język polski ułatwi Ci zrozumienie treści zadań.

Zapraszam też na super stronę do nauki programowania HeckerRank. Jest ona po angielsku ale możesz na niej zaczynać od prostrzych zagadnień.

Kolejny krok to przerzucenie się na na SPOJ’a anglojęzycznego. Rozwiązując zadania na SPOJ’u międzynarodowym będziesz podnosić swój ranking. Będziesz mógł zobaczyć jak jesteś dobry w stosunku do programistów z całego świata.
Twoje zadanie to wykonanie 100 zadań. Staraj się rozwiązywać zadania coraz trudniejsze.

Następny krok to stworzenie swojej własnej aplikacji w Python. Możesz spróbować zrobic to samodzielnie w oparciu o tutoriale na Youtube i książki.

Przy pisaniu aplikacji będziesz potrzebował GIT

Linki do nauki GIT:
Guthub dla zielonych
Git dla początkujących

Prowadzenie zajęć z programowania lub organizacja konkursów

Jeżeli chcesz prowadzić zajęcia z programowania to istnieje do tego super platforma education.sphere-engine.com. Platforma ta korzysta z tysięcy zadań SPOJ i obsługuje automatyczne ocenianie studentów.

Poniżej przedstawiam informacje pomocne w nauce Python, zarówno przy rozwiązywaniu zadań na SPOJ jak i tworzeniu własnej aplikacji.

Uruchomienie programu w konsoli Windows

python run.py

Kompilator online Python 3.5

Colaboratory

PyCharm – najlepsze środowisko do pisania w Python

Pobierz PyCharm

Instalacja PyGame na Windows

PyGame służy do tworzenia gier w Python’ie. Proces instalacji jest dobrze wytłumaczony w filmie.

Instalacja Django

Django służy do tworzenia webowych aplikacji.

Jak zainstalować Django.

Kivy

Jest to biblioteka służąca do tworzenia aplikacji mobilnych na IOS i Androida w Python.

Trzy sposoby łaczenia stringa ze zmiennymi

imie = "Konrad"
wiek = 20
print("Cześć",imie,". Ty masz",wiek,"lat." )
print("Cześć %s. Ty masz %d lat." % (imie, wiek))
print("Cześć {}. Ty masz {} lat.".format(imie, wiek))

Zmiana koloru czcionki

print("\u001b[32mHello World")
print("\u001b[31mHello Poland")

Kody kolorów tekstu:
Bright Black: \u001b[30;1m
Bright Red: \u001b[31;1m
Bright Green: \u001b[32;1m
Bright Yellow: \u001b[33;1m
Bright Blue: \u001b[34;1m
Bright Magenta: \u001b[35;1m
Bright Cyan: \u001b[36;1m
Bright White: \u001b[37;1m

Reset: \u001b[0m

Kody kolorów tła:
Background Black: \u001b[40m
Background Red: \u001b[41m
Background Green: \u001b[42m
Background Yellow: \u001b[43m
Background Blue: \u001b[44m
Background Magenta: \u001b[45m
Background Cyan: \u001b[46m
Background White: \u001b[47m

Reset: \u001b[0m

Zmiana koloru całego okna konsoli:

import os
os.system('color 1f') # ustawia tło na niebieski kolor

Zmiana czcionki

import os
os.console.font = 'Lucida Console'

Zmiana tytułu aplikacji

from os import system
system("title "+myCoolTitle)

Zatrzymanie działania programu na jakiś czas

Program wypisuje # co jedną pół sekundy.

for i in range(20):
    print("#", end="")
    time.sleep(0.5)

Czyszczenie ekranu – konsoli

W PyCharm to nie widać efektu ale jak uruchomicie program poza PyCharm, to wszystko będzie dobrze działało.

import os
import time
for x in range(10):
    print(x)
    time.sleep(1)
    os.system('cls')

Inna metoda

import os
clear = lambda: os.system("cls")
clear()

Odczytanie zawartosci pliku

plik1 = open('tekst.txt').read()
print(plik1)

Zapis do pliku

Usuwa on wszystko co było wcześniej w pliku

plik = open('tekst.txt', 'w')
plik.write("Nowa treść")
plik.close()

Nadpisanie pliku do nowej linii

plik1 = open('tekst.txt').read()
print(plik1)

plik = open('tekst.txt', 'w')
plik.write(plik1 + "\nTreść w nowej linii")
plik.close()

Jak wczytać dwa znaki w jednej linii oddzielone spacją

a, b = input().split()

Jak wyświetlić nr ASCII znaku char

print (ord('a'))

Jak wyświetlić znak po nr ASCII

print (chr(97))

Tabela kodów ASCII

Link do tabeli ASCII

Odtwarznie muzyki w Pycharm

time.sleep() jest nam potrzebny by słychać było muzykę. Pycharm będzie odtwarzać muzykę tyle czasu ile sekund wpiszesz do nawiasu.
sound_file.stop() możesz użyć do nagłego przerwania odtwarzania.

Jak zaimportować vlc?
File -> Settings -> kliknij na nazwę projektu -> Project interpreter -> kliknij na + z prawej strony ->wyszuka python-vlc

Utwór nr 1 do pobrania
Utwór nr 2 do pobrania

import vlc
import time

sound_file = vlc.MediaPlayer("mv.mp3")
sound_file.play()
time.sleep(200)
#sound_file.stop()

Obliczenia statystyczne w Python – numpy

Do obliczeń statystycznych w Python’ie używa się biblioteki – numpy
Aby zainstalować tę bibliotekę w PyCharm kliknij: File -> Settings -> Project: nazwa_projektu -> Project Interpreter
Następnie kliknij w plusik po prawej stronie. Wpisz: numpy i kliknij na dole: Install Package
Następnie możesz zamknąć te okno i w oknie Settings kliknij ok.

Średnia arytmetyczna, mediana, percentyl w numpy

import numpy as np
lista = [1, 2, 3, 4]
#średnia arytmetyczna
print(np.mean(lista))
#mediana
print(np.median(lista))
#percentyl - poniżej 15sty percentyl
print(np.percentile(lista, 15))

Łączenie Pytona z MySQL

#aby można było się połączyc z bazą danych mysql należy zaimportować
#file -> Settings-> Nazwa projektu -> Project Interpreter -> kliknij plus ->mysql-connector

import mysql.connector

#dla łączenia się z db4free.net robimy tak jak u dołu, user i password wpisujesz własne
mydb = mysql.connector.connect(
    host="db4free.net",
    user="wlasny",
    password="wlasne"
)

#https://www.youtube.com/watch?v=-YU36D7oTLA
mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")

for db in mycursor:
    print(db)

Dodanie tabeli do bazy danych i wyświetlenie wszystkich tabel w bazie danych

Poniżej password wpisałem database. Tabela musi powstać w konkretnej bazie danych.

import mysql.connector

mydb = mysql.connector.connect(
    host="db4free.net",
    user="wlasny",
    password="wlasne",
    database="wlasna_nazwa"
)

mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE imiona(imie VARCHAR(200) NOT NULL)")
mycursor.execute("SHOW TABLES")

for db in mycursor:
    print(db)

Pobieranie danych historycznych z giełdy Binance

#biblioteka potrzbna do pobierania json
import json
# biblioteka potrzbna do dobrego ułożenia danych pobranych
# z json w zmiennej data
import requests
#link do pobierania danych historycznych z binance
root_url = 'https://api.binance.com/api/v1/klines'
# para walutowa jakiej dane chcemy pobrać
symbol = 'STEEMETH'
# interwał jaki chcemy pobrać
interval = '1h'
# łączymy link, parę walutową i interwał w jedno
url = root_url + '?symbol=' + symbol + '&interval=' + interval
# wstawiamy do zmiennej data wartości
data = json.loads(requests.get(url).text)
# wypisanie na ekranie wartości
for el in data:
    print(el)

Tworzenie pliku CSV przy pomocy Python i zapis jednej linii

import csv

with open('mycsv.csv', 'w', newline='') as f:
    thewriter = csv.writer(f)

    thewriter.writerow(['col1', 'col2', 'col3'])

Progam pobierający historyczne kursy jednominutowe BTC do Tethera z giełdy Binance

#biblioteka potrzbna do pobierania json
import json
# biblioteka potrzbna do dobrego ułożenia danych pobranych
# z json w zmiennej data
import requests
import csv
#link do pobierania danych historycznych z binance
root_url = 'https://api.binance.com/api/v1/klines'
# para walutowa jakiej dane chcemy pobrać
symbol = 'BTCUSDT'
# interwał jaki chcemy pobrać
interval = '1m'
# łączymy link, parę walutową i interwał w jedno
url = root_url + '?symbol=' + symbol + '&interval=' + interval
# wstawiamy do zmiennej data wartości
data = json.loads(requests.get(url).text)
# zapisanie wartości do pliku CSV
with open('BTCUSDT.csv', 'w', newline='') as f:
    thewriter = csv.writer(f)
    for el in data:
        thewriter.writerow(el)

Jak nie przechodzić do następnej lini po wpisaniu komendy print?

W Python 3.7.3 należy zrobić to ta:

print("Tu jest jakiś tekst", end="")

Wariacja i kombinacja

Ten temat jest dobrze wytłumaczony na stronie geeksforgeeks.

Tablica dwuwymiarowa w Python

Do tego celu używamy listy w Python.

# ilość wierszy
m = 4
# ilość kolumn
n = 5
# stworzenie tablicy o wskazanych wymiarach i
# uzupełnienie jej zerami
a = [[0 for x in range(n)] for x in range(m)]
# zmiana warości pierwszego elementu
a[0][0] = 3
# wypisanie wszystkich wartości tablicy
for x in a:
    print(x)

Dzielenie

Jeżeli chcesz uzyskać wynik typu float dziel używając: /
Jeżeli chcesz uzyskać wynik całkowity to dziel używając //

Wczytanie wartości integer z jednej linii, liczby odzielone są spacjami

Jest to rozwiązanie zapożyczone z HackerRank. Jego zaletą jest to że jest bardzo krótkie. Zajmuję jedną linijkę kodu.

arr = list(map(int, input().rstrip().split()))

Pętla for z dwoma zmiennymi

array = list("abcdef")
for index, letter in enumerate(array):
    print("%d %s" % (index, letter))

Wynikiem działania tego programu jest:

0 a
1 b
2 c
3 d
4 e
5 f

%d – oznacza wartość decymalną
%s – oznacza zmienną tekstową

Zamiana stringu na listę – rozbicie na poszczególne znaki

Najprostsza metota:

s = "alama"
s1 = list(s)

Alternatywna metoda:

s1 ="ala"
s1t = [char for char in s1]
print(s1t)

Efekt:

['a', 'l', 'a']

Usunięcie duplikatów ze stringa

Najpierw zamień stringa na listę.

mylist = ["a", "b", "a", "c", "c"]
mylist = list(dict.fromkeys(mylist))

Teraz z listy utwórz stringa.

Co ma klasyczny szblon kodu Python na HackerRank ?

import math
import os
import random
import re
import sys


def sockMerchant(n, ar):
# Tu znajduje się jakaś treść funkcji.

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input())

    ar = list(map(int, input().rstrip().split()))

    result = sockMerchant(n, ar)

    fptr.write(str(result) + '\n')

    fptr.close()

Łączenie i dzielenie stringa

a = "this is a string"
a = a.split(" ") # a is converted to a list of strings. 

Efekt:

['this', 'is', 'a', 'string']

A teraz łączenie:

a = "-".join(a)

Efekt:

this-is-a-string 

Pętla for ze skokowym przejściem

for i in range(10, 20, 2):
    print(i)

Efekt tego jest taki:

10
12
14
16
18

Textwrap

import textwrap

string = input()

lista = textwrap.wrap(string, 2)
for x in lista:
    print(x)

Input:

alamakota

Output:

al
am
ak
ot
a

Znak nowej lini wewnątrz stringa

Użyj: \n

Sprawdzenie czy litera jest wielka

s1 = ["a", "b", "c"]
if s1[i].isupper():

Funkcja format

pracownicy = ["Konrad", "Adam", "Dominik"]
for i in range(len(pracownicy)):
    powitanie = "{} - Witam Cię!"
    print(powitanie.format(pracownicy[i]))

Wynik to:

Konrad - Witam Cię!
Adam - Witam Cię!
Dominik - Witam Cię!

Centrowanir tekstu wyrównywanie do prawej i lewej

n = 5
for i in range(1, n + 1):
    a = i *"*"
    print(a.rjust(n,' '))

Efekt:

         *
        **
       ***
      ****
     *****

Wyrównanie w lewo:

a.ljust(10,' ')

Centrowanie:

a.center(10,' ')

Złożoność obliczeniowa

Określa ile operacji wykona dany program. Pojęcie to jest ważne przy wyborze rozwiązania danego zadania.
Link do strony dobrze tłumaczącej to zagadnienie: Samouczek Programisty

Must continue reading lines until there is no more input

Mamy w zadaniu wczytywać jakąś wartość, aż przestanie być ona podawana.
Należy użyć poniższego bloku:

while True:
    try:
        c = input()
    except EOFError:
        break

Wskazanie indeksu w stringu dla konkretnej litery

fraza = "Ala ma kota"
print(fraza.index("a"))

Wyświetli się:

2

Zamiana wewnatrz stringa, konkretnego wyrazu na inny

fraza = "Ala ma kota"
print(fraza)
print(fraza.replace("Ala", "Ola"))

Efekt:

Ala ma kota
Ola ma kota

Wartość absolutna

liczba = -1
print(abs(liczba))

Potęgowanie

3 do potęgi 3

print(pow(3, 3))

Wartość maksymalna i minimalna

print(max(3, 1, 15))
print(min(3, 1, 15))

Zaokrąglenie

print(round(3.4))
print(round(3.5))
print(round(3.6))

Efekt:

3
4
4

Inne zaokrąglanie:

from math import *
print(ceil(7.7))
print(floor(7.7))

Efekt:

8
7

Pierwiastkowanie

from math import *
print(sqrt(36))

Łączenie dwóch list

fala = [1, 3, 5]
woda = ["a", "v", "c"]
fala.extend(woda)
print(fala)

Efekt:

[1, 3, 5, 'a', 'v', 'c']

Wstawienie elementu do środka listy

ala = ["a", "c"]
ala.insert(1, "b")
print(ala)

Efekt:

['a', 'b', 'c']

Zliczenie występowania danego elementu w stringu

ala = ["a", "c", "a", "f"]
print(ala.count("a"))

Efekt:

2

Sprawdzenie czy dany element znajduje się wewnątrz listy

ala = ["a", "c", "a", "f"]
try:
    ala.index("g")
    print("jest")
except:
    print("nie ma")

Kopiowanie list

ala = ["a", "c", "a", "f"]
ala1 = ala
ala[0] = "z"
print(ala1)

Efekt:

['z', 'c', 'a', 'f']

Należy tak robić:

ala = ["a", "c", "a", "f"]
ala1 = ala.copy()
ala[0] = "z"
print(ala1)

Efekt:

['a', 'c', 'a', 'f']

Zamienienie dwóch elementów wewnątrz listy

s = [1, 2, 4, 9]
s[0], s[1] = s[1], s[0]
print(s)

Efekt:

[2, 1, 4, 9]

Można zamieniać też elementy z dwóch różnych list

s = [1, 2, 3, 4]
f = [9, 8, 7, 6]
s[0], f[0] = f[0], s[0]
print(s)
print(f)

Efekt:

[9, 2, 3, 4]
[1, 8, 7, 6]

Recursion – czyli rekurencja

To funkcja, która wywołuje sama siebie.
Prosty przykład:

def f(a):
    return a/2

wynik = f(f(f(1000)))
print(wynik)

Wątki

Mamy 2 wątki. a1 odpowiada za odliczanie od 1 do 200.
Wątek a2 puszcza muzykę.
t1.join() powoduje że nie uruchomi się dalsza cześć programu zanim nie skończy się wątek.

import vlc
import time
from threading import Thread
def a1(x):
    x = int(x)
    for i in range(200):
        print(x)
        x += 1
        time.sleep(1)
def a2():
    sound_file = vlc.MediaPlayer("mv.mp3")
    sound_file.play()
    time.sleep(200)

t1 = Thread(target=a1, args=("1"))
t2 = Thread(target=a2, args=())
t1.start()
t2.start()

t1.join()
t2.join()

Wydobycie różnych wartości z daty

import time
import datetime

#nazwa dnia
now = datetime.datetime.now()
day_name = now.strftime("%A")
print(day_name)

#nr dnia w tygodniu
day_of_week = now.weekday() + 1
print(day_of_week)

#nr dnia w miesiącu
now2 = time.localtime(time.time())
day_of_month = now2.tm_mday
print(day_of_month)

#dzień roku
day_of_year = (now - datetime.datetime(now.year, 1, 1)).days + 1
print(day_of_year)

#classic date
classic_date = now.date()
print(classic_date)

Pobranie daty z timestamp

from datetime import date
from_timestamp = date.fromtimestamp(1326244364)
print("Date =", from_timestamp)

Konwersja daty stringowej do timestamp

import time
import datetime
s = "01-12-2011"
time.mktime(datetime.datetime.strptime(s, "%d-%m-%Y").timetuple())

Importowanie danych z CSV i JSON do MySQL

Link filmu wyjaśniającego zagadnienia
Link do artykułu

Łączenie się API

import requests
import pprint
r = requests.get('https://api.alternative.me/fng/')
my_data = r.json()
print(my_data)

Otwarcie okna przeglątki na nakiejś stronie www

import webbrowser
webbrowser.open_new_tab("https://www.google.com/")

Jak ukryć okno konsoli

Jeżeli chcemy by program działał z niewidocznym oknem konsoli to w Pycharm utówrz nowy plik z rozszerzeniem .pyw na przykład run2.pyw
Przekopiuj do niego kod swojego skryptu i zapisz.
Teraz po uruchomieniu tego pliku, program będzie działał ale będzie nie widoczny dla użytkownika.

Zmiana nazwy okna konsoli

from os import system
myCoolTitle = "Super Lekcja"
system("title "+myCoolTitle)
input()

Skrypt uruchamia inny skrypt w systemie Windows

import os
os.system("script2.py 1")

Przekształcenie pliku .py do .exe

Możesz zobaczyć świetny film tłumaczący to zagadnienie.

Proces ten pozwala stworzyć plik exe.
W dalszym kroku pozwala utworzyć jeden plik instalacyjny, który pozwoli zainstalować Twoj program na dowolnym komputerze z Windows, niezależnie czy on posiada Python i biblioteki, których używałeś podczas kodowania.

Ja używam do tego procesu Anaconda prompt.
Sprawdź najpierw czy masz zainstalowany pip

pip

Jeżeli masz to wpisz poniższą komendę instalacyjną pyinstaller

pip install pyinstaller

Teraz wpisz komendę tworzącą plik exe:

pyinstaller --onefile -w run.py

Plik exe znajduje się w folderze dist.
Przenieś go z tamtąd do głównego folderu projektu.
Folder dist usuń.
Usuń też folder build.

Jeżeli masz prosty program składający się z jednego pliku .py, bez zdjęć, muzyki, to możesz zakończyć pracę i plik dystybuować.
W przeciwnym razie pobież program NSIS
Skompresuj folder z projektem do ZIP.
Otwórz NSIS zaczytaj do niego plik ZIP i wytwórz plik instalacyjny.