2015-04-18 14 views
7

So bin ich ziemlich verärgert, ich kann etwas scheinbar Triviales nicht herausfinden, da ich in Java relativ gut bewandert bin, aber sowieso hat mir mein Professor für die Einführung in Python ein Labor zugewiesen wo wir ein Muster mit Buchstaben basierend auf Zeilen- und Spaltenposition erstellen müssen. Keine Schleifen oder Iterationen, nur bedingte Anweisungen.Ermitteln des Buchstabens basierend auf Zeile und Spalte

Zum Beispiel diese Funktion:

def letter(row, col): 
    if row>col: 
     return 'T' 
    else: 
     return 'W' 

ergäbe:

WWWWWWWWWWWWWWWWWWWW 
TWWWWWWWWWWWWWWWWWWW 
TTWWWWWWWWWWWWWWWWWW 
TTTWWWWWWWWWWWWWWWWW 
TTTTWWWWWWWWWWWWWWWW 
TTTTTWWWWWWWWWWWWWWW 
TTTTTTWWWWWWWWWWWWWW 
TTTTTTTWWWWWWWWWWWWW 
TTTTTTTTWWWWWWWWWWWW 
TTTTTTTTTWWWWWWWWWWW 
TTTTTTTTTTWWWWWWWWWW 
TTTTTTTTTTTWWWWWWWWW 
TTTTTTTTTTTTWWWWWWWW 
TTTTTTTTTTTTTWWWWWWW 
TTTTTTTTTTTTTTWWWWWW 
TTTTTTTTTTTTTTTWWWWW 
TTTTTTTTTTTTTTTTWWWW 
TTTTTTTTTTTTTTTTTWWW 
TTTTTTTTTTTTTTTTTTWW 
TTTTTTTTTTTTTTTTTTTW 

wenn mit der Zeile durch seine Treiberdatei ausführen und col beide gleich 20

Der, den ich bin stecken mit erstellt eine Funktion für das Muster:

XOOOOOX 
OXOOOXO 
OOXOXOO 
OOOXOOO 
OOXOXOO 
OXOOOXO 
XOOOOOX 

Bitte geben Sie mir KEINE Antwort, sondern zeigen Sie mir in die richtige Richtung.

Bisher weiß ich, dass die X für die linke → rechte Diagonale identifiziert werden können, wenn row == col. Es ist die richtige -> linke Diagonale, mit der ich Probleme habe.

Vielen Dank.

+0

Können Sie klären, wie die gegebene Funktion die gegebene Ausgabe produziert - d. H. Was ist die "Treiberdatei" und wie "läuft" sie durch? – TigerhawkT3

+1

Um die oben rechts -> unten links Diagonale zu tun, müssen Sie die Breite kennen (oder Höhe, da es quadratisch ist). In Ihrem Beispiel ist es 7. Das könnte genug sein, um Sie zu starten. – jedwards

+0

Oh, und hält Ihr Professor die Rekursion für in der gleichen Kategorie wie Schleifen? : P – TigerhawkT3

Antwort

6

Sehen Sie sich die Beziehung zwischen der Zeile und der Spalte der einzelnen X Position an. Dann teilen Sie dieses Problem in zwei: ein Aspekt davon ist die Linie, die von oben links nach unten rechts geht, und der andere Aspekt ist die Linie, die von unten links nach oben rechts geht.

einen Blick auf die von links oben nach rechts unten X s Werfen wir einen Blick:

row: column: 
1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 

Ich denke, man eine Beziehung zwischen Zeile und Spalte auf dieser Grundlage bestimmen kann.

Nun, wie über die andere Linie von unten links nach oben rechts:

row: column: 
1 7 
2 6 
3 5 
4 4 
5 3 
6 2 
7 1 

Ihre sanfte Andeutung hier ist „+“.

Also, wenn die Zeile und die Spalte eines Elements die erste angegebene Beziehung or die Sekunde haben, legen Sie eine X dort.

Ich hoffe, das war eine richtige Menge an Hilfe.

+1

Große Erklärung. Aber ich vermute, dass 'row' und' col' auf 0 basieren, nicht auf 1 basieren. (Obwohl der OP etwas lernen könnte, indem er herausarbeitet, was sein Code falsch machen würde, wenn er in jeder Hinsicht falsch rät, und dann zur Bestätigung laufen lässt ...) – abarnert

+0

Hey, vielen Dank! Das war eine großartige Antwort, und ich schätze den sanften Hinweis, haha! –

+0

Ich denke, dass in diesem Fall die Erklärung index-agnostisch ist - es hätte 'n',' n + 1' usw. sein können. Außerdem habe ich eine Funktion mit diesem Algorithmus getestet und sie durch den Treiber ausgeführt Kommentar, und es verhielt sich wie erwartet. :) – TigerhawkT3