Utilizzando le booleane nel dizionario interno del ciclo: la Seconda iterazione in avanti non dà valori

0

Domanda

nuova programmazione di qui.

In python che mi sto costruendo uno script che permette di inserire un tampone a pH e un aminoacido tre lettere del codice. L'output dovrebbe dire agli altri aminoacidi che dovrebbe avere interazioni elettrostatiche con. La prima iterazione sembra funzionare, però dopo che si smette di restituire un output non importa ciò che i parametri sono inseriti. La mia ipotesi è che in qualche modo i valori booleani sono stati sostituiti o qualcosa del genere. C'è un modo per ogni iterazione per avviare completamente nuovo? Vorrei che l'utente sia in grado di continuare a immettere i parametri e avere l'uscita non essere influenzato dall'iterazione precedente.

Ecco il codice (scusate se è un casino):

aaDic = {
         'Arg': 12.48,
         'Asp': 3.90,
         'Cys': 8.37,
         'Glu': 4.07,
         'His': 6.04,
         'Lys': 10.54,
         'Tyr': 10.46,
         }

while True:

    x = input("Enter pH of buffer: ")
    y = input("Enter three letter code for an amino acid: ")


    if float(x) > float(aaDic[y]):
        ProtonationInput = True
    elif float(x) < float(aaDic[y]):
        ProtonationInput = False
    print("\n")
    print("Is your amino acid,", y, ", protonated?", ProtonationInput, "\n")

    print("At pH", x, y, "likely interacts with the following residues: \n")

    for aa in aaDic.keys():
        if float(x) > float(aaDic[aa]):
          aaDic[aa] = True
        elif float(x) < float(aaDic[aa]):
          aaDic[aa] = False
        #print(aa, aaDic[aa], "\n")


    for aa in aaDic.keys():
      if ProtonationInput == True:
            if aaDic[aa] == False:
              print(aa, "\n")
      elif ProtonationInput == False:
            if aaDic[aa] == True:
              print(aa, "\n")

    continue

Grazie in anticipo!

boolean input loops python
2021-11-23 17:17:02
1

Migliore risposta

1

Il tuo problema è che stai usando aaDic dizionario per memorizzare valori float. E poi sovrascrivere quei valori con i valori Booleani. Come si vede di seguito,

for aa in aaDic.keys():
        if float(x) > float(aaDic[aa]):
          aaDic[aa] = True
        elif float(x) < float(aaDic[aa]):
          aaDic[aa] = False
        #print(aa, aaDic[aa], "\n")

Stai codice dipende da un dizionario dei carri allegorici e dei valori booleani. Ma il solo utilizzo di un dizionario. Quindi, fare un altro dizionario per booleane. Esempio di seguito,

aaDic = {
         'Arg': 12.48,
         'Asp': 3.90,
         'Cys': 8.37,
         'Glu': 4.07,
         'His': 6.04,
         'Lys': 10.54,
         'Tyr': 10.46,
         }
# Add this new dictionary of booleans
boolAADic = {key:False for key in aaDic }

while True:

    x = input("Enter pH of buffer: ")
    y = input("Enter three letter code for an amino acid: ")


    if float(x) > float(aaDic[y]):
        ProtonationInput = True
    elif float(x) < float(aaDic[y]):
        ProtonationInput = False
    print("\n")
    print("Is your amino acid,", y, ", protonated?", ProtonationInput, "\n")

    print("At pH", x, y, "likely interacts with the following residues: \n")

    print(aaDic)
    for aa in aaDic.keys():
        if float(x) > float(aaDic[aa]):
          boolAADic[aa] = True # Change to boolean dictionary
        elif float(x) < float(aaDic[aa]):
          boolAADic[aa] = False # Change to boolean dictionary
        #print(aa, aaDic[aa], "\n")


    for aa in aaDic.keys():
      if ProtonationInput == True:
            if boolAADic[aa] == False: # Change to boolean dictionary
              print(aa, "\n")
      elif ProtonationInput == False:
            if boolAADic[aa] == True: # Change to boolean dictionary
              print(aa, "\n")



2021-11-23 17:54:46

Secondo il dizionario per memorizzare i valori booleani non attraversare la mia mente. Grazie!
meh47336

Per chiunque di eseguire il codice, attenzione che alcune delle booleane sono invertiti (per protonationinput e boolAADic[aa])... il mio errore! Ma una volta che vero e falso sono cambiato il codice funziona e dà risposte sensate.
meh47336

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................