Найти - Пользователи
Полная версия: Проблема со списком.
Начало » Python для новичков » Проблема со списком.
1
vlad16_9
Проблема в следующем, есть списки:
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,"МПа"
py.user.next
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]
>>>
pyuser
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
vlad16_9
Спасибо большое !! Просчитывает то, что нужно. Но теперь возникла еще одна проблема :( При подсчете резьбы с зазором необходимо просчитывать через три формулы. Пробовал сделать так, по образу и подобию:
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)
Пробовал делать через классы, но тоже не сработало :(
FishHook
def G_ekv(G_bz,Tau):
# Два аргумента
G_ekv(i[0])
# Один аргумент
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
Интуитивно догадываюсь, что не опознает функцию, но сделать ничего не могу. Запара в сравнении… :(
vlad16_9
Все, тему можно закрывать. Решил проблему, расписав формулу G_ekv, заменив G_bz и Tau формулами, благодаря чему и перешел к одному аргументу.
FishHook
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 это функция, что ты хочешь получить сравнивая число с объектом функции?
vlad16_9
вот правильный вариант, домучал его вчера !:) 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
py.user.next
константы пиши большими буквами, чтобы всегда было видно, что это константы, а не переменные
функции в последнем решении можно записать:
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
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