Ich versuche, eine Zeichenfolge (ohne Leerzeichen) zu lesen, ziehen Sie Instanzen aus, wo ein einzelner Kleinbuchstabe auf beiden Seiten von 3 Großbuchstaben (d. H. HHSkSIO) umgeben ist.Verwenden einer verschachtelten if-Anweisung innerhalb einer for-Schleife
def window(fseq, window_size=7):
for i in xrange(len(fseq) - window_size + 1):
yield fseq[i:i+window_size]
for seq in window('asjdjdfkjdhfkdjhsdfkjsdHJJnJSSsdjkdsad', 7):
if seq[0].isupper and seq[1].isupper and seq[2].isupper and seq[3].islower and seq[4].isupper and seq[5].isupper and seq[6].isupper:
print seq
, wo das erste Funktionsfenster mir durch die Zeichenfolge mit einem Schiebefenster von 7 und den zweiten Teil iterieren ermöglicht, die für Anweisung, überprüft, ob die Zeichen in jedem Fenster sind: Ich habe den Code unten geschrieben höher höher höher niedriger höher höher höher höher. Wenn ich den Code ausführen, kommt es aus mit:
asjdjdf
sjdjdfk
jdjdfkj
djdfkjd
jdfkjdh
dfkjdhf
fkjdhfk
kjdhfkd
jdhfkdj
dhfkdjh
hfkdjhs
fkdjhsd
kdjhsdf
djhsdfk
jhsdfkj
hsdfkjs
sdfkjsd
dfkjsdH
fkjsdHJ
kjsdHJJ
jsdHJJn
sdHJJnJ
dHJJnJs
HJJnJsd
JJnJsdj
JnJsdjk
nJsdjkd
Jsdjkds
sdjkdsa
djkdsad
Wie kann ich die für Anweisung nur Ausdruck des Schiebefenster, die if-Anweisung zu dem oben entspricht machen, anstatt sie alle auszudrucken? P. Ich weiß, das ist wahrscheinlich eine sehr kluge Art, es zu tun, ich bin ein Anfänger und es war das einzige, was ich mir vorstellen konnte!
'f [0] .isupper' und der Rest nicht wirklich die Funktionen aufrufen. Ein Methodenobjekt ist "truthy", daher ist Ihre Bedingung immer "True". Sie können sich auch ein paar Probleme ersparen und die Tatsache nutzen, dass 'str.isupper'' True' zurückgibt, wenn alle umschlossenen Zeichen in einer Zeichenkette höher sind. –
ah OK, also brauche ich: wenn seq [0] == True? – sahwahn
Nein, Sie müssen die Methoden aufrufen, zum Beispiel 'seq [: 3] .isupper()' würde testen, ob die 2 ersten Zeichen Groß- und Kleinbuchstaben sind. Im Allgemeinen tust du nie etwas in Python. Testen Sie einfach nach etwas. –