Pomocí boolean ve slovníku v rámci smyčky: Druhá iterace vpřed dává žádné hodnoty

0

Otázka

nové programování.

V pythonu jsem budování skript, který umožňuje, aby jeden zadat pufru pH a aminokyseliny tři dopis kód. Výstup by měl říct další aminokyseliny, které je třeba mít elektrostatické interakce. První iterace se zdá fungovat, nicméně poté, co přestane vracet žádný výstup bez ohledu na to, jaké parametry jsou zadány. Můj odhad je, že nějak logické hodnoty jsou nahrazovány novými nebo tak něco. Existuje způsob, jak pro každou iteraci začít zcela čerstvé? Rád bych si uživatel bude moci pokračovat v zadávání parametrů a výstup nemusí být vliv na všechny předchozí iterace.

Tady je kód (omlouvám se, pokud je to špinavé):

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

Díky předem!

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

Nejlepší odpověď

1

Váš problém je, že používáte aaDic slovník pro ukládání float hodnoty. A pak přepsání těchto hodnot s Booleovskými hodnotami. Jak je vidět níže,

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")

Jste kód závisí na slovníku plováky a boolean. Ale pouze pomocí jednoho slovníku. Takže další slovník pro boolean. Příklad níže,

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

Druhý slovník pro uložení boolean mě nenapadlo. Díky!!!
meh47336

Pro každého, kdo běží kód, dejte si pozor, že některé booleovské hodnoty jsou obrácené (pro protonationinput a boolAADic[aa])... moje chyba! Ale jednou pravda a falses jsou přešel tento kód funguje a dává rozumné odpovědi.
meh47336

V jiných jazycích

Tato stránka je v jiných jazycích

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