Найти - Пользователи
Полная версия: Не получается разобраться Питон 3
Начало » Python для новичков » Не получается разобраться Питон 3
1
NikolayKotov
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

При проверке мощностей слоев должно совпадать с верхними значениями 1, 2, 3
–Мощность ИГЭ1, м (проверка): 1.0 (верно!!!!)
–Мощность ИГЭ2, м (проверка): 1.7999999999999998 (должно быть 2.0!!!!)
–Мощность ИГЭ3, м (проверка): 2.8 (должно быть 3.0)
Как сделать так, чтобы введенные значения мощностей слоев (в примере 1 м, 2 м, 3 м) совпали со зачениями списков? Где-то теряется инкремент (в моем случае 0,2)



Другими словами. У меня есть слои грунта. Их нужно разделить на n частей. Вывести на экран значения этих частей с постепенным приращением…. Может есть и другой способ.
NikolayKotov
Вот файл
doza_and
Николай а вопрос где? Пока это только утверждение что вы не можете разобраться. Мы вам верим.
NikolayKotov
doza_and
Николай а вопрос где? Пока это только утверждение что вы не можете разобраться. Мы вам верим.
подредактировал сообщение, см. выше
old_monty
NikolayKotov
Где-то теряется инкремент (в моем случае 0,2)
Попробуйте добавить поправку на погрешности округления. Например, пусть эта поправка будет 0.1% от величины шага разбивки. Я так сделал, и сразу все получилось:
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
NikolayKotov
old_monty
Все сделал как Вы предложили. Все осталось по старому…. Все как в первом сообщении

Странно… Проверил в PyCharm - там все осталось по прежнему….
Открыл IDLE - создал новый файл… его сохранил и запустил - и о чудо….Все нормально…

Не понял почему так происходит. Разъясните новичку
py.user.next
NikolayKotov
–Мощность ИГЭ2, м (проверка): 1.7999999999999998 (должно быть 2.0!!!!)
Потому что ты там round() применяешь. Из-за этого оно и теряется.
NikolayKotov
py.user.next
А что нужно применить в данном случае?
py.user.next
NikolayKotov
А что нужно применить в данном случае?
Убери там round() вообще. Для вывода одного знака после точки используется спецификатор вывода.

python.org. round
>>> round(1.450, 1)
1.4
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB