Форум сайта python.su
0
def makelist(start, stop, inc): #тело функции которая добавляет значения
value = start
result = []
while value <= stop:
result.append(round(value, 1))
value = value + inc
return result
# Ввод исходных данных (пока 3 слоя)
IGE1=float(input("Введите мощность ИГЭ1, м: " ))
#nazv_IGE1=input("Название слоя1: ")
IGE2=float(input("Введите мощность ИГЭ2, м: " ))
#nazv_IGE2=input("Название слоя2: ")
IGE3=float(input("Введите мощность ИГЭ3, м: " ))
#nazv_IGE3=input("Название слоя3: ")
dh=float(input("Введите шаг разбивки (не менее 0,4х(ширишу), например 0.2), м: " ))
dhIGE1 = makelist((0.0),(IGE1), dh)
dhIGE2 = makelist((IGE1),(IGE1+IGE2), dh)
dhIGE3 = makelist((IGE1+IGE2),(IGE1+IGE2+IGE3), dh)
print ("Список элементарных слоев ИГЭ1",dhIGE1) # выведет значения списков
print ("Список элементарных слоев ИГЭ2",dhIGE2)
print ("Список элементарных слоев ИГЭ3",dhIGE3)
print("___________ сумма:")
print("--Мощность ИГЭ1, м (проверка): ",max(dhIGE1)-min(dhIGE1))
print("--Мощность ИГЭ2, м (проверка): ",max(dhIGE2)-min(dhIGE2))
print("--Мощность ИГЭ3, м (проверка): ",max(dhIGE3)-min(dhIGE3))
"C:\Python 3.5\python.exe" C:/Users/Николай/PycharmProjects/untitled1/py1.py
=====================
Введите мощность ИГЭ1, м: 1
Введите мощность ИГЭ2, м: 2
Введите мощность ИГЭ3, м: 3
Введите шаг разбивки (не менее 0,4х(ширишу), например 0.2), м: 0.2
Список элементарных слоев ИГЭ1 [0.0, 0.2, 0.4, 0.6, 0.8, 1.0]
Список элементарных слоев ИГЭ2 [1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8]
Список элементарных слоев ИГЭ3 [3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8]
___________ сумма:
--Мощность ИГЭ1, м (проверка): 1.0
--Мощность ИГЭ2, м (проверка): 1.7999999999999998
--Мощность ИГЭ3, м (проверка): 2.8
Отредактировано NikolayKotov (Ноя. 29, 2015 20:16:02)
Офлайн
0
Вот файл 
Прикреплённый файлы:
py11.py (1,5 KБ)
Офлайн
253
Николай а вопрос где? Пока это только утверждение что вы не можете разобраться. Мы вам верим.
Офлайн
0
doza_andподредактировал сообщение, см. выше
Николай а вопрос где? Пока это только утверждение что вы не можете разобраться. Мы вам верим.
Офлайн
20
NikolayKotovПопробуйте добавить поправку на погрешности округления. Например, пусть эта поправка будет 0.1% от величины шага разбивки. Я так сделал, и сразу все получилось:
Где-то теряется инкремент (в моем случае 0,2)
def makelist(start, stop, inc): #тело функции которая добавляет значения value = start result = [] while value <= stop + 0.001*inc: # погрешность 0.0002 м, если шаг разбивки 0.2м result.append(round(value, 1)) value = value + inc return result
Отредактировано old_monty (Ноя. 29, 2015 21:43:37)
Офлайн
0
old_montyВсе сделал как Вы предложили. Все осталось по старому…. Все как в первом сообщении
Отредактировано NikolayKotov (Ноя. 29, 2015 22:21:21)
Офлайн
857
NikolayKotovПотому что ты там round() применяешь. Из-за этого оно и теряется.
–Мощность ИГЭ2, м (проверка): 1.7999999999999998 (должно быть 2.0!!!!)
Офлайн
0
py.user.nextА что нужно применить в данном случае?
Офлайн
857
NikolayKotovУбери там round() вообще. Для вывода одного знака после точки используется спецификатор вывода.
А что нужно применить в данном случае?
>>> round(1.450, 1) 1.4 >>>
Офлайн