Gegeben sind die Positionen zweier Damen auf einem Schachbrett. Gib an, ob sie so stehen, dass sie sich gegenseitig angreifen können.
Im Schach kann eine Dame Figuren angreifen, die in derselben Zeile, Spalte oder Diagonale stehen.
Ein Schachbrett kann durch ein 8x8-Array dargestellt werden.
Wenn dir also gesagt wird, dass die weiße Dame auf c5 steht (nullbasiert: Spalte 2, Zeile 3) und die schwarze Dame auf f2 (nullbasiert: Spalte 5, Zeile 6), dann weißt du, dass der Aufbau so aussieht:
Du kannst auch beantworten, ob sich die beiden Damen gegenseitig angreifen können. In diesem Fall wäre die Antwort ja, sie können, weil beide Figuren auf derselben Diagonale stehen.
Das Bild des Schachbretts wurde von habere-et-dispertire mit LaTeX und dem chessboard-Paket von Ulrike Fischer erstellt.
Manchmal ist es notwendig, eine Ausnahme auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, die angibt, woher der Fehler kommt. Das macht deinen Code lesbarer und hilft beim Debuggen erheblich weiter. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du eine der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.
Diese Übung verlangt, dass du die raise-Anweisung verwendest, um ValueErrors zu „werfen“, wenn dem Queen-Konstruktor negative Zahlen übergeben werden oder Zahlen, die keine gültige Zeile oder Spalte sind. Die Tests bestehen nur, wenn du die exception sowohl mit raise auslöst als auch eine Meldung dazu angibst. Außerdem solltest du einen ValueError mit raise auslösen, wenn beide Damen, die an die Methode can_attack() übergeben werden, auf demselben Feld stehen.
Um einen ValueError mit einer Meldung auszulösen, übergibst du die Meldung als Argument an den exception-Typ:
# if the row parameter is negative
raise ValueError("row not positive")
# if the row parameter is not on the defined board
raise ValueError("row not on board")
# if the column parameter is negative
raise ValueError("column not positive")
# if the column parameter is not on the defined board
raise ValueError("column not on board")
# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.