Добавление и печать элементов, используя списки с использованием python

#python #list #printing #append

#python #Список #печать #добавить

Вопрос:

Итак, моя проблема кажется довольно тривиальной, но я новичок в python и пишу простую программу, которая вычисляет реакции луча. Моя программа делает это успешно, но теперь я хочу расширить возможности, чтобы иметь возможность строить диаграммы сдвиговых и изгибающих моментов вдоль каждой балки. Мой мыслительный процесс заключается в использовании списка и добавлении значений сдвига (на данный момент) в этот список с шагом, который делит луч на 100 сегментов. После этого я хочу иметь возможность извлекать их и использовать эти значения для их построения.

 class beam:
    def __init__(self, emod, i, length):
        self.emod = emod
        self.i = i
        self.length = length

    def A(self, a, p):  # Calculate reaction at A
        return p * (self.length - a) / self.length

    def B(self, a, p):  # Calculate reaction at B
        return p * a / self.length

    def Mc(self, a, p):  # Calculate moment at C
        return p * a * (self.length - a) / self.length

    def delc(self, a, p):
        return p * a * a * (self.length - a) ** 2 / 3 / self.emod / self.i / self.length

    def delx(self, x, a, p):
        beta = (self.length - a) / self.length
        delta = x / self.length
        return p * self.length * self.length * (self.length - a) * delta * (
                1 - beta * beta - delta * delta) / 6 / self.emod / self.i

    def delx1(self, x, a, p):
        alpha = a / self.length
        delta = x / self.length
        return p * self.length * self.length * a * delta * (
                1 - alpha * alpha - delta * delta) / 6 / self.emod / self.i

    def maxDisplacementCoords(self, a):
        return a * (1.0 / 3   2 * (self.length - a) / 3 / a) ** 0.5


class shearValues: # This is the class that adds the shear values to a list
    def __init__(self):
        self.values = []

    def add_values(self, beam, a_val, p):
        j = float(0)
        v = beam.A(a_val, p)
        while j < beam.length:
            if j < a_val:
                continue
            elif j > a_val:
                continue
            elif j == a_val:
                v -= p
            self.values.append(v)
            j  = beam.length / float(100)
        v  = beam.B(a_val, p)
        self.values.append(v)



if __name__ == '__main__':
    def inertia_x(h, w, t):
        iy1 = w * h * h * h / 12
        iy2 = (w - t) * (h - 2 * t) ** 3 / 12
        return iy1 - 2 * iy2


    beam_list = []
    beam1 = beam(200000000000, inertia_x(0.203, 0.133, 0.025), 5)
    beam2 = beam(200000000000, inertia_x(0.254, 0.146, 0.031), 5)
    beam3 = beam(200000000000, inertia_x(0.305, 0.102, 0.025), 5)
    beam_list.append(beam1)
    beam_list.append(beam2)
    beam_list.append(beam3)

    while True:
        my_beam = beam_list[1]
        beam_choice = input("Which beam would you like to evaluate? 1, 2 or 3 ")
        if beam_choice == '1':
            my_beam = beam_list[0]
        elif beam_choice == '2':
            my_beam = beam_list[1]
        elif beam_choice == '3':
            my_beam = beam_list[2]

        p = float(input("Enter the required load "))
        a_val = float(input("Enter displacement of point load (origin at LHS) "))
        print("Ay = {}".format(my_beam.A(a_val, p)))
        print("By = {}".format(my_beam.B(a_val, p)))
        print("Mc = {}".format(my_beam.Mc(a_val, p)))
        print("Displacement at C = {}".format(my_beam.delc(a_val, p)))
        displacement = input("Do you want to calculate a specific displacement? [Y]es or [N]o ").upper()
        if displacement not in 'YN' or len(displacement) != 1:
            print("Not a valid option")
            continue
        if displacement == 'Y':
            x = float(input("Enter location on beam to calculate displacement (origin on LHS) "))
            if x < a_val:
                print("Displacement at {} = {}".format(x, my_beam.delx(x, a_val, p)))
            elif x > a_val:
                print("Displacement at {} = {}".format(x, my_beam.delx1(my_beam.length - x, a_val, p)))
            elif x == displacement:
                print("Displacement at {} = {}".format(x, my_beam.delc(a_val, p)))
        elif displacement == 'N':
            continue
        print("Max displacement is at {} and is = {}".format(my_beam.maxDisplacementCoords(a_val),
                                                             my_beam.delx(my_beam.maxDisplacementCoords(a_val), a_val,
                                                                          p)))
        # The code doesn't execute the way it is intended from here
        sv = shearValues()
        sv.add_values(my_beam,a_val,p)
 

В настоящее время кажется, что я создал бесконечный цикл.

Как вы можете видеть, код вообще не оптимизирован, но любая помощь будет оценена. И вычисления верны.

Комментарии:

1. Можете ли вы предоставить более подробное объяснение и, возможно, чертеж того, что такое beam, и что вы хотите нарисовать в качестве конечного результата? Убедитесь, что все объяснения вашей проблемы также находятся за пределами кода (читатель не должен понимать по коду)

2. Я нашел решение, переделав все, но сделаю это в будущем