Застрял с разделением нескольких петель в python - PullRequest
0 голосов
/ 19 июня 2020

Итак, я застрял с разделением нескольких петель. Первый цикл работает нормально. И второй тоже. Но не два последних. Когда я пытаюсь ввести ДНК или белок, он дает только ответ: перезагрузить? Д \ Н

Мой код:

while True:
 A = (input())
 if A == ("Start"):
  print ("What type of the data you want to process?")
  print ("DNA", "RNA", "Protein", sep="\n")
  break
 else:
  print ("Incorrect input")
  continue
  break

while True:
 X = (input())
 if X == ("RNA"):
  print ("What you want to do with RNA?", "RNA to DNA?  RNA to Protein? seqRNA length?", sep="\n?")
  continue
  break
 else:
  print("Restart?", "Y \ N", sep="\n")
  continue
  break

while True:
 Y = (input())
 if Y == ("DNA"):
  print ("What you want to do with DNA?", "DNA to RNA? seqDNA length?", sep="\n")
  continue
  break
 else:
  print("Anything else?", "Yes No", sep="\n")
  continue
  break

while True:
 Z = (input())
 if Z == ("Protein"):
  print ("What you want to do with Protein?", "Protein to RNA? protein Name?", sep="\n")
  continue
  break
 else:
  print("Anything else?", "Yes No", sep="\n")
  continue
  break

Я уже пытался удалить один из этих циклов и пытался его запустить, но результаты были те же. Я искал примеры использования break, while и if, но нашел ответы только на один l oop, а не на несколько. Я нахожу это весьма разочаровывающим, потому что я хотел сделать это для лучшего понимания python. И не только с помощью библиотеки Bio Python. Но по иронии судьбы, просто процесс транскрипции, обратной транскрипции, трансляции, трансляции в РНК или вычисления длины последовательности не является большой проблемой. Для этого нужна всего одна строчка кода.

Ответы [ 3 ]

0 голосов
/ 19 июня 2020

Проблема заключается в операторах continue после того, как вы пройдете условие Start и условие rna / dna / белка.

Я тестировал только на РНК, но я удалил оператор continue после печати, и, похоже, он работал

каковы ваши намерения с продолжением там?

Кроме того, использование такого количества циклов while true и использование break и continue - не лучшая практика idt. Я бы использовал что-то вроде использования A в качестве входных данных на самом верху, и ваши условия могли бы быть чем-то вроде `while A not in [" RNA "," DNA ", PROTEIN"] или что-то в этом роде, и таким образом он будет продолжать цикл и запрашивая ввод до тех пор, пока не будет передан правильный

наконец, я бы привел каждый ввод в верхний или нижний регистр (и ваши условные проверки тоже), таким образом вы можете избежать ошибок ввода, основанных на проблемах с регистром

0 голосов
/ 22 июня 2020
while True:

    print("What type of the data you want to process?", "RNA? DNA?", sep = "\n")
    A = input("")
    if A == "RNA":
          print("What you want to do with RNA?", "(a1)RNA to Protein? (a2)RNA to DNA? (a3)RNA Length? (a4)RNA Splicing? (a5)RNA nucleotides (a6)ratio? RNAi? ", sep = "\n")
          break

    if A == "DNA":
          print("What you want to do with DNA", "(b1)DNA to RNA? (b2)DNA length? (b3)DNA nucleotides ratio? (b4)Complimentary DNA chain?", sep = "\n")
          break



    else:
         print("Nope") #TF2 references
         continue


while A == "RNA":
    X = input("")
    if X == "a1":
     print("Input RNA")
     import ptranslation #Written by myself module for RNA translation
     RNA_translation = input("")
     print (RNA_translation)
     break
    if X == "a2":
     print("Input RNA")
     RNA_seq = input("")
     DNA_seq  = RNA_seq.replace("U", "T")
     print (DNA_seq)
     break
    if X == "a3":
     print ("Input RNA")
     RNA = input("")
     RNAo = int (len(RNA)//2)
     print(RNAo)
     break
    if X == "a4":
     print ("Input RNA")
     import re
     RNA = input("")
     regex = r"GU(?:\w{0,}?)AG" #regex black magic Uga-Buga, still need to undestand it better
     exons = re.sub(regex, '', RNA)
     print(exons)
     break
    if X == ("a5"):
     print("Input RNA")
     RNAn = input ("")
     X = (RNAn.count("A")) + (RNAn.count("U")) + (RNAn.count("C")) + (RNAn.count ("G"))
     A = (RNAn.count("A")/X)
     U = (RNAn.count("U")/X)
     G = (RNAn.count("G")/X)
     C = (RNAn.count("C")/X)
     print ("A =", A, "U =", U, "G =", G, "C =", C)
     break
    if X == ("a6"):
        print("Input RNA")
        N = input("")
        print(N.translate(str.maketrans({"A": "U", "G": "C", "U": "A", "C": "G"})))
        break
    else:
      print("NOPE! Input correct option!")
      continue
      break

while A == "DNA":
    Y = input("")
    if Y == "b1":
     print ("Input DNA ")
     DNA_seq = input("")
     RNA_seq  = DNA_seq.replace("T", "U")
     print (RNA_seq)
     break
    if Y == ("b2"):
        print("Input DNA")
        DNA = input("")
        DNAo = int (len(DNA)//2)
        print(DNAo)
        break
    if Y == ("b3"):
        print("Input DNA")
        DNAn = input ("")
        X = (DNAn.count("A")) + (DNAn.count("T")) + (DNAn.count("C")) + (DNAn.count ("G"))
        A = (DNAn.count("A")/X)
        T = (DNAn.count("T")/X)
        G = (DNAn.count("G")/X)
        C = (DNAn.count("C")/X)
        print ("A =", A, "T =", T, "G =", G, "C =", C)
        break
    if Y == ("b4"):
        print("Input DNA")
        Nd = input("")
        print(Nd.translate(str.maketrans({"A": "T", "G": "C", "T": "A", "C": "G"})))
        break
    else:
      print("NOPE! Input correct option!")
      continue
      break
#psyhological support in process of  the coding - M.Kashtanov
0 голосов
/ 19 июня 2020

Я немного подчистил и реструктурировал ваш код. Это то, что вы хотели?

while True:

    print("What type of the data you want to process?")
    A = input("DNA, RNA, Protein > ")
    if A == "DNA":
        print("What you want to do with DNA?")
        Y = input("DNA to RNA? seqDNA length? > ")
        # Test and do something with Y

    elif A == "RNA":
        print("What you want to do with RNA?")
        X = input("RNA to DNA?  RNA to Protein? seqRNA length? > ")
        # Test and do something with X

    elif A == "Protein":
        print("What you want to do with Protein?")
        Z = input("Protein to RNA? protein Name? > ")
        # Test and do something with Z

    else:
        print("Incorrect input")
        continue

    # If user wants to restart, stay in the loop, else break.
    if input("Restart? Y \ N > ") == "N":
        break
...