Enden-mit und Beginnt-mit if-Anweisungen: Python 3
Ich bin neu in python und ich habe um ein Programm zu erstellen, das überprüft, die eine DNA-Sequenz.
(hintergrund zu den DNA-Sequenzen wirklich schnell)
um gültig zu sein:
• Die Anzahl der Zeichen ist durch 3 teilbar
• Die ersten 3 Zeichen sind ATG
• Die letzten 3 Zeichen sind TAA, TAG, oder TGA.
mein problem kommt mit der Verwendung von booleschen Bedingungen in einer if-Anweisung.
endswith=(DNA.endswith("TAA"))
endswith2=(DNA.endswith("TAG"))
endswith3=(DNA.endswith("TGA"))
if length%3==0 and startswith==true and endswith==true or endswith2==true or endswith3==true:
return ("true")
dieser code gibt den Fehler:
global name 'wahr' ist nicht definiert
Wie behebe ich dieses Problem, und auch nur auf einen letzten Hinweis bin ich wirklich Leid.
Die Antwort auf diese Frage ist vermutlich SO blöd einfach, dass in deinem Geist einen 2-jährigen könnte es code :/ich forschte herum, aber ich hatte kein Glück überhaupt. So danke ich Ihnen für die Einnahme Ihrer Zeit, um selbst lese meine dumme Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Viel einfacher:
Vergleich einen booleschen Wert zu
True
oderFalse
ist fast immer redundant, also, wenn Sie finden, sich selbst zu tun ... etwas anderes zu tun 😉In python
true
ist nicht ein Schlagwort, sondernTrue
.Und in python geben, die Sie nicht haben, um Sie vergleichen eine variable mit
True
offensichtlich, benutzen Sie einfachErsten Punkt: es ist
True
nichttrue
.Zweite Sache: sagen Sie nicht
endswith == True
nur sagenendswith
.Dritte Sache:
and
hat eine höhere Priorität alsor
, so, was du geschrieben hast ist äquivalent zu:das ist nicht, was Sie meinte.
Vierte Sache: es ist wahrscheinlich besser, zu sagen:
Als Tim weist darauf hin,
DNA.endswith(('TAA', 'TAG', 'TGA'))
beatsDNA[-3:] in ...
. Es ist einfacher und ohne sich die Mühe zu testen, würde ich erwarten, dass es auch schneller. Wenn Sie hatte eine Menge von zulässigen Endungen von gleicher Länge, und Sie machten viele tests, dann wäre es schneller zu konstruierenset
einmal und einin
test der end-Segment. Aber drei Möglichkeiten ist nicht "viel"..endswith()
akzeptiert ein Tupel von strings, um zu versuchen - keine Notwendigkeit für explizite schneiden hier.Typ: true --> True
solltest du besser siehe Handbuch, bevor Sie Fragen stellen.
Tatsächlich ist, können Sie dieses verwenden:
nicht schreiben müssen,
length%3==0
zumindest sollten Sie verwendennot (length%3)
.Verwenden
True
, nichttrue
. Auch anstelle vonstartswith==True
Sie können einfach verwenden Siestartswith
(zB:if length%3==0 and startswith and endswith ...
).Sollten Sie auch Klammern hinzufügen, um Ihre Logik mehr lesbar. Obwohl Rangfolge ist gut dokumentiert, viele Menschen wissen es nicht. Und selbst wenn Sie es tun, Sie können nicht sagen, ob Sie tun oder nicht.