Python :: Aufgabe #139
1 Lösung

Berechnung und Ausgabe einer Zahlen-Schnecke
Anfänger - Python
von pocki
- 06.01.2017 um 16:36 Uhr
Das Programm soll eine Ganzzahl (int) entgegen nehmen und berechnen ob eine Zahlen-Schnecke (wie auf einem Brettspiel) mit dieser Anzahl an Feldern bzw. höchsten Zahl möglich ist und gegebenfalls in einer einfachen Form (z.B. in Konsole oder Textdatei) ausgeben.
Die Zeilen- und Spaltenanzahl muss nicht gleich groß sein.
Option: Die Zahl 0 soll je nachdem ob sie für eine Durchführung benötigt wird, eingefügt oder weggelassen werden.
Erweiterung: Lass den Benutzer auswählen, ob die Schnecke sich im oder gegen den Uhrzeigersinn dreht.
Beispielausgabe:
PS: Hat diese Art einer Schnecke eine andere Bezeichnung?
Die Zeilen- und Spaltenanzahl muss nicht gleich groß sein.
Option: Die Zahl 0 soll je nachdem ob sie für eine Durchführung benötigt wird, eingefügt oder weggelassen werden.
Erweiterung: Lass den Benutzer auswählen, ob die Schnecke sich im oder gegen den Uhrzeigersinn dreht.
Beispielausgabe:
Konsolenausgabe:
Höchste Zahl der Zahlenschnecke: 19
0 1 2 3 4
13 14 15 16 5
12 19 18 17 6
11 10 9 8 7
Höchste Zahl der Zahlenschnecke: 2
Fehler: Die Zahl 2 ist zu klein für eine Zahlenschnecke
PS: Hat diese Art einer Schnecke eine andere Bezeichnung?
Lösungen:

# Primzahltest def prim_zahl(zahl): prim = True a = int(zahl ** 0.5) for j in range(2, a + 1): rest = zahl % j if rest == 0: prim = False break return prim def breite_berechnen(zahl): teiler = [] a = int(zahl ** 0.5) for j in range(1, a + 1): rest = zahl % j if rest == 0: teiler.append(j) breite = max(teiler) return breite # Programm-Start # Check, ob eine Zahl eingegeben wird while True: zahl = input("Gib bitte eine Zahl ein: ") try: int(zahl) zahl = int(zahl) if zahl > 2: break else: print("Die Zahl muss größer als 2 ein") except: "none" # Check, ob r/l eingegeben wird while True: richtung = str(input("Soll die Schnecke links oder rechts herum gehen? (l/r) > ")) if richtung == "l": break elif richtung == "r": break else: print("Falsche Eingabe") # Primzahlen auf im Rechteck darstellbare Zahl anpassen if prim_zahl(zahl): zahl += 1 index = -1 else: index = 0 # Matrix erstellen breite = breite_berechnen(zahl) länge = int(zahl / breite) import numpy as np matrix = np.arange(1, zahl + 1) matrix.shape = (breite, länge) for i in range(0, breite): for j in range(0, länge): matrix[i][j] = -1 # Schnecke Uhrzeigersinn ausführen if richtung == "r": for x in range(0, breite): for i in range(0, länge): if matrix[0 + x][i] == -1: index += 1 matrix[0 + x][i] = index for j in range(0, breite): if matrix[j - x][länge - 1 - x] == -1: index += 1 matrix[j - x][länge - 1 - x] = index for h in range(länge - 1, -1, -1): if matrix[breite - 1 - x][h] == -1: index += 1 matrix[breite - 1 - x][h] = index for k in range(breite - 1, -1, -1): if matrix[k][0 + x] == -1: index += 1 matrix[k][0 + x] = index # Schnecke gegen den Uhrzeigersinn ausführen if richtung == "l": for x in range(0, breite): for k in range(0, breite): if matrix[k][0 + x] == -1: index += 1 matrix[k][0 + x] = index for h in range(0, länge): if matrix[breite - 1 - x][h] == -1: index += 1 matrix[breite - 1 - x][h] = index for j in range(breite - 1, -1, -1): if matrix[j - x][länge - 1 - x] == -1: index += 1 matrix[j - x][länge - 1 - x] = index for i in range(länge - 1, -1, -1): if matrix[0 + x][i] == -1: index += 1 matrix[0 + x][i] = index print(matrix)