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
PyCharm – najlepsze środowisko do pisania w Python
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.
Kivy – instalacja na Windows 10
Jest to biblioteka służąca do tworzenia aplikacji mobilnych na IOS i Androida w Python.
Kivy działa we wspłópracy z Pycharm
Miałem potężne problemy z instalacją kivy na Windows 10.
Rozwiązanie okazało się następujące.
W konsoli Windows należy zrobić:
Krok 1
Upewnij się, że masz najnowszą wersję pip i koła:
python -m pip install --upgrade pip wheel setuptools
Krok 2 sposób 1
Zainstaluj zależności (pomiń gstreamer (~ 120 MB), jeśli nie jest to konieczne, zobacz zależności Kivy):
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew python -m pip install kivy.deps.gstreamer
Uwaga, jeśli napotkasz błąd MemoryError podczas instalacji, dodaj po instalacji pip opcję
–no-cache-dir
Krok 2 sposób 2 (jeżeli nie zadziała sposób 1)
W Pythonie 3.5+ możesz także użyć backendu kątowego zamiast dmuchać. To może być zainstalowane z:
python -m pip install kivy.deps.angle
Krok 3
Zainstaluj kivy:
python -m pip install kivy
Krok 4 (opcjonalniy)
Zainstaluj przykłady kivy:
python -m pip install kivy_examples
Przykłady są instalowane w katalogu udziału w katalogu głównym, w którym zainstalowany jest 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()
Operacje bitowe w Python
Bitwise AND
a & b | b=0 | b=1 |
---|---|---|
a=0 | 0 | 0 |
a=1 | 0 | 1 |
Bitwise OR
a | b | b=0 | b=1 |
---|---|---|
a=0 | 0 | 1 |
a=1 | 1 | 1 |
Bitwise XOR
a ^ b | b=0 | b=1 |
---|---|---|
a=0 | 0 | 1 |
a=1 | 1 | 0 |
Przesunięcie bitowe w lewo i prawo
# wpisując 0b definiujemy liczbę binarną z = 0b101111 print(bin(z << 1)) print(bin(z >> 1))
Efekt działania programu:
z = 0b101111 print(bin(z << 1)) print(bin(z >> 1))
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()
Tworzenie nowego pliku
f = open("nazwa.txt","w+")
Pobieranie nazw wszystkich plików z folderu
import os path = 'c:\\projects\\hc2\\' files = [] # r=root, d=directories, f = files for r, d, f in os.walk(path): for file in f: if '.txt' in file: files.append(os.path.join(r, file)) for f in files: print(f)
Więcej informacji jest pod tym linkiem: mkyong.com
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
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()
Pauzowanie utwory
sound_file.pause() time.sleep(2) sound_file.play()
Sprawdzenie długości utworu mp3
from mutagen.mp3 import MP3 audio = MP3("example.mp3") print(audio.info.length)
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 //
Usunięcie spacji z lewej strony z wczytywanej wartości
a = input("Jak masz na imię?") print("Cześć", a.lstrip())
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().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 z listy
lista = [1,1,1,2,2,2,3,3,4] lista = list(set(lista)) print(lista)
Efekt działania programu:
[1, 2, 3, 4]
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]
Sortowanie listy po nazwiskach
persons = ['Adam Kowalski', 'Ewa Zygadło', 'Monika Betel'] persons.sort(key=lambda x: x.split(' ')[-1].lower()) print(persons)
lower() dodaliśmy po to, by nazwiska napisane małymi siterami nie znalazły się na końcu listy.
Efekt działania programu:
['Monika Betel', 'Adam Kowalski', 'Ewa Zygadło']
Sortowanie, które nie wpływa na oryginalną listę
persons = ['Adam Kowalski', 'Ewa Zygadło', 'Monika Betel'] x2 = sorted(persons, key=lambda x: x.split(' ')[-1].lower()) print(persons) print(x2)
Efekt działania programu:
persons = ['Adam Kowalski', 'Ewa Zygadło', 'Monika Betel'] x2 = sorted(persons, key=lambda x: x.split(' ')[-1].lower()) print(persons) print(x2)
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 utwórz 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")
Pobranie rozdzelczości ekranu
Najpierw zainstaluj w Pycharm bibliotekę pywin32.
from win32api import GetSystemMetrics print("Width =", GetSystemMetrics(0)) print("Height =", GetSystemMetrics(1))
Graficzny edukacyjny interface w Python – Turtle
Jest to fajne narzędzie do nauki programowania.
Poniżej przedstawiam prosty przykład programu.
import turtle #stworzenie okna wn = turtle.Screen() turtle.down() turtle.goto(100, 100) turtle.goto(-100, 100) turtle.exitonclick()
Przydatne funkcje:
import turtle tim = turtle.Turtle() tim.shape('turtle') tim.pensize(5) tim.color('blue') tim. speed(10) tim.forward(100) tim.left(90) tim.forward(100) tim.right(90) tim.color('yellow') tim.back(300) tim.penup() tim.forward(50) tim.pendown() tim.color('red') tim.forward(50) # ustawiam kolor zamalowywania. Red dla zewnętrza, blue dla wnętrza tim.color('red', 'blue') # zamalowana figura tim.begin_fill() tim.circle(50) tim.end_fill() # rysowanie kwadratu tim.color('yellow', 'black') tim.begin_fill() for x in range(4): tim.forward(100) tim.right(90) tim.end_fill() # ustawianie pozycji żółwia tim.setpos(0, 0) tim.setpos(200, 200) tim.setpos(-200, 200) turtle.exitonclick()
Pierwsza gra
import turtle # stworzenie okna gry wn = turtle.Screen() wn.title('First Game') wn.bgcolor('#0E6655') wn.setup(width=800, height=600) wn.tracer(0) # stworzenie bohatera olo olo = turtle.Turtle() olo.speed(0) olo.shape('circle') olo.color('#1C2833') olo.penup() olo.goto(0, 0) # stworzenie celu cel = turtle.Turtle() cel.speed(0) cel.shape('circle') cel.color('yellow') cel.penup() cel.goto(200, 200) # poruszanie się bohatera olo def olo_up(): y = olo.ycor() y += 20 olo.sety(y) def olo_down(): y = olo.ycor() y -= 20 olo.sety(y) def olo_left(): x = olo.xcor() x -= 20 olo.setx(x) def olo_right(): x = olo.xcor() x += 20 olo.setx(x) def olo_diverse_y(): y = olo.ycor() if y > 0: y -= 20 elif y < 0: y += 20 olo.sety(y * (-1)) def olo_diverse_x(): x = olo.xcor() if x > 0: x -= 20 elif x < 0: x += 20 olo.setx(x * (-1)) #pobieranie z klawiatury wn.listen() wn.onkeypress(olo_up, "w") wn.onkeypress(olo_down, "s") wn.onkeypress(olo_right, "d") wn.onkeypress(olo_left, "a") # głowna pętla gry while True: wn.update() # nie wychodzenie za ekran if -290 > olo.ycor() or olo.ycor() > 290: olo_diverse_y() if -390 > olo.xcor() or olo.xcor() > 390: olo_diverse_x() # komunikat o zwycięstwie if olo.ycor() == cel.ycor() and olo.xcor() == cel.xcor(): cel.write(" You win!", font=("Arial", 16, "normal")) else: cel.clear()
Ukrywanie i odkrywanie żółwia
tim.hideturtle() tim.showturtle()
Żółw porusza się w miejsce kliknięcia myszą
import turtle wn = turtle.Screen() tim = turtle.Turtle() def h1(x, y): tim.goto(x, y) wn.onclick(h1) wn.mainloop()
Okno ma konkretne wymiary i pozycję na ekranie komputera
wn = turtle.Screen() wn.setup(width=300, height=300, startx=0, starty=0)
Lewy górny róg ma pozycję x=0 i y=0.
Rusunek wykonuje się natychmiast
wn = turtle.Screen() wn.tracer(0, 0)
Algorytm Euklidesa w Python
x = int(input("podaj x: ")) y = int(input("podaj y: ")) lista = [x, y].sort() if x==y: print(x) else: while True: reszta = lista[1] % lista[0] if reszta == 0: break reszta2 = lista[0] % reszta if reszta2 == 0: break lista[1] = reszta lista[0] = reszta2 wynik = [reszta, reszta2] print(max(wynik))
Web scraping – Instalacja Beautifulsoup
Web scraping to pobieranie danych ze stron internetowych.
Instalacja o ile jest wymagana:
pip3 install beautifulsoup4
Web scraping – pobranie wszystkich treści z wszystkich elementów wybranej klasy.
from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen('https://www.fem.org.pl/') bs = BeautifulSoup(html.read(), 'html.parser') firstList = bs.find_all(class_='excerpt') for x in firstList: print(x.get_text().strip())
Web scraping – pobranie wartości klasy zagnieżdżonej w klasie
W poniższym przykładzie chcemy pobrać aktualny kurs Euro
from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen('https://kursy-walut.mybank.pl/') bs = BeautifulSoup(html.read(), 'html.parser') kurs = bs.find(class_='box_mini').find(class_='b2') print(kurs.get_text())
Web scraping pobieranie linków ze strony
from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen('https://kursyexcela.pl/python_nauka/') page = BeautifulSoup(html.read(), 'html.parser') for link in page.find_all('a'): url = link.get('href') print(url)
Zamknięcie systemu
Dla Windows:
import os os.system('shutdown -s')
Dla Linux:
import os os.system('systemctl poweroff')
Wypisanie całego kalendarza w Python
import calendar print(calendar.TextCalendar(firstweekday=6).formatyear(2015))
Porównianie list comprehensions z generatorem
Listy używają []
Generatory używają ()
Generatory są bardzo szybkie i w najmniejszym stopniu obciążają pamięć.
Przeanalizuj kod:
lista = [i*2+1 for i in range(20)] for i in lista: print(i, end=' ') if i > 23: break print("Break time!") for i in lista: print(i, end=' ') print("The End")
Wynik działania programu:
1 3 5 7 9 11 13 15 17 19 21 23 25 Break time! 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 The End
Generator zapamiętuje miejsce przerwania
gen = (i*2+1 for i in range(20)) for i in gen: print(i, end=' ') if i > 23: break print("Break time!") for i in gen: print(i, end=' ') print("The End")
Wynik działania programu:
1 3 5 7 9 11 13 15 17 19 21 23 25 Break time! 27 29 31 33 35 37 39 The End
Generator używający yield
def power2(): power = 1 while True: yield power power = power * 2 it = power2() for x in range(4): print(next(it))
Map w Python
Problem polega na tym, że mamy listę radii, która zawiera wartości promienii.
Tworzymy funkcję area(), która potrafi wyliczyć pole koła.
Nastęmnie chcemy wszystkie pola, tzn. dla każdego promienia z listy radii, wpisać do listy areas.
Poniżej prezentuję prawidłowe rozwiązanie problemu bez użycia map:
import math def area(r): return math.pi * (r**2) radii = [3, 4, 5.3, 3.1, 23] areas = [] for r in radii: a = area(r) areas.append(a) print(areas)
A teraz rozwiązanie problemu przy użyciu map:
import math def area(r): return math.pi * (r**2) radii = [3, 4, 5.3, 3.1, 23] areas = list(map(area, radii)) print(areas)
Rozwiązanie jest znacznie krótsze bo jednolinijkowe.
Map przyjmuje dwa argumenty: funkcję i listę.
Map uruchomi funkcję po koleji dla wszystkich elementów listy.
Map niezwraca listy, więc map nalerzy rzutować do listy.
Poniżej przedstawię kolejny przykład użycia map.
Naszym zadaniem jest zamiana temperatury wyrażonej w C na F. Działamy na liście zawierającej miasta i odpowiadające im temperatury.
temps = [("wrocław", 24), ("Warszawa", 16), ("Londyn", 12), ("Rzym", 30)] c_to_f = lambda data: (data[0], (9/5)*data[1] + 32) converted_temps = list(map(c_to_f, temps)) print(converted_temps)
Jak sprawdzić w Python jak długo wykonuje się program?
import time start_time = time.time() print("Mój program wykonał się w czasie: ", time.time() - start_time)
Wysłanie emaila przy pomocy Python
Na początku trzeba wejść do do ustawień swojego profilu google i zezwolić na logowanie się na logowanie się zewnętrznych aplikacji do Twojego konta.Link do ustawień konta Google W sekcji Less secure app access zmień suwak na on.
Jeżeli chcesz wysyłać male z poziomu servera Ubuntu to Google wymaga stworzenia App password.
Aby je stworzyć wejdź do Google Account -> Singning in to Google -> i uruchom 2-Step Verification.
Następnie będziesz mógł wytworzyć App password
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart email = '[email protected]' password = 'twoje.haslo' send_to_email = '[email protected]' subject = 'Buy signal' message = 'Buy now Bitcoin!' msg = MIMEMultipart() msg['From'] = email msg['To'] = send_to_email msg['Subject'] = subject msg.attach(MIMEText(message, 'plain')) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(email, password) text = msg.as_string() server.sendmail(email, send_to_email, text) server.quit() print('ok')
W ubuntu należy jeszcze dokonać pewnych zmian w pliku ssmtp.conf
AuthPass to App Password od Googla.
Hostname zawiera nazwę twojego serwera VPS. Na czerwono ukyłem mój nr.
Odczytanie ilości odebranych email
import imaplib username = '[email protected]' password = 'haslo' mail = imaplib.IMAP4_SSL('imap.gmail.com') mail.login(username, password) print(mail.select('inbox'))
Tkinter
Ta bibioteka pozwala na tworzenie aplikacji okienkowych.
Aby używać tkinter w Pycharm w Ubuntu, należy w konsoli najpierw zainstalować tkinter’a.
Robimy to tak:
sudo apt-get install python3-tk
W Windows ten problem u mnie nie wystąpił.
A teraz kod pierwszej aplikacji:
import tkinter as tk root = tk.Tk() def wyslij(): s = entry.get() print(s) def wyczysc(): entry.delete(first=0,last=22) canvas = tk.Canvas(root, height=100, width=600) canvas.pack() #frame2 = tk.Frame(root, bg='yellow') #frame2.place(relwidth=1, relheight=0.5) frame = tk.Frame(root, bg='yellow') frame.place(relwidth=1, relheight=1) # relx = 0.1, rely=0.1 (możesz to dać do frame.place label = tk.Label(frame, text="Napisz treść ogłoszenia", bg='yellow') label.pack(side='left', padx=20) entry = tk.Entry(frame) entry.pack(side='left', padx=20) button = tk.Button(frame, text="Wyślij", bg='green', fg='#ffffff', command=wyslij) button.pack(side='left', padx=5) button2 = tk.Button(frame, text="Wyczyść", bg='green', fg='#ffffff', command=wyczysc) button2.pack(side='left', padx=5) root.mainloop()
Super strona po polsku o Tkinter
Prosty klicker napisany tkinter
import tkinter as tk
nr = 0
def kliknij():
global nr
nr += 1
variable.set(nr)
window = tk.Tk()
window.title("Kliker")
variable = tk.IntVar()
label = tk.Label(window, width='5', height="3", font = ("Times New Roman", 40),
textvariable=variable)
label.pack()
button = tk.Button(window, text="Kliknij", bg='#e07e7e', fg='#000000', width='10', height="3", command=kliknij)
button.pack(pady=5, padx=100)
tk.mainloop()
Program do używania google search
try: from googlesearch import search except ImportError: print("No module named 'google' found") # to search query = "Geeksforgeeks" for nr, j in enumerate(search(query, tld="co.in", num=10, stop=100, pause=2), 1): print(nr, j)