ЛБ6
.docx
Инженерная школа природных ресурсов
Направление подготовки Химическая технология
Отделение химической инженерии
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА PYTHON
Отчет по лабораторной работе № 6
Словари и множества
Выполнил студент гр. ХИМ54 А.В. Чижова
(Подпись)
01.01.2026 г.
Отчет принят:
Преподаватель
доцент ОХИ ИШПР, к.т.н. В.А. Чузлов
(Подпись)
_____ _____________ 2026 г.
Томск 2026 г.
Задание 1
Даны экспериментальные значения кривой истинных температур кипения (ИТК) нефтяной фракции:
Процент выкипания, % об. |
10 |
30 |
50 |
70 |
90 |
Температура по кривой ИТК, 0С |
160.56 |
188.33 |
209.44 |
230.56 |
255.00 |
Необходимо определить температуры выкипания для данной фракции по методу ASTM D86.
Для определения температур выкипания фракции по методу ASTM D86 по данным кривой ИТК, необходимо использовать следующее уравнение:
|
(1) |
где ИТК(50) - наблюдаемая истинная температура выкипания 50 % об . фракции, °F ; ASTM D86 (50) - температура выкипания 50 % об . фракции по ASTM D86, °F
Перевести °C в °F можно следующим образом:
|
(2) |
Для определения разницы между соседними фракциями, необходимо использовать следующее уравнение:
|
(3) |
где
- наблюдаемая разность истинных температур
выкипания между двумя точками, °F;
- разность истинных температур выкипания
между двумя точками по методу ASTM D86, °F;
A и B - константы, для различных диапазонов
выкипания фракций, представленные ниже:
i |
Диапазон выкипания |
А |
В |
1 |
90 % - 70 % |
3.0419 |
0.75497 |
2 |
70 % - 50 % |
2.5282 |
0.82002 |
3 |
50 % - 30 % |
3.0305 |
0.80076 |
4 |
30 % - 10 % |
4.9004 |
0.71644 |
Для определения температуры по ASTM D86 при заданном проценте выкипания, необходимо воспользоваться следующими формулами:
|
(4) |
Программная реализация:
def fahrenheit_to_celsius(f):
return (f-32)*5/9
itk_f = {}
for percent in itk:
itk_f[percent] = celsius_to_fahrenheit(itk[percent])
ASTM_D86_50 = math.exp(math.log(itk_f[50]/0.87180)/1.0258)
X1 = itk_f[90] - itk_f[70]
X2 = itk_f[70] - itk_f[50]
X3 = itk_f[50] - itk_f[30]
X4 = itk_f[30] - itk_f[10]
Y1 = (X1 / const[0]['A']) ** (1/const[0]['B'])
Y2 = (X2 / const[1]['A']) ** (1/const[1]['B'])
Y3 = (X3 / const[2]['A']) ** (1/const[2]['B'])
Y4 = (X4 / const[3]['A']) ** (1/const[3]['B'])
ASTM_D86_10 = ASTM_D86_50 - Y3 - Y4
ASTM_D86_30 = ASTM_D86_50 - Y3
ASTM_D86_70 = ASTM_D86_50 + Y2
ASTM_D86_90 = ASTM_D86_50 + Y2 + Y1
result_f = {
10: ASTM_D86_10,
30: ASTM_D86_30,
50: ASTM_D86_50,
70: ASTM_D86_70,
90: ASTM_D86_90,
}
result = {}
for percent in result_f:
result[percent] = fahrenheit_to_celsius(result_f[percent])
print(result)
Ответ:
{10: 178.21973628400863, 30: 192.4281342251063, 50: 205.49684141763177, 70: 220.6410767776274, 90: 239.7622885760454}
Задание 2
Температуру плавления углеводородов различных гомологических рядов с числом атомов углерода C7-C40 можно оценить с приемлемой точностью (ошибка 1-1.5 %) по следующим формулам:
|
|
|
(6) |
|
|
где
,
,
–
температура плавления парафиновых,
нафтеновых и ароматических углеводородов,
соответственно, К; М – молекулярная
масса соответствующего углеводорода,
г/моль.
Данные
по углеводородам различных классов и
их молекулярным массам сохранены в
следующем словаре
Рассчитайте температуру плавления, используя формулу (6) и данные из словаря data. Результаты сохраните в отдельный словарь, в котором ключами будут имена компонентов, а значениями рассчитанные температуры плавления этих компонентов.
Программная реализация:
import math
data = {
'5-Mnonane': {
'formula': 'C10H22',
'M': 142.285004,
'family': 'P',
},
'n-C22': {
'formula': 'C22H46',
'M': 310.588013,
'family': 'P',
},
'n-Nonane': {
'formula': 'C9H20',
'M': 128.259003,
'family': 'P',
},
'n-BUTYLCYCLOHEXANE': {
'formula': 'C10H20',
'M': 140.270000,
'family': 'N',
},
'n-Dodecyl-BZ': {
'formula': 'C18H30',
'M': 246.419006,
'family': 'A',
},
'n-Hexyl-BZ': {
'formula': 'C12H18',
'M': 162.274002,
'family': 'A',
},
'CYCLOPENTANE': {
'formula': 'C9H18',
'M': 126.240000,
'family': 'N',
},
}
result = {}
for hydrocarbon in data:
if(data[hydrocarbon]['family'] == 'P'):
result[hydrocarbon] = 397 - math.exp(6.5096 - 0.14187 * data[hydrocarbon]['M'] ** 0.47)
elif(data[hydrocarbon]['family'] == 'N'):
result[hydrocarbon] = 370 - math.exp(6.52504 - 0.04945 * data[hydrocarbon]['M'] ** (2/3))
elif(data[hydrocarbon]['family'] == 'M'):
result[hydrocarbon] = 395 - math.exp(6.53599 - 0.04912 * data[hydrocarbon]['M'] ** (2/3))
print(result)
Ответ:
{'5-Mnonane': 240.78951653856552, 'n-C22': 315.1598206640788, 'n-Nonane': 229.55863884636645, 'n-BUTYLCYCLOHEXANE': 190.52145169100916, 'CYCLOPENTANE': 173.50681974496078}
Задание 3
Необходимо создать список a , содержащий 30 случайных целых чисел из интервала [0,25] (воспользуйтесь функцией randint() из модуля random). Необходимо определить сколько в нем встречается уникальных чисел.
Программная реализация:
import random
a = [random.randint(0, 25) for _ in range(30)]
count_unique = 0
for num in a:
if(a.count(num) == 1):
count_unique += 1
print(a)
print(count_unique)
Ответ:
[24, 12, 25, 15, 14, 3, 0, 20, 5, 6, 11, 25, 3, 14, 19, 20, 3, 22, 1, 14, 3, 12, 10, 9, 19, 1, 8, 11, 8, 10]
7
Задание 4
Необходимо создать список a, содержащий 20 случайных целых чисел из интервала [0,20] , и список b содержащий 15 случайных целых чисел из интервала [10,30] . Выведите все числа, которые входят как в список a , так и в список b в порядке возрастания.
Программная реализация:
import random
a = [random.randint(0, 20) for _ in range(20)]
b = [random.randint(10, 30) for _ in range(15)]
both = list()
for num in a:
if(b.__contains__(num)):
both.append(num)
both = list(set(both))
both.sort()
print(both)
Ответ:
[10, 13, 14, 18, 20]
