Pomocou booleans v slovníku, do slučky: Druhá iterácia dopredu dáva žiadne hodnoty

0

Otázka

nové programové tu.

V jazyku python som budovania skript, ktorý umožňuje zadať buffer pH a aminokyselina troch písmeno kód. Výstup by vám ďalšie aminokyseliny, ktoré by mali mať elektrostatické interakcie s. Prvá iterácia sa zdá, že funguje, ale potom to prestane vracať žiadny výstup, bez ohľadu na to, aké parametre sú zapísané. Môj odhad je, že nejako boolean hodnoty sú nahradené alebo niečo. Existuje spôsob, ako pre každú iteráciu začať úplne čerstvé? Rád by som sa používateľ mohol pokračovať v zadávaní parametrov a majú výstup nie je dotknutá na všetkých v predchádzajúcej iterácii.

Tu je kód (prepáč, ak je to chaotický):

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

Vďaka vopred!

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

Najlepšiu odpoveď

1

Váš problém je, že používate aaDic slovník na ukladanie float hodnoty. A potom vyššieho tieto hodnoty s Boolean hodnoty. Ako vidieť nižšie,

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

Ste kód závisí od slovník plaváky a booleans. Ale len pomocou jedného slovníka. Tak, aby iný slovník pre booleans. Príklad nižšie

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 na ukladanie booleans nemal kríž mojej mysli. Vďaka!
meh47336

Pre každého, kto beží kód, dajte si pozor na to, že niektoré booleans sa zruší (pre protonationinput a boolAADic[aa])... moja chyba! Ale raz pravda a falses sú zapnuté, tento kód funguje a dáva rozumné odpovede.
meh47336

V iných jazykoch

Táto stránka je v iných jazykoch

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