Uso de booleanos en el diccionario dentro de bucle: Segunda iteración adelante no da valores

0

Pregunta

nuevo en la programación aquí.

En python estoy construyendo una secuencia de comandos que le permite a uno entrar en un tampón de pH y de un aminoácido código de tres letras. La salida debe decirle a los otros aminoácidos que se debe tener interacciones electrostáticas con los. La primera iteración parece funcionar, sin embargo después de que deja de devolver cualquier salida no importa lo que los parámetros que se introducen. Mi conjetura es que de alguna manera los valores booleanos están siendo reemplazados o algo. Hay una manera para cada iteración para iniciar completamente nuevo? Me gustaría que el usuario sea capaz de continuar la introducción de parámetros y el resultado no ser influenciado por la iteración anterior.

He aquí el código (lo siento si es complicado):

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

Gracias de antemano!

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

Mejor respuesta

1

Tu problema es que estás usando el aaDic diccionario para almacenar valores de coma flotante. Y, a continuación, reemplazar los valores con valores Booleanos. Como se ve a continuació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")

Estás código depende de un diccionario de carrozas y valores booleanos. Pero su único uso de un diccionario. Así que otro diccionario para los booleanos. Ejemplo de abajo,

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

Un segundo diccionario para almacenar los valores booleanos no ha cruzado mi mente. Gracias!
meh47336

Para cualquier persona que ejecute el código, ten en cuenta que algunos de los booleanos son a la inversa (por protonationinput y boolAADic[aa])... mi error! Pero una vez verdadero y falses se cambió este código funciona y da respuestas sensatas.
meh47336

En otros idiomas

Esta página está en otros idiomas

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