Книга - Программирование на Python3 с PyQt5

a
A

Программирование на Python3 с PyQt5
Сергей Николаевич Талипов


Основы программирования на Python3 с визуальными компонентами PyQt5 (для PyCharm Community).





Сергей Талипов

Программирование на Python3 с PyQt5





ЛЕКЦИЯ 1 – УСТАНОВКА PYTHON, БИБЛИОТЕК И IDE





1.1 Установка Python3














































C:\Python35\

C:\Python35\Scripts\




1.2 Установка в Python библиотек Qt5, Spyder3 и других модулей











pip install PyQt5

pip install PyQt5-tools

pip install spyder



pip install pyperclip

pip install requests

pip install html2text

pip install beautifulsoup4

pip install wget

pip install python-docx

pip install XlsxWriter

pip install openpyxl

pip install Pillow

pip install selenium

pip install wheel

pip install pyinstaller

pip install pypiwin32

pip install pywin32-ctypes








1.3 Запуск стандартной графической оболочки IDLE




IDLE.bat:

@start /b C:\Python35\pythonw.exe "C:\Python35\Lib\idlelib\idle.pyw"






1.4 Запуск графической оболочки Spyder3




Spyder3.bat

@start /b C:\Python35\Scripts\spyder3.exe


















1.5 Использование сторонней IDE PyCharm




JetBrains32.bat:

@start /b C:\PyCharm2018\bin\pycharm.exe



JetBrains64.bat:

@start /b C:\PyCharm2018\bin\pycharm64.exe












1.5.1 Настройка в PyCharm мастера для создания QtForm
















Form







0

0

640

480







Form






















1.5.2 Настройка для вызова внешнего редактора QtForm










C:\Python35\Lib\site-packages\pyqt5-tools\designer.exe

"$FilePath$"

$FileDir$


















1.6 Компиляция в exe-файл




Чтобы перенести программу на другой компьютер, где не установлен Python, её нужно скомпилировать в .exe файл. Для этого есть несколько способов, и сегодня мы рассмотрим наиболее простой – библиотеку pyinstaller



Дадим в командной строке две команды:



pip install wheel

pip install pyinstaller

pip install pypiwin32

pip install pywin32-ctypes



Допустим, мы имеем .py файл под названием 1.py, который успешно запускается и работает в качестве скрипта Python. И теперь мы хотим сделать из него .exe файл, чтобы мы могли просто дать его другу, и не переживать об установке питона и модулей на другом компьютере.



Положим наш скрипт на диск D: далее откроем командную строку и введем следующие команды





D:

pyinstaller –onedir –onefile –name=myprogram "D:\1.py" –paths C:\Python35\Lib\site-packages\PyQt5\Qt\bin





Через некоторое время компиляция завершится и в подкаталоге dist появится EXE-шник



Некоторые ключи для компиляции:



--onefile – сборка в один файл, т.е. файлы .dll не пишутся

–-windowed -при запуске приложения, будет появляться консоль

–-noconsole – при запуске приложения, консоль появляться не будет

–-icon=app.ico – добавляем иконку в окно

–-paths – возможность вручную прописать путь к необходимым файлам, если pyinstaller

не может их найти (например: –paths C:\Python35\Lib\site-packages\PyQt5\Qt\bin)






1.7 Если поломался Python и не работает pip, spyder3 или pyinstaller




cmd

python -m pip install pip==9.0.1

pip uninstall spyder

pip install spyder

pip uninstall pyinstaller

pip install pyinstaller






1.8 Установка PyQt5 в Linux




sudo apt-get install qt5-default

sudo apt-get install qtcreator






ЛЕКЦИЯ 2 – ОСНОВНЫЕ ТИПЫ ДАННЫХ, УСЛОВИЯ И ОПЕРАЦИИ



К неизменяемым (immutable) типам относятся: целые числа (int),  числа с плавающей точкой (float), комплексные числа (complex), логические переменные (bool), кортежи (tuple), строки (str) и неизменяемые множества (frozen set).

К изменяемым (mutable) типам относятся: списки (list), множества (set), словари (dict).




2.1 Числовые и строковые переменные


Целые числа могут быть любой длины, они ограничиваются лишь доступной памятью.

Числа с плавающей запятой имеют ограниченную точность. Визуально разницу между целым числом и числом с плавающей запятой можно заметить в консоли по наличию точки: 1 – целое число, 1.0 – с плавающей запятой.

Комплексные числа записываются в форме x+yj, где x – действительная часть числа, а y – мнимая: c = 1+2j

Мы можем преобразовывать значения из одного типа в другой с помощью таких функций, как int(), float(), str().

Строка представляет собой последовательность символов. Можно использовать одинарные или двойные кавычки для создания строки.



# Это комментарий



box1 = 15

box2 = 25

box3 = box1 + box2

print(box3)

s1 = 'Вам: '

s2 = ' лет'

name = input('Введите ваше имя: ')

age = input('Введите сколько вам лет: ')

name = 'Вас зовут: ' + name

age2 = s1 + age + s2

print(name)

print(age2)

b = 100 – int(age)

f = 100.5 – float(age)

print('Вам осталось жить где-то: ' + str(b))

print('А точнее где-то: ' + str(f))



40

Введите ваше имя: tsn

Введите сколько вам лет: 43

Вас зовут: tsn

Вам: 43 лет

Вам осталось жить где-то: 57

А точнее где-то: 57.5



Список использованных команд:

• print('Какой то текст') – печатает текст;

• print(a) – печатает значение переменной a (вместо a может быть любое имя переменной);

• a=input('Пояснение что надо ввести') – ожидает от пользователя ввода какого то значения и помещает его в переменную с типом строка (вместо a может быть любое имя переменной);

• int(a) – преобразовывает переменную типа строка в число (вместо a может быть любое имя переменной);

• str(i) – преобразовывает переменную числового типа в строку (вместо i может быть любое имя переменной).

2.1.1 Встроенные функции

Язык Python включает много уже определенных, т. е. встроенных в него, функций. Программист не видит их определений, они скрыты в "недрах" языка. Достаточно знать, что эти функции принимают и что возвращают, то есть их интерфейс.

Ряд встроенных функций, касающихся ввода-вывода и типов данных, мы уже использовали. Это print(), input(), int(), float(), str(). Рассмотрим другие встроенные функции:

print(ord('z')) # Код символа: 122

print(ord('ф')) # 1092



print(chr(87)) # Символ по коду: W

print(chr(10045)) # ?



print(len('abc')) # Длина строки: 3

print(abs(-2.2)) # Модуль числа: 2.2



a = 10 / 3 # Вещественное деление: 3.3333333333333335

b = 10 % 3 # Остаток от целочисленного деления: 1

c = 10 // 3 # Деление нацело. Целая часть при делении: 3



print(a) # 3.3333333333333335

print(b) # 1

print(c) # 3



print(round(a, 2)) # Округление для двух знаков: 3.33

print(round(a)) # Округление до целого числа: 3



print("Number: %.2f" % a) # Number: 3.33



print(divmod(10, 3)) # Целая часть и остаток при целочисленном делении: (3, 1)



print(pow(2, 4)) # 2 в степени 4: 16

print(max(10, 12, 3)) # Макимальное число в списке: 12

print(min(10, 12, 3, 9)) # Манимальное число в списке: 3

print(sum((10, 12, 3, 10))) # Сумма чисел в списке: 35



2.1.2 Собственные функции

Иногда, набор каких-то повторяющихся команд нужно выполнять несколько раз. Такие блоки команд обычно выносят в отдельные кусочки программы. Именно из функций состоят внешние модули, которые можно подключать к программам. У функции могут быть входные параметры, называемые аргументами – это одна или несколько переменных, которые пишутся в скобках после имени функции. Также функция может возвращать одно или несколько значений с помощью команды return. Объявление функции начинается с ключевого слова def, далее следует имя функции, аргументы в скобках, и программный код отделённый четырьмя пробелами.



def pribavka(zarplata, avto):

k = 0

if (avto > 10):

k = round((avto – 10) * 0.02 * zarplata)

return k



a = int(input('Введите зарплату сотрудника: '))

b = int(input('Введите количество автомобилей проданных за месяц: '))

c = pribavka(a, b)

print('В этом месяце прибавка к зарплате составит: ' + str(c))



2.1.3 Функции математического модуля math

math.acos(X) – арккосинус X. В радианах

math.acosh(X) – вычисляет обратный гиперболический косинус

math.asin(X) – арксинус X. В радианах

math.asinh(X) – вычисляет обратный гиперболический синус

math.atan(X) – арктангенс X. В радианах

math.atan2(Y, X) – арктангенс Y/X. В радианах. С учетом четверти, в которой находится точка (X, Y)

math.atanh(X) – вычисляет обратный гиперболический тангенс

math.ceil(X) – округление до ближайшего большего числа

math.copysign(X, Y) – возвращает число, имеющее модуль такой же, как и у числа X, а знак – как у числа Y

math.cos(X) – косинус X (X указывается в радианах)

math.cosh(X) – вычисляет гиперболический косинус

math.degrees(X) – конвертирует радианы в градусы

math.e – e = 2,718281…

math.erf(X) – функция ошибок

math.erfc(X) – дополнительная функция ошибок (1 – math.erf(X))

math.exp(X) – eX

math.expm1(X) – eX – 1. При X ? 0 точнее, чем math.exp(X)-1

math.fabs(X) – модуль X

math.factorial(X) – факториал числа X

math.floor(X) – округление вниз

math.fmod(X, Y) – остаток от деления X на Y

math.frexp(X) – возвращает мантиссу и экспоненту числа

math.fsum(последовательность) – сумма всех членов последовательности. Эквивалент встроенной функции sum(), но math.fsum() более точна для чисел с плавающей точкой

math.gamma(X) – гамма-функция X

math.hypot(X, Y) – вычисляет гипотенузу треугольника с катетами X и Y (math.sqrt(x * x + y * y))

math.isfinite(X) – является ли X числом

math.isinf(X) – является ли X бесконечностью

math.isnan(X) – является ли X NaN (Not a Number – не число)

math.ldexp(X, I) – X * 2i. Функция, обратная функции math.frexp()

math.lgamma(X) – натуральный логарифм гамма-функции X

math.log(X, [base]) – логарифм X по основанию base. Если base не указан, вычисляется натуральный логарифм

math.log10(X) – логарифм X по основанию 10

math.log1p(X) – натуральный логарифм (1 + X). При X ? 0 точнее, чем math.log(1+X)

math.log2(X) – логарифм X по основанию 2

math.modf(X) – возвращает дробную и целую часть числа X. Оба числа имеют тот же знак, что и X

math.pi – pi = 3,1415926…

math.pow(X, Y) – XY

math.radians(X) – конвертирует градусы в радианы

math.sin(X) – синус X (X указывается в радианах)

math.sinh(X) – вычисляет гиперболический синус

math.sqrt(X) – квадратный корень из X

math.tan(X) – тангенс X (X указывается в радианах)

math.tanh(X) – вычисляет гиперболический тангенс

math.trunc(X) – усекает значение X до целого

import math



print(math.sin(22))



-0.008851309290403876





2.1.4 Функции и методы строк











2.2 Условный оператор




sun = input('Введите 1 если погода солнечная, и 2 если пасмурная: ')

if sun == '1':

d = 'Нужно загорать'

else:

d = 'Загорать не выйдет'

print(d)



myname = input('Введите логин: ')

mypass = input('Введите пароль: ')

if ((myname == 'tsn') and (mypass == 'superpassword123')) or ((myname == 'boss') and (mypass == '777')):

print('Привет, ' + myname + '. Добро пожаловать!')

else:

print('Ты хто такой, тавай дасвидания…')



v = int(input('Введите сколько вам лет: '))

if (v < 18):

print('Привет, юный кодер')

elif (v < 30):

print('Здравствуйте, молодой человек')

elif (v < 65):

print('Добрый день. Как семья, дети?')

elif (v < 100):

print('Здорово, Михалыч. Пенсию уже дали?')

elif (v < 100000):

print('Клан бессмертных приветствует тебя!')



Введите 1 если погода солнечная, и 2 если пасмурная: 1

Нужно загорать

Введите логин: tsn

Введите пароль: 123

Ты хто такой, тавай дасвидания…

Введите сколько вам лет: 43

Добрый день. Как семья, дети?







2.2.1 Пример решения квадратного уравнения с защищенными блоками



# Пример решения квадратного уравнения

import math # Подключение математического модуля



try: # Защищенный блок 1

a = float(input("Введите A="))

b = float(input("Введите B="))

c = float(input("Введите C="))

try: # Защищенный блок 2

d = b * b – 4 * a * c

x1 = (-b + math.sqrt(d)) / (2 * a)

x2 = (-b – math.sqrt(d)) / (2 * a)

print('d = ', d)

print('x1 = ', round(x1, 2))

print("x2 = " + format(x2, "#.2f"))

except: # Обработчик ошибок для защищенного блока 1

print("Нет решения!")

except: # Обработчик ошибок для защищенного блока 2

print("Неверные входные данные!")

input("Нажмите Enter для выхода") # Задержка перед выходом из программы





Введите A=1

Введите B=2

Введите C=-33

d = 136.0

x1 = 4.83

x2 = -6.83

Нажмите Enter для выхода





2.2.2 Практический пример с условием



# Программа получает ввод чисел X A B, затем выводит значение Y согласно

# y = (10 * (x + a^2)) / (b + a) если x >= 4

# y = 5 * (x + a^2 + b) если x < 4



def main(): # основная функция

# Получаем ввод X A B используя raw_input. Так как данный оператор всегда

# возвращает тип str, преобразовываем его в int используя оператор int()

# В питоне не обязательно объявлять переменные заранее, можно их объявлять

# сразу же присваивая значение. Тип переменной интерпретатор определяет сам

a = int(input('Введите A: '))

b = int(input('Введите B: '))

x = int(input('Введите X: '))

if x >= 4:

y = (10 * (x + a ** 2)) / (b + a)

else:

y = 5 * (x + a ** 2 + b)

# В питоне ' и " равнозначны. Выводим результат на экран. %.1f выводит

# значение типа float с точностью до одной десятой

print("y = %.1f" % y)



# Следующее условие предотвращает запуск программы, если она была импортирована

# в качестве модуля (к примеру import lab1)

if __name__ == '__main__':

main() # вызов основной функции





Введите A: 1

Введите B: 2

Введите X: 3

y = 30.0








2.3 Тернарный условный оператор




a = 10

b = 20

maximum = a if a > b else b

minimum = a if a < b else b

print(minimum, maximum)



10 20






ЛЕКЦИЯ 3 – ОСНОВНЫЕ КОМПОНЕНТЫ PYQT5





3.1 QWidget и QDialog


Окно











self.setWindowTitle('Создание простейшей визуальной программы')

self.setWindowIcon(QtGui.QIcon('images/logo.png'))



class Main(QWidget) или class Main(QDialog)



app = QApplication(sys.argv)

window = Main()

window.show()

sys.exit(app.exec_())




3.2 QPushButton


Кнопка











def solve(self):



self.btn_solve.clicked.connect(self.solve)






3.3 QLabel


Текстовая метка











self.label_img.setPixmap(QPixmap('images/main.png'))

self.label_img.setScaledContents(True)

self.label_answer.setText('Ответ: ' + str(format(answer, '.12f')))

print (QtGui.QtextDocument(self.label_answer.text()).toPlainText())






3.4 QLineEdit


Текстовое поле для ввода/вывода











a = self.lineEdit_a.text()

self.lineEdit_a.setText('')




3.5 Практический пример




Вид при использовании QWidget








Вид при использовании QDialog








import sys



from PyQt5 import QtGui

from PyQt5.QtGui import QPixmap

from PyQt5.QtWidgets import *

from PyQt5.uic import loadUi





class Main(QDialog):

def __init__(self):

super(Main, self).__init__()

loadUi('uis/main.ui', self) # загрузка формы в py-скрипт



self.setWindowTitle('Создание простейшей визуальной '

'программы на Python')



self.setWindowIcon(QtGui.QIcon('images/logo.png'))

self.label_img.setPixmap(QPixmap('images/main.png'))

self.label_img.setScaledContents(True)



self.btn_solve.clicked.connect(self.solve) # Связь кнопки с методом

self.btn_clear.clicked.connect(self.clear) # Связь кнопки с методом

self.btn_exit.clicked.connect(self.exit) # Связь кнопки с методом



def solve(self):

a = self.lineEdit_a.text()

b = self.lineEdit_b.text()

x = self.lineEdit_x.text()

if validation_of_data(a, b, x):

a = float(a)

b = float(b)

x = float(x)



if x > 6:

answer = a / x + b / x ** 2

else:

answer = a ** 2 * (x + b)



self.label_answer.setText('Ответ: ' + str(format(answer, '.2f')))

else:

self.label_answer.setText(

'Ошибка!')



def clear(self):

self.lineEdit_a.setText('')

self.lineEdit_b.setText('')

self.lineEdit_x.setText('')

self.label_answer.setText('Ответ: ')



def exit(self):

self.close()





def validation_of_data(a, b, x):

"""

проверяем валидность наших данных, с помощью перехвата исключения

:param a: число, полученное из lineEdit_a

:param b: число, полученное из lineEdit_b

:param x: число, полученное из lineEdit_x

:return: True – прошло валидацию, False – нет

"""

try:

float(a)

float(b)

float(x)



return True

except Exception:

return False





def main():

# каждое приложение должно создать объект QApplication

# sys.argv – список аргументов командной строки

app = QApplication(sys.argv)

window = Main() # базовый класс для всех объектов интерфейса пользователя

window.show() # отобразить окно на экране

sys.exit(app.exec_()) # запуск основного цикла приложения





if __name__ == '__main__':

main()






3.6 Конвертация файла «ui» в скрипт Python


(PyQt5 UI code generator)



pyuic5 name.ui -o name.py

Запускаем из папки с файлом ui в cmd, после чего появляется “py” скрипт в той же папке.






ЛЕКЦИЯ 4 – СПИСКИ, СЛОВАРИ, ЦИКЛЫ И МАССИВЫ





4.1 Списки и кортежи


Список представляет собой упорядоченную последовательность элементов. Он очень гибкий и является одним из самых используемых типов в Python. Элементы списка не обязательно должны быть одного типа.

Объявить список довольно просто. Внутрь квадратных скобок помещаются элементы списка, разделённые запятой:



a = [67, 5, 90, 20, 30]

b = ['Маша', 'Ваня', 'Лена', 'Марина', 'Арнольд']

print(a)

print(b)

aa = a[:] # Автономная копия списка

aaa = list(a) # Автономная копия списка

aaaa = a.copy() # Автономная копия списка

aaa.reverse() # Сортировка списка в обратном порядке

print(a[0]) # Первый элемент 67

print(a[2]) # Третий элемент 90

print(b[1]) # второй элемент Ваня

b.append('Дима') # Добавление элемента в конец списка

print(b[-1]) # Печать последнего элемента Дима

a.sort() # Сортировка списка

print(a) # [5, 20, 30, 67, 90]

print(aa) # [67, 5, 90, 20, 30]

print(aaa) # [30, 20, 90, 5, 67]

print(aaaa) # [67, 5, 90, 20, 30]





[67, 5, 90, 20, 30]

['Маша', 'Ваня', 'Лена', 'Марина', 'Арнольд']

67

90

Ваня

Дима

[5, 20, 30, 67, 90]

[67, 5, 90, 20, 30]

[30, 20, 90, 5, 67]

[67, 5, 90, 20, 30]



Так же как и список, кортеж (tuple) является упорядоченной последовательностью элементов. Вся разница заключается в том, что кортежи неизменяемы. Кортежи используются для защиты данных от перезаписи и обычно работают быстрее, чем списки, т.к. их нельзя изменять.

Для создания кортежа нужно поместить внутрь круглых скобок элементы, разделённые запятой:



t = (5, 'program', 1 + 3j)

print("t[0] =", t[0])

print("t[1] =", t[1])

print("t[2] =", t[2])

for i in t:

print(i, end=" – ")



t[0] = 5

t[1] = program

t[2] = (1+3j)

5 – program – (1+3j) –





Списки имеют большой набор функций:

• append , extend – добавление;

• insert – вставка;

• index – найти индекс первого вхождения конкретного элемента;

• count – подсчет повторов элемента;

• remove , del – удаление элемента;

• sort – сортировка;

• reverse – реверс;

• pop – извлечение элемента;

• len – длина списка;

• max – максимальный элемент;

• min – минимальный элемент;

• оператор in – проверка элемента на вхождение.






4.2 Словари


Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется словарем или ассоциативным массивом. Соответствующая структура данных в языке Python 3 называется dict.

Каждый элемент словаря состоит из двух объектов: ключа и значения. В примере ниже ключом является название страны, а значением является название столицы. Ключ идентифицирует элемент словаря, значение является данными, которые соответствуют данному ключу. Значения ключей – уникальны, двух одинаковых ключей в словаре быть не может.



# Создадим пустой словарь Capitals

Capitals = dict()



# Заполним его несколькими значениями

Capitals['Russia'] = 'Moscow'

Capitals['Ukraine'] = 'Kiev'

Capitals['USA'] = 'Washington'



Countries = ['Russia', 'France', 'USA', 'Russia']



for country in Countries:

# Для каждой страны из списка проверим, есть ли она в словаре Capitals

if country in Capitals:

print('Столица страны ' + country + ': ' + Capitals[country])

else:

print('В базе нет страны c названием ' + country)



Столица страны Russia: Moscow

В базе нет страны c названием France

Столица страны USA: Washington

Столица страны Russia: Moscow

Методы словарей:

• clear() – очищает словарь;

• copy() – возвращает копию словаря;

• fromkeys(seq[, value]) – создает словарь с ключами из seq и значением value (по умолчанию None);

• get(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None);

• items() – возвращает пары (ключ, значение);

• keys() – возвращает ключи в словаре;

• pop(key[, default]) – удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение);

• popitem() – удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены;

• setdefault(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None);

• update([other]) – обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None (не новый словарь!);

• values() – возвращает значения в словаре.

Countries = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington', 'Kazakhstan': 'Astana'}



print(Countries)



key1 = 'USA'

key2 = 'us'

if key1 in Countries:

del Countries[key1]



try:

del Countries[key2]

except KeyError:

print('Нет элемента с ключом "' + key2 + '" в словаре')



print(Countries)



{'Ukraine': 'Kiev', 'Russia': 'Moscow', 'Kazakhstan': 'Astana', 'USA': 'Washington'}

Нет элемента с ключом "us" в словаре

{'Ukraine': 'Kiev', 'Russia': 'Moscow', 'Kazakhstan': 'Astana'}



# Преобразование списка-кортеджа в словарь

users = (

("+111123455", "Tom"),

("+384767557", "Bob"),

("+958758767", "Alice")

)

users_dict = dict(users)

print(users)

print(users_dict)



# получаем элемент с ключом "+111123455"

print(users_dict["+111123455"]) # Tom



# установка значения элемента с ключом "+384767557"

users_dict["+384767557"] = "Bob Smith"

print(users_dict["+384767557"]) # Bob Smith



(('+111123455', 'Tom'), ('+384767557', 'Bob'), ('+958758767', 'Alice'))

{'+958758767': 'Alice', '+384767557': 'Bob', '+111123455': 'Tom'}

Tom

Bob Smith



4.2.1 Сортировка словарей



# Пример подсчета одинаковых символов в текстовом файле с использованием словаря

my_dict = dict()



my_text = open(u'D:/text.txt', 'r').read()



for c in my_text:

if c in my_dict:

my_dict[c] = my_dict[c] + 1

else:

my_dict.update({c: 1})



for w in sorted(my_dict, key=my_dict.get, reverse=True):

print(w, my_dict[w])



L 9

o 9

f 8

p 8








4.3 Циклы




mas = ['Ленин', 'Сталин', 'Хрущёв', 'Брежнев', 'Горбачёв', 'Путин']

mas.append('Медведев')



for x in mas:

print('правил ' + x + ' а после него… ')



a = 1

while (a < 5):

print(a, "^ 2 =", a * a, ' ', a ** 2)

a = a + 1



print('Висит груша, нельзя скушать. Что это такое?')



s = ''

while ((s != 'Лампочка') and (s != 'лампочка')):

s = input('Введите ответ и нажмите Enter: ')



print('Вы отгадали загадку!')



правил Ленин а после него…

правил Сталин а после него…

правил Хрущёв а после него…

правил Брежнев а после него…

правил Горбачёв а после него…

правил Путин а после него…

правил Медведев а после него…

1 ^ 2 = 1 1

2 ^ 2 = 4 4

3 ^ 2 = 9 9

4 ^ 2 = 16 16

Висит груша, нельзя скушать. Что это такое?

Введите ответ и нажмите Enter: лампочка

Вы отгадали загадку!





print('Введите стих, отделяя строки нажатием Enter, последней строкой введите слово Конец')

while (True):

s = str(input())

if ((s == 'Конец') or (s == 'конец')):

break

k = 0

for x in s: # Перебор по буквам слова

if (x in 'аеёиоуыэюя'): # Проверка буквы на гласную

k = k + 1

print(k)

Это мой новый стих

5

Красивый и новый

6

Да

1

Конец





month = ["январь", "февраль", 'март', 'апрель']

print(month[0]) # январь

print(month[0:2]) # ['январь', 'февраль']

print('Как прекрасны месяцы', " и ".join(month), "!") # Как прекрасны месяцы январь и февраль и март и апрель !





Конец ознакомительного фрагмента. Получить полную версию книги.


Текст предоставлен ООО «ЛитРес».

Прочитайте эту книгу целиком, купив полную легальную версию (https://www.litres.ru/sergey-nikolaevich-talipov/programmirovanie-na-python3-s-pyqt5/) на ЛитРес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.



Основы программирования на Python3 с визуальными компонентами PyQt5 (для PyCharm Community).

Как скачать книгу - "Программирование на Python3 с PyQt5" в fb2, ePub, txt и других форматах?

  1. Нажмите на кнопку "полная версия" справа от обложки книги на версии сайта для ПК или под обложкой на мобюильной версии сайта
    Полная версия книги
  2. Купите книгу на литресе по кнопке со скриншота
    Пример кнопки для покупки книги
    Если книга "Программирование на Python3 с PyQt5" доступна в бесплатно то будет вот такая кнопка
    Пример кнопки, если книга бесплатная
  3. Выполните вход в личный кабинет на сайте ЛитРес с вашим логином и паролем.
  4. В правом верхнем углу сайта нажмите «Мои книги» и перейдите в подраздел «Мои».
  5. Нажмите на обложку книги -"Программирование на Python3 с PyQt5", чтобы скачать книгу для телефона или на ПК.
    Аудиокнига - «Программирование на Python3 с PyQt5»
  6. В разделе «Скачать в виде файла» нажмите на нужный вам формат файла:

    Для чтения на телефоне подойдут следующие форматы (при клике на формат вы можете сразу скачать бесплатно фрагмент книги "Программирование на Python3 с PyQt5" для ознакомления):

    • FB2 - Для телефонов, планшетов на Android, электронных книг (кроме Kindle) и других программ
    • EPUB - подходит для устройств на ios (iPhone, iPad, Mac) и большинства приложений для чтения

    Для чтения на компьютере подходят форматы:

    • TXT - можно открыть на любом компьютере в текстовом редакторе
    • RTF - также можно открыть на любом ПК
    • A4 PDF - открывается в программе Adobe Reader

    Другие форматы:

    • MOBI - подходит для электронных книг Kindle и Android-приложений
    • IOS.EPUB - идеально подойдет для iPhone и iPad
    • A6 PDF - оптимизирован и подойдет для смартфонов
    • FB3 - более развитый формат FB2

  7. Сохраните файл на свой компьютер или телефоне.

Видео по теме - ВИДЕО-КОНСПЕКТ ЛЕКЦИЙ ПО ПРОГРАММИРОВАНИЮ НА PYTHON3 С PYQT5

Книги автора

Рекомендуем

Последние отзывы
Оставьте отзыв к любой книге и его увидят десятки тысяч людей!
  • константин александрович обрезанов:
    3★
    21.08.2023
  • константин александрович обрезанов:
    3.1★
    11.08.2023
  • Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *