top-down-design: Funktionen allgemein definieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

@BlackJack: Nein, so meinte ich das nicht. Die Funktionen haben ja wohl auch nicht zu einem `NameError` geführt.
peter99
User
Beiträge: 84
Registriert: Samstag 3. August 2013, 21:32

Code: Alles auswählen

def compute_energy(number, A, phi,  k, cavlist, Vebit, Vebitmax, cavmaxCSS, factor, betaS):
    #
    condition_energy = (
    Vebit0 < Vebitmax and all(t < u for t, u in zip(cavlist, cavmaxCSS)) 
    )
    E0 = 600
    for s in range(1,number + 1):
        # 10**(-16), because keV
        beta = sqrt(2 * E0 * 1.602177 * 10**(-16) / 1.6726 * 10**27) /c0
        tmp = pi * geff / (beta * Lambda)
        T = sin(tmp) / tmp * sin(pi * betaS / (2 * beta))
        E0 = E0 + (k*35*cavlist[s-1]/factor[s-1])/A*T*cos(phi)
    if condition_energy:
        Qout.append(k)
        set_cells(table, len(Qout) - 1, k, Vebit, number, E0)
    else:
        refresh()
 
def compute_field(s, A, phi,  k, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E):
    E_average = (600 + E)/2
    v_averge = sqrt(2*E_average*1.602177*10**(-16)/1.6726*10**27)
    beta_average = v_averge/c0
    tmp = pi * geff / (beta_average * Lambda)
    T_average = sin(tmp)/tmp*sin(pi*betaS/(2*beta_average))
    fieldreal = diffE*A/(27.98*k*float(s)*T_average*cos(phi))
    # cannot be defined earlier because otherwise listfields not already defined
    condition_field = (
    fieldreal > minimumf and fieldreal < maximumf and all(fieldreal < u for u in  cavmaxreal) and Vebit < Vebitmax
    )
    if condition_field:
        Qout.append(k)
        fieldout.append(fieldreal)
        numberout.append(s)
        Energyout.append(E)
        set_cells(table, len(Qout) - 1, k, Vebit, s, E)
    # no provide information for click
  #  info_for_click = zip(Qout, fieldout, numberout, Energyout)
   # else:
      #  refresh()
    #return info_for_click

def main():
    Qcont, A1, Around, nameiso, abu, qdivbya, abu2, information = readcontaminationfile()
    cavmaxCSS, cavmaxreal, factor = readcavmaxfile()
    phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, check2, check1, check3, check4, checks,\
           number, numbers, diffqa0, cavlist, combo = getInputs(A1, Around, nameiso, Qcont, factor)
    alarm(cavlist, cavmaxCSS, number)
    info_for_click = decision(phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, checks, \
             number, numbers, cavlist, factor, cavmaxCSS, cavmaxreal)
    clickrow(info_for_click, Qcont, A1, nameiso, qdivbya, abu2, information, A, diffqa0, check3, check4, factor, \
             phi, minimumf, maximumf, cavmaxreal, combo)

def decision(phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, checks, \
             number, numbers, cavlist, factor, cavmaxCSS, cavmaxreal):
    Q = range(1 , Qin + 1, 1)
    for i in Q:
        Vebit = 12*A/i   
# Ist possibility: fixed number, compute Energy
        if checks == [1, 0, 0, 1]:
            compute_energy(number, A, phi,  i, cavlist, Vebit, Vebitmax, cavmaxCSS, factor, betaS)
            # does not provide any information - not needed
        elif checks == [1, 0, 1, 0]:
            compute_field(number, A, phi,  i, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E)
            info_for_click = zip(Qout, fieldout, numberout, Energyout)
        elif checks == [0, 1, 1, 0]:
        # for some reason: after checks no for..
            normann = 3
            for j in numbers:
                compute_field(j, A, phi,  i, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E)
                info_for_click = zip(Qout, fieldout, numberout, Energyout)
   	else:
            refresh()
    return info_for_click
Das scheint zu funktionieren, wobei mir nicht klar ist wie die Funktionen Vebit in der decision-Struktur einlesen... es scheint zu funktionieren, aber es ist mir nicht wirklich klar warum.
Antworten