Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2012 19:26:24

vlad16_9
От:
Зарегистрирован: 2012-03-05
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема со списком.

Проблема в следующем, есть списки:

d1=[18,16.701,15.835]
d2=[20,18.701,17.835]
d3=[22,20.701,19.835]
d4=[24,22.701,21.835]
d5=[27,25.701,24.835]
d6=[30,28.701,27.835]
d7=[33,31.701,30.835]
d8=[36,34.701,33.835]
d9=[39,37.701,36.835]
d10=[42,40.701,39.835]
d11=[45,43.701,42.835]
d12=[48,46.701,45.835]
d13=[52,50.701,49.835]
d14=[58,54.701,53.835]
d15=[60,58.701,57.835]
d16=[64,62.701,61.835]
d17=[68,66.701,65.835]
d18=[72,70.701,69.835]
И есть некий расчет болтового соединения. Получается, что в формулу “G_z=…” подставляю первый диаметр из списка “d1”, затем полученное значение должен сравнить с допустимым, “G_d”, и в случае, если расчетное больше допустимого, я должен подставить следующий диаметр из списка “d2” уже. Необходимо подставлять только нулевые индексы списка, до того момента, пока расчетное “G_z” ,не станет меньше допустимого значения “G_d”. И в конце выдать на печать значения списка который получиться. Уважаемые ГУРУ, сможете чем либо помочь ??
D1=d1[0]
G_z=(4*Y)/(math.pi*D1**2)
while G_z>G_d:


G_z=(4*Y)/(math.pi*D1**2)
print "d=",D1, "мм"
print "G=",G_z,"МПа"
if G_z<=G_d:
print "d=",D1, "мм"
print "G=",G_z,"МПа"



Офлайн

#2 Март 22, 2012 00:41:21

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

Проблема со списком.

import math

Y = 1
G_D = 0.0003

d1 = [18, 16.701, 15.835]
d2 = [20, 18.701, 17.835]
d3 = [22, 20.701, 19.835]
d4 = [24, 22.701, 21.835]
d5 = [27, 25.701, 24.835]
d6 = [30, 28.701, 27.835]
d7 = [33, 31.701, 30.835]
d8 = [36, 34.701, 33.835]
d9 = [39, 37.701, 36.835]
d10 = [42, 40.701, 39.835]
d11 = [45, 43.701, 42.835]
d12 = [48, 46.701, 45.835]
d13 = [52, 50.701, 49.835]
d14 = [58, 54.701, 53.835]
d15 = [60, 58.701, 57.835]
d16 = [64, 62.701, 61.835]
d17 = [68, 66.701, 65.835]
d18 = [72, 70.701, 69.835]

dall = [d1, d2, d3, d4, d5, d6, d7, d8, d9, d10,
d11, d12, d13, d14, d15, d16, d17, d18]

def g_z(n):
return 4 * Y / (math.pi * n * n)


def f(lst):
for i in lst:
#print(i[0], g_z(i[0]), G_D)
if g_z(i[0]) < G_D:
return i


r = f(dall)
if r is not None:
print(r)
>>> r = f(dall)
>>> if r is not None:
... print(r)
...
[68, 66.701, 65.835]
>>>



Отредактировано (Март 22, 2012 00:45:58)

Офлайн

#3 Март 22, 2012 00:48:21

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Проблема со списком.

import math

d1 = [18, 16.701, 15.835]
d2 = [20, 18.701, 17.835]
d3 = [22, 20.701, 19.835]
d4 = [24, 22.701, 21.835]
d5 = [27, 25.701, 24.835]
d6 = [30, 28.701, 27.835]
d7 = [33, 31.701, 30.835]
d8 = [36, 34.701, 33.835]
d9 = [39, 37.701, 36.835]
d10 = [42, 40.701, 39.835]
d11 = [45, 43.701, 42.835]
d12 = [48, 46.701, 45.835]
d13 = [52, 50.701, 49.835]
d14 = [58, 54.701, 53.835]
d15 = [60, 58.701, 57.835]
d16 = [64, 62.701, 61.835]
d17 = [68, 66.701, 65.835]
d18 = [72, 70.701, 69.835]

Y = 1.2
G_d = 0.0012

def diameters():
for d in zip(*(globals()["d{}".format(_)] for _ in range(1, 19))).__next__():
yield (4 * Y) / (math.pi * d**2)

if "__main__" == __name__:
for i, g in enumerate(diameters()):
if g < G_d:
print(globals()["d{}".format(i + 1)])
break



Офлайн

#4 Март 22, 2012 07:57:34

vlad16_9
От:
Зарегистрирован: 2012-03-05
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема со списком.

Спасибо большое !! Просчитывает то, что нужно. Но теперь возникла еще одна проблема :( При подсчете резьбы с зазором необходимо просчитывать через три формулы. Пробовал сделать так, по образу и подобию:

def G_bz(n):
return 4 * Q / (math.pi * n * n)

def Tau(n):
return 4*T/(math.pi*n*n)

def G_ekv(G_bz,Tau):
return (G_bz**2+3*Tau**2)**0.5

def f(lst):
for i in lst:
print(i[0], G_ekv(i[0]), G_d)
if G_ekv(i[0]) < G_d:
return i

r = f(dall)
if r is not None:
print(r)
Однако, не все так гладко, выдает ошибку:
Traceback (most recent call last):
File "C:\Users\Владислав\Desktop\Prog_Puthon\rezba(forum).py", line 77, in <module>
r = f(dall)
File "C:\Users\Владислав\Desktop\Prog_Puthon\rezba(forum).py", line 73, in f
print(i[0], G_ekv(i[0]), G_d)
TypeError: G_ekv() takes exactly 2 arguments (1 given)
Пробовал делать через классы, но тоже не сработало :(



Офлайн

#5 Март 22, 2012 08:10:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема со списком.

def G_ekv(G_bz,Tau):
# Два аргумента
G_ekv(i[0])
# Один аргумент



Офлайн

#6 Март 22, 2012 14:09:49

vlad16_9
От:
Зарегистрирован: 2012-03-05
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема со списком.

G_ekv пересчитывается, с учетом двух предыдущих функций, потом сравнивается и опять пересчитывается. У меня не получается сравнить полученное с допустимым.
ввожу :

def G_bz(n):
return 4 * Q / (math.pi * n * n)

def Tau(n):
return 4*T/(math.pi*n*n)

def G_ekv(G_bz,Tau):
return (G_bz**2+3*Tau**2)**0.5

def f(lst):
for i in lst:
#print (i[0], G_ekv(G_bz[0],Tau[0]), G_d)
if G_ekv(G_bz[0],Tau[0]) < G_d:
return i
Выдает ошибку на сравнении G_ekv и G_d.
Traceback (most recent call last):
File "C:\Users\Владислав\Desktop\Prog_Puthon\rezba(forum).py", line 77, in <module>
r = f(dall)
File "C:\Users\Владислав\Desktop\Prog_Puthon\rezba(forum).py", line 74, in f
if G_ekv(G_bz[0],Tau)[0] < G_d:
TypeError: 'function' object is not subscriptable
Интуитивно догадываюсь, что не опознает функцию, но сделать ничего не могу. Запара в сравнении… :(



Офлайн

#7 Март 22, 2012 20:27:40

vlad16_9
От:
Зарегистрирован: 2012-03-05
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема со списком.

Все, тему можно закрывать. Решил проблему, расписав формулу G_ekv, заменив G_bz и Tau формулами, благодаря чему и перешел к одному аргументу.



Офлайн

#8 Март 23, 2012 02:20:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема со списком.

vlad16_9
G_ekv пересчитывается, с учетом двух предыдущих функций, потом сравнивается и опять пересчитывается. У меня не получается сравнить полученное с допустимым.
ввожу :
def G_bz(n):
return 4 * Q / (math.pi * n * n)

def Tau(n):
return 4*T/(math.pi*n*n)

def G_ekv(G_bz,Tau):
return (G_bz**2+3*Tau**2)**0.5

def f(lst):
for i in lst:
#print (i[0], G_ekv(G_bz[0],Tau[0]), G_d)
if G_ekv(G_bz[0],Tau[0]) < G_d:
return i
Выдает ошибку на сравнении G_ekv и G_d.
Traceback (most recent call last):
File "C:\Users\Владислав\Desktop\Prog_Puthon\rezba(forum).py", line 77, in <module>
r = f(dall)
File "C:\Users\Владислав\Desktop\Prog_Puthon\rezba(forum).py", line 74, in f
if G_ekv(G_bz[0],Tau)[0] < G_d:
TypeError: 'function' object is not subscriptable
Интуитивно догадываюсь, что не опознает функцию, но сделать ничего не могу. Запара в сравнении… :(
В коде так
if G_ekv(G_bz[0],Tau[0]) < G_d:
В ошибке так

if G_ekv(G_bz[0],Tau)[0] < G_d:
Где же истина?

А еще очень похоже, что G_d это функция, что ты хочешь получить сравнивая число с объектом функции?



Офлайн

#9 Март 23, 2012 03:57:29

vlad16_9
От:
Зарегистрирован: 2012-03-05
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема со списком.

вот правильный вариант, домучал его вчера !:) G_d тут константа, постоянное число.

def G_bz(n):
return 4 * Q / (math.pi * n * n)
def Tau (n):
return 4 * T / (math.pi * n * n)
def G_ekv(n):
G_bz=4 * Q / (math.pi * n * n)
Tau=4 * T / (math.pi * n * n)
return (G_bz**2+3*Tau**2)**0.5
def f(lst):
for i in lst:
print(i[0], G_ekv(i[0]), G_d)
if G_ekv(i[0]) < G_d:
return i



Отредактировано (Март 23, 2012 03:58:36)

Офлайн

#10 Март 23, 2012 06:03:59

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

Проблема со списком.

константы пиши большими буквами, чтобы всегда было видно, что это константы, а не переменные
функции в последнем решении можно записать:

def bz(n, k):
return 4 * k / (math.pi * n * n)

def ekv(n):
return (bz(n, Q) ** 2 + 3 * bz(n, T) ** 2) ** 0.5



Отредактировано py.user.next (Март 25, 2012 07:21:24)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version