Kitobni o'qish: «Python-3. Полезные программы. Книга вторая»
Введение.
Книга вторая.
Инженер конструктор отдела гл.механика Механического завода Гаврилов Сергей Федорович написал эту книгу для начинающих программистов, желающих начать программировать на языке Python 3. Книга будет полезна для студентов механиков и для конструкторов механиков а также дл разметчиков. Данная книга содержит набор небольших рабочих программ облегчающих геометрические расчеты встречающиеся в практической работе цехового конструктора и разметчика. Предлагаемые в книге расчеты существенно экономят время и уменьшают вероятность ошибок. Все программы проверены и постоянно используются в работе конструктора механика. Листинги программ снабжены пояснениями. Листинги удобно использовать в качестве готовых блоков для вновь разрабатываемых программ. Для практического применения листингов программ проверьте – установлен ли на вашем компьютере Python 3.4. или более старшая версия Python 3.8..Python 3.4 распространяется свободно и бесплатно – например на сайте https://soft-file.ru/python/ Перед скачиванием исходника Python 3.4 проверьте разрядность вашей ЭВМ. Посмотрите вкладку – Компьютер – Свойства системы. Бывают 32 разрядные и 64 разрядные системы. Для каждой системы свой Python 3.4..
Примечание:
Программы написаны для Python 3.4 и более новых версий. На Python 2 программы работать не будут, так как в Python 3.4 написание команд отличается от Python 2.
В программе на любом языке очень важен синтаксис – порядок написания символов в строке.
Малейшая ошибка, которую человек даже не заметит, – ЭВМ замечает и отказывается исполнять программу. Поэтому проще копировать блоки уже работающих программ в свою программу, при необходимости, подправить готовые блоки легче, чем писать блок заново – так будет меньше ошибок в программе и экономится время.
Программа в Python состоит из строк, написанных в простом текстовом редакторе.
Текстовый редактор должен быть именно простым, к примеру Блокнот. Редактор Microsoft Word не годится потому, что он вставляет в строку невидимые служебные символы, которые, искажают команды Python и программа отказывается работать. Если листинг программы вы скачали в формате «.doc » или подобном – следует создать пустой текстовый файл в программе « Блокнот » – выделить и скопировать листинг из файла «.doc » и вставить в пустой текстовый файл « Блокнота » с расширением «.txt » и сохранить его с именем программы. Затем открыть этот файл и сохранить уже с расширением «.py ». Вам будут нужны оба этих файла.
Важно, строки программы должны начинаться без пробела точно с начала строки.
Если в программе имеются логические операторы, например while или for, то за таким оператором следуют строки одного или нескольких блоков. Блоки выполняются программой,
или пропускаются без исполнения, в зависимости от условия в логическом операторе.
Блоки отделяются от основной программы пробелами в начале строки. Обычно в начале строки блока ставят четыре пробела. Число пробелов в начале строки – важная величина.
Если в компьютере Python 3.4 установлен правильно, то при двойном клике мышью на файле с расширением “.py ”. программа начнет исполнятся. Если программа стопорится или вылетает – Запускаем файл редактора программы « IDLE( Python GUI) » в этом редакторе щелкаем левой кнопкой мыши на – File – затем Open. В выпавшем меню находим свой файл, выделяем его – щелкаем – Открыть. На экран выводится листинг вашего файла с выделением цветом элементов команд. Находим колонку – Run- щелкнув – открываем выпадающее меню и щелкаем на – Run Module F5 – Ваша программа начинает выполняться и останавливается на месте ошибки. Иногда она останавливается на следующей за ошибкой команде. Выводится комментарий к ошибке на английском. В некоторых случаях помогает удаление строки в начале программы « # -*– coding: cp1251 -*– » и программа заработает.
»Программа редактор « IDLE( Python GUI) » идет в комплекте с программой Python 3.4.. и служит для нахождения ошибок в разрабатываемой программе.
При верстке книги « умные программы » что-то убирают, а что-то добавляют, искажая оригинал.
К примеру при верстке удаляются все « лишние» пробелы. Скопировав листинг программы в «Блокноте» в формате «.txt» необходимо восстановить утраченные пробелы. Перед знаком # расположенным после команды надо добавить два пробела. В блоках- там, где блок выделяется пробелами, перед строками блока написана фраза: # Далее Cдвиг – четыре пробела в начале каждой строки. Соответственно в листинг ставим четыре пробела в начало каждой строки. Там, где блок закончился, написано: # Далее Конец Cдвига – четыре пробела в начале каждой строки – и строки начинаются без пробелов в начале строки. Иногда меняется вид ковычек – тоже не дает работать программе – искать такие ошибки лучше в «IDLE( Python GUI)». Если при копировании программа не работает: обращайтесь gsf4610@yandex.ru к автору.
Написание чисел с дробной десятичной частью.
При вводе числа с дробной частью, необходимо отделять дробную часть от целой части числа точкой. Если части числа разделить запятой – программа вылетает без предупреждения.
Величины углов для расчета в программе необходимо задавать в радианах. Если программа в результат расчета выводит величину угла – то он выводится в радианах. Ответ на экран удобнее выводить в градусах – при выводе радианы переводят в градусы. При вводе угловых величин- их обычно вводят в градусах и, перед подачей в расчетную часть, переводят в радианы.
Написание комментариев.
Значок # предваряет начало комментариев. То, что следует за значком программа просто пропускает, переходя на следующую строку. Комментарий программист пишет себе для справки,чтобы потом ему или другому программисту было легче разобраться в работе программы.
Линейная интерполяция
Линейную интерполяцию применяем для определения значения коэффициента находящегося между двемя табличными значениями.
Листинг программы.
# -*– coding: cp1251 -*-
import math # Подключили математич модуль
# Эти первые две строки листинга определяют таблицу кодировки символов
# и подключают библиотеку для математических расчетов.
# Эти две строки, точно без изменения, применяют во всех листингах программ.
uu=” “ # Далее идет вывод на экран заголовка программы.
print (uu)
print (uu)
u=" Расчет линейной интерполяции "
print (u)
print (uu)
# Далее вводим в программу исходные данные для расчета.
print (uu)
u=" Введите X1 "
print (u)
print (uu)
x1=0.00000000
x1=input( ) # Вводим число
x1=float(x1) # Принудительно в вещественное число
print (uu)
u=" Введите X2 "
print (u)
print (uu)
x2=0.00000000
x2=input( ) # Вводим число
x2=float(x2) # Принудительно в вещественное число
print (uu)
u=" Введите Xx "
print (u)
print (uu)
xx=0.00000000
xx=input( ) # Вводим число
xx=float(xx) # Принудительно в вещественное число
print (uu)
u=" ........................................................................ "
print (u)
print (uu)
u=" Введите Y1 "
print (u)
print (uu)
y1=0.00000000
y1=input( ) # Вводим число
y1=float(y1) # Принудительно в вещественное число
print (uu)
u=" Введите Y2 "
print (u)
print (uu)
y2=0.00000000
y2=input( ) # Вводим число
y2=float(y2) # Принудительно в вещественное число
# Далее идет расчет по формуле..
yx=(((y2-y1)*(xx-x1))/(x2-x1))+y1
# Далее выводится на экран результат расчета
u=" ........................................................................ "
print (u)
print (u)
print (uu)
print (uu)
u=" X1 = ", x1," Y1 = ",y1," "
print (u)
print (uu)
u=" X2 = ", x2," Y2 = ",y2," "
print (u)
print (uu)
u=" Xx = ", xx," Yx = ",yx," "
print (u)
print (uu)
u=" ..... ..... ..... ..... ..... ...... ...... "
print (u)
print (u)
print (uu)
print (uu)
input( ) # Ожидание нажима Ентер
# Далее делаем еще один расчет на тех же исходных данных и выводим результаты.
Pii=math.pi # Вытащили число " Пи " и поместили в переменную Pii …
cc=((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1))
c=math.sqrt(cc) # Квадратный корень из " cc "
cs=str(c) # Преобразуем число в строку
u=" Длина линии x1;y1 – x2;y2 = "+cs
print (uu)
print (u)
a=(y2-y1)/(x2-x1)
aur=math.atan(a) # Угол aur в радианах через арс тангенс
au=aur*180/Pii # Угол au в градусах ( переводим ).
aus=str(au) # Преобразуем число в строку
u=" Угол линии x1;y1 – x2;y2 с осью Х = "+aus+" градус "
print (uu) # Выводим пустую строку
print (u) # Выводим результат – угол в градусах
print (uu)
print (uu)
input( ) # Ожидание нажима Ентер что бы можно было прочитать результаты.
# ..... ..... ..... Конец листинга программы ..... ....
Расчет параметров численным интегрированием
Данная программа разработана для расчета момента инерции сложного сечения. Для расчета сечение было разбито по горизонтали на одинаковые по высоте участки ( шаги ). Длинны участков были замеряны и внесены в таблицу. Затем запускаем программу и последовательно вводим из таблицы значения длинн участков. Программа расчитывает момент инерции участка и площадь участка – затем суммирует эти величины. При вводе нуля на запрос длинны – программа показывает результат работы. Программу легко переделать на расчеты интеграции по другим законам.
# -*– coding: cp1251 -*-
# Алгоритм расчета момента инерции и площади интегрированием
import math # Подключили математич модуль
u=" Алгоритм временного расчета Jx интегрированием,"
uu=" "
uuu=" ...... ...... ....... ....... ...... ....... ....... "
print (uu)
print (uu)
print (u)
print (uuu)
print (uu)
u=" Ввести Шаг вдоль оси Y-Y "
print(u)
t=0.00
t=input( ) # Вводим число
t=float(t) # Принудительно в вещественное число
print (uu)
J=0.0000
J=float(J)
Jx=0.0000
Jx=float(Jx)
S=0.0000
S=float(S)
Ss=0.0000
Ss=float(Ss)
d=0.00000001
d=float(d)
L=0.0
L=float(L)
n=1
n=float(n)
while d>0:
# Далее строки начинаются с четырех пробелов.
L=L+t # Суммируем смещение по оси
ss=str(n) # Преобразуем число в строку
Lt=str(L) # Преобразуем число в строку
u=" Ввести высоту по оси Y-Y Ввод № "
u=u+ss+" Смещение по оси = "+Lt
print(u)
d=0.00
d=input( ) # Вводим число
d=float(d) # Принудительно в вещественное число
print (uu)
J=t*d*d*d/12 # Находим момент инерции элемента
Jx=Jx+J # Суммируем J
S=t*d # Нашли площадь элемента
Ss=Ss+S # Суммируем S
n=n+1 # Счетчик числа вводов
# Далее строки начинаются без пробелов.
Pii=math.pi # Вытащили число " Пи "
# Rk=math.sqrt(a) # Квадратный корень из " а "
# sur=math.asin(x) # Угол А в радианах
# su=sur*180/Pii # Угол А в градусах
print (uu)
uuuu=" ,,,, ,,,, ,,,, ,,,,, ,,,,, ,,,, ,,,,, ,,,,, ,,,,, "
print (uuuu)
print (uu)
u=" Площадь сечения = "
ss=str(Ss) # Преобразуем число в строку
u=u+ss
print (u)
print (uu)
u=" Момент инерции по оси Х-Х = "
ss=str(Jx) # Преобразуем число в строку
u=u+ss
print (u)
print (uu)
print (uu)
u=" ...... ...... ...... Конец рассчета ...... ...... ...... "
print (u)
print (uu)
print (uu)
input( ) # Ожидание нажима Ентер
print (uu)
# .............
# Конец программы.
Координаты точек на радиусной кривой
Программа бывает необходима при построении сегмента с радиусом
большой величины – который построить непосредственной разметкой
сложно или невозможно из за мешающих препятствий.
Результаты расчета записываются в файл 'Rezult.txt'.
Листинг программы.
# -*– coding: cp1251 -*-
import math # Подключили математический модуль
import sys # Подключили основные библиотеки
# ....... ....... ....... ...... ...... ....... ....... ......
Pii=math.pi # Вытащили число " Пи "
f = open('Rezult.txt', 'w') # Открыли файл для записи
# Записываем числа в текстовом виде
uu=" "
u=uu+"\n" # Добавим код перевода строки
f.write(u)
u1=" Расчет координат точек на радиусной кривой "
u=u1+"\n"
f.write(u)
uu=" "+"\n"
f.write(uu)
uuu=" ,,,,,,,,,, ,,,,,,,, ,,,,,,,, ,,,,,,,, ,,,,,,,, ,,,,,,,, "+"\n"
f.write(uuu)
f.write(uu)
print (uu)
u=" Построение большого радиуса методом подьема "
print (u)
print (uu)
u=" Размер по горизонтали отсчитывается от центра хорды "
print (u)
u=" от точки Х2 на хорде проводим перпендикуляр Нм расчитанной величины. "
print (u)
u=" При вводе размера по горизонту = нулю – выход из программы "
print (u)
print (uu)
input( ) # Ожидание нажима Ентер
print (uu)
a=0.00000000
y=0.00000000
ug=0.00000000
ugg=0.00000000
R=0.00000000
hm=0.00000000
ht= 0.0000000
u=" Введите радиус "
print (u)
print (uu)
R=input( ) # Вводим число
R=float(R) # Принудительно в вещественное число
u=" Радиус заданной кривой = "
ss=str(R) # Преобразуем число в строку
Rad=u+ss
u=Rad+"\n"
f.write(u)
u=" Введите Хорду L "
print (u)
print (uu)
a=input( ) # Вводим число
a=float(a) # Принудительно в вещественное число
u=" Хорда максимальная заданная L = "
ss=str(a) # Преобразуем число в строку
Xord=u+ss
u=Xord+"\n"
f.write(u)
# Находим значения максимального прогиба при X2 = 0....
x=((R*R)-(a*a/4))
b=R-(math.sqrt(x)) # Квадратный корень из " x "
# b – максимальный прогиб…
u=" Подъем максимальный в центре хорды = "
ss=str(b) # Преобразуем число в строку
Progi=u+ss
u=Progi+"\n"
f.write(u)
x=(a/2)/R
y=math.asin(x)
v=math.cos(y)
aur=2*y
au=aur*180/Pii # Угол А в градусах
Lx= 0.0000001 # <Начальное значение>
while Lx>0:
# Далее Cдвиг – четыре пробела в начале каждой строки
print (uu)
u=" Введите растояние от центра хорды до перпендикуляра X2 "
print (u)
print (uu)
Lx=input( ) # Вводим число
Lx=float(Lx)
u=" От центра хорды до точки X2 по оси Х-Х = "
ss=str(Lx) # Преобразуем число в строку
Xord=u+ss
u=Xord+"\n"
f.write(uu)
f.write(u)
x=(R*R)-(Lx*Lx)
z=math.sqrt(x)
y=R-z # Прогиб при хорде = Lx*2
ht=b-y # Расчитали величину подьема
u=" На растоянии от центра = "
ss=str(Lx) # Преобразуем число в строку
u=u+ss
print (u)
print (uu)
u=" Величина подьема ( перпендикуляра ) Hm = "
ss=str(ht) # Преобразуем число в строку
u=u+ss
print (u)
f.write(u)
f.write(uu)
print (uu)
u=" ================================================= "
print (u)
f.write(u)
print (uu)
input( ) # Ожидание нажима Ентер
# Далее Конец Cдвига – четыре пробела в начале каждой строки
print (uu)
input( ) # Ожидание нажима Ентер
print (uu)
# ....... ....... ....... ...... ...... ....... ....... ......
f.write(uu)
f.write(uuu)
f.close() # закрыли файл
# ....... ....... ....... ...... ...... ....... ....... ....... ........ ........ ........
u=" ...... ...... ...... Конец программы ...... ...... ...... "
print (u)
print (uu)
input( ) # Ожидание нажима Ентер – Позволяет рассмотреть результаты расчета
# ..... ..... ..... Конец листинга программы ..... ..
Хорда – Прогиб – Радиус
В этой программе объединены общим меню двенадцать небольших программ. Производится расчет при разном наборе исходных данных. Сейчас все привыкли к графическому интерфейсу – пункт меню вычирают мышкой и щелкают кнопкой. Здесь применен древний интерфейс: Пункты меню пронумерованы цифрами ( номерами ). Чтобы выбрать пункт меню – введите цифру номера пункта меню и нажмите Enter.
Листинг программы.
# -*– coding: cp1251 -*-
import math # Подключили математич модуль
global Rad # Радиус – Обьявили глобальную переменную
global Diam # Диаметр
global Xord # Хорда
global Progi # Прогиб
global UgSe # Угол раствора радиусов на хорду
global Dug # Длина дуги над хордой
global PlSe # Площадь сектора на хорду
global PlTr # Площадь Треугольника под хордой
global PlGo # Площадь Горбушки
u=" "
u=" Расчет элементов Хорда – Прогиб – Радиус "
print (uu)
print (u)
print (uu)
u=" ...... ...... ...... ...... ...... ...... ..... ...... "
print (u)
Pii=0.000000
Pii=math.pi # Вытащили число " Пи "
Kvz=0 # Флаг – Если =1 то работа уже выполнена.
print (uu)
u=" 1 – Расчет по Хорде – Радиусу "
print (u)
print (uu)
u=" 2 – Расчет по Хорде и Углу раствора "
print (u)
print (uu)
u=" 3 – Расчет координат Радиусной кривой "
print (u)
print (uu)
u=" 4 – Расчет по Хорде и длине Дуги "
print (u)
print (uu)
u=" 5 – Расчет по Хорде и Прогибу "
print (u)
print (uu)
u=" 6 – Расчет по Радиусу и Углу раствора "
print (u)
print (uu)
u=" 7 – Расчет по Радиусу и Прогибу "
print (u)
print (uu)
u=" 8 – Расчет по Радиусу и длине Дуги "
print (u)
print (uu)
u=" 9 – Расчет по Прогибу и длине Дуги "
print (u)
print (uu)
u=" 10 – Расчет по Прогибу и Углу раствора "
print (u)
print (uu)
u=" 11 – Расчет по Углу раствора и длине Дуги "
print (u)
print (uu)
u=" 12 – Расчет Правильного многогранника "
print (u)
print (uu)
u=" ...... ...... ...... ...... ...... ...... ..... ...... "
print (u)
q=0
q=input( ) # Вводим число
q=float(q) # Принудительно в вещественное число
# ...... ....... ....... ....... ....... ........ .......
if q==1:
Расчет по Хорде – Радиусу
# Далее Cдвиг – четыре пробела в начале каждой строки
print (uu)
print (uu)
u=" Расчет по Хорде – Радиусу "
print (u)
print (uu)
u=" Введите Хорду "
print (u)
print (uu)
a=0.00000000
a=input( ) # Вводим число
a=float(a) # Принудительно в вещественное число
u=" Введите Радиус "
print (u)
print (uu)
R=0.00000000
R=input( ) # Вводим число
R=float(R) # Принудительно в вещественное число
x=0.00000000
y=0.00000000
v=0.00000000
Sk=0.0000000
St=0.00000000
S=0.000000000
x=((R*R)-(a*a/4))
b=R-(math.sqrt(x)) # Квадратный корень из " x "
x=(a/2)/R
y=math.asin(x)
v=math.cos(y)
aur=2*y
au=aur*180/Pii # Угол А в градусах
Kvz=1 # Коэф – Расчет уже выполнен
# Далее Конец Cдвига – четыре пробела в начале каждой строки
else:
# Далее Cдвиг – четыре пробела в начале каждой строки
Kvz=0
# ...... ....... ....... ....... ....... ........ .......
# Далее Конец Cдвига – четыре пробела в начале каждой строки
if q==2:
Расчет по Хорде и углу раствора
# Угол раствора это угол между двумя радиусами идущими к концам хорды.
# Далее Cдвиг – четыре пробела в начале каждой строки
print (uu)
print (uu)
u=" Расчет по Хорде и углу раствора "
print (u)
print (uu)
u=" Введите Хорду "
print (u)
print (uu)
a=0.00000000
a=input( ) # Вводим число
a=float(a) # Принудительно в вещественное число
u=" Введите Угол раствора в градусах "
print (u)
print (uu)
au=0.00000000
au=input( ) # Вводим число
au=float(au) # Принудительно в вещественное число
x=0.00000000
aur=0.00000000
v=0.00000000
y=0.00000000
Sk=0.0000000
St=0.00000000
S=0.000000000
aur=au*Pii/180
x=math.sin(aur/2)
R=(a/2)/x # Нашли радиус
y=(R*R)-(a*a/4)
v=math.sqrt(y) # Квадратный корень из " y "
b=R-v # Нашли прогиб
Kvz=1 # Коэф – Расчет уже выполнен
# Далее Конец Cдвига – четыре пробела в начале каждой строки
else:
# Далее Cдвиг – четыре пробела в начале каждой строки
Kvz=0
# ...... ....... ....... ....... ....... ........ .......
# Далее Конец Cдвига – четыре пробела в начале каждой строки
if q<3:
Вывод по Хорде Прогиб Радиус
# Далее Cдвиг – четыре пробела в начале каждой строки
D=R+R
Sk=Pii*D*D*au/(4*360) # Площадь сектора круга с углом aur
St=(a/2)*(R-b) # Площадь треугольника в секторе
S = Sk-St # Площадь горбушки
L=Pii*D*au/360 # Длина дуги
print (uu)
u=" ,,,, ,,,, ,,,, ,,,,, ,,,,, ,,,, ,,,,, ,,,,, ,,,,, "
print (u)
print (uu)
print (uu)
u=" Хорда = "
ss=str(a) # Преобразуем число в строку
u=u+ss
print (u)
Xord=u
print (uu)
u=" Стрела прогиба = "
ss=str(b) # Преобразуем число в строку
u=u+ss
print (u)
Progi=u
print (uu)
u=" Радиус = "
ss=str(R) # Преобразуем число в строку
u=u+ss
print (u)
Rad=u
print (uu)
u=" Диаметр = "
ss=str(D) # Преобразуем число в строку
u=u+ss
print (u)
Diam=u
print (uu)
u=" Угол раствора хорды = "
ss=str(au) # Преобразуем число в строку
u=u+ss
print (u)
UgSe=u
print (uu)
u=" Длина дуги над хордой = "
ss=str(L) # Преобразуем число в строку
u=u+ss
print (u)
Dug=u
print (uu)
u=" Площадь сектора = "
ss=str(Sk) # Преобразуем число в строку
u=u+ss
print (u)
PlSe=u
print (uu)
u=" Площадь треугольника под горбушкой = "
ss=str(St) # Преобразуем число в строку
u=u+ss
print (u)
PlTr=u
print (uu)
u=" Площадь горбушки = "
ss=str(S) # Преобразуем число в строку
u=u+ss
print (u)
PlGo=u
print (uu)
# Далее Конец Cдвига – четыре пробела в начале каждой строки
# ...... ....... ....... ....... ....... ........ .......
if q==3:
Координаты радиусной кривой
# Далее Cдвиг – четыре пробела в начале каждой строки
q=13 # Переброс в конец программы
# ....... ....... ....... ...... ...... ....... ....... ......
# Далее Конец Cдвига – четыре пробела в начале каждой строки
if q==4:
Расчет по Хорде и длине Дуги
# Далее Cдвиг – четыре пробела в начале каждой строки
print (uu)
print (uu)
u=" Расчет по Хорде и длине Дуги "
print (u)
print (uu)
u=" Введите Хорду "
print (u)
print (uu)
a=0.00000000
a=input( ) # Вводим число
a=float(a) # Принудительно в вещественное число
u=" Введите длину Дуги "
print (u)
print (uu)
L=0.00000000
L=input( ) # Вводим число
L=float(L) # Принудительно в вещественное число
R=0.00000000
dx=a/200000
rt=(a/2)+dx # Начальный радиус расчета
aa=a/2 # Половина хорды
dl=Pii*rt
while dl>L: # Расчет по Хорде и длине Дуги
# Далее Cдвиг – восемь пробелов в начале каждой строки
rt=rt+dx # Текущий радиус
x=aa/rt
y=2*(math.asin(x)) # Угол А в радианах через арс синус
dl=rt*y # Текущая длина дуги
# Далее Cдвиг – четыре пробела в начале каждой строки
yg=y*180/Pii # Угол " y " в градусах
au=yg
R=rt # Нашли радиус
y=(R*R)-(aa*aa)
v=math.sqrt(y) # Квадратный корень из " y "
b=R-v # Нашли прогиб
D=R+R
Sk=Pii*D*D*yg/(4*360) # Площадь сектора круга с углом aur
St=aa*v # Площадь треугольника в секторе
S = Sk-St # Площадь горбушки
# Далее Конец Cдвига – четыре пробела в начале каждой строки
else:
# Далее Cдвиг – четыре пробела в начале каждой строки
Kvz=0
# Далее Конец Cдвига – четыре пробела в начале каждой строки
# ...... ...... ....... ...... ...... ....... ....... ....... ........
if q==5: