Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 29, 2015 19:40:34

NikolayKotov
Зарегистрирован: 2015-11-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

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 (Ноя. 29, 2015 20:16:02)

Офлайн

#2 Ноя. 29, 2015 19:45:55

NikolayKotov
Зарегистрирован: 2015-11-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

Вот файл

Прикреплённый файлы:
attachment py11.py (1,5 KБ)

Офлайн

#3 Ноя. 29, 2015 20:03:46

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

Николай а вопрос где? Пока это только утверждение что вы не можете разобраться. Мы вам верим.



Офлайн

#4 Ноя. 29, 2015 20:12:08

NikolayKotov
Зарегистрирован: 2015-11-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

doza_and
Николай а вопрос где? Пока это только утверждение что вы не можете разобраться. Мы вам верим.
подредактировал сообщение, см. выше

Офлайн

#5 Ноя. 29, 2015 21:29:58

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

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

Отредактировано old_monty (Ноя. 29, 2015 21:43:37)

Офлайн

#6 Ноя. 29, 2015 22:15:48

NikolayKotov
Зарегистрирован: 2015-11-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

old_monty
Все сделал как Вы предложили. Все осталось по старому…. Все как в первом сообщении

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

Не понял почему так происходит. Разъясните новичку

Отредактировано NikolayKotov (Ноя. 29, 2015 22:21:21)

Офлайн

#7 Ноя. 30, 2015 00:54:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

NikolayKotov
–Мощность ИГЭ2, м (проверка): 1.7999999999999998 (должно быть 2.0!!!!)
Потому что ты там round() применяешь. Из-за этого оно и теряется.



Офлайн

#8 Ноя. 30, 2015 13:52:45

NikolayKotov
Зарегистрирован: 2015-11-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

py.user.next
А что нужно применить в данном случае?

Офлайн

#9 Дек. 1, 2015 00:33:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Не получается разобраться Питон 3

NikolayKotov
А что нужно применить в данном случае?
Убери там round() вообще. Для вывода одного знака после точки используется спецификатор вывода.

python.org. round
>>> round(1.450, 1)
1.4
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version