Форум сайта python.su
0
Проблема в следующем, есть списки:
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]
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,"МПа"
Офлайн
857
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)
Офлайн
36
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
Офлайн
0
Спасибо большое !! Просчитывает то, что нужно. Но теперь возникла еще одна проблема :( При подсчете резьбы с зазором необходимо просчитывать через три формулы. Пробовал сделать так, по образу и подобию:
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)
Офлайн
568
def G_ekv(G_bz,Tau):
# Два аргумента
G_ekv(i[0])
# Один аргумент
Офлайн
0
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
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
Офлайн
0
Все, тему можно закрывать. Решил проблему, расписав формулу G_ekv, заменив G_bz и Tau формулами, благодаря чему и перешел к одному аргументу.
Офлайн
568
vlad16_9В коде так
G_ekv пересчитывается, с учетом двух предыдущих функций, потом сравнивается и опять пересчитывается. У меня не получается сравнить полученное с допустимым.
ввожу :Выдает ошибку на сравнении G_ekv и 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(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Интуитивно догадываюсь, что не опознает функцию, но сделать ничего не могу. Запара в сравнении… :(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:
Офлайн
0
вот правильный вариант, домучал его вчера !:) 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)
Офлайн
857
константы пиши большими буквами, чтобы всегда было видно, что это константы, а не переменные
функции в последнем решении можно записать:
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)
Офлайн