Wie in Python überprüfen, ob jede Ziffer nur genau einmal vorkommt?
Bin grade ein Knobelspiel am Programmieren, und muss ein Programm schreiben, was überprüft, ob die Große Straße vorkommt (1, 2, 3, 4, 5, 6); sprich jede Zahl von 1 - 6 nur genau einmal vorkommt.
3 Antworten
Lege dir ein Array an, welches alle erlaubten Elemente beinhaltet. Dann gehst du pro Iterationsschritt mit einer weiteren Schleife über die Liste der zur prüfenden Elemente und zählst je Element mit, wie oft es in der Liste erlaubter Elemente enthalten ist.
Dies würde den Fall behandeln, dass die Zahlen 1-6 wild durcheinandergewürfelt in der zu prüfenden Menge enthalten sind.
Wie werden denn die zu überprüfenden Werte dargestellt?
Das andere Array (für erlaubte Elemente) kannst du umgehen, indem du alle Werte in Variablen speicherst und manuell prüfst. Das dir in der Schule vermittelte Wissen reicht somit völlig aus, um die Aufgabe zu lösen.
ob die Große Straße vorkommt (1, 2, 3, 4, 5, 6); sprich jede Zahl von 1 - 6 nur genau einmal vorkommt.
Alle hintereinander und in dieser Reihenfolge? Dürfen die Zahlen auch an anderen Stellen vorkommen? Dies musst du noch konkretisieren, sprich: Was ist das Ergebnis bei folgenden Eingaben?
- "abc123456def"
- "abc123456def23g8"
- "a5b947"
- "a1b2c3d4e5f6"
- "a1b3c5d4e2f6"
Mir fallen jetzt zwei Möglichkeiten ein:
1. Die Zeichenkette "123456" kommt an beliebiger Stelle vor, also: richtig, richtig, falsch, falsch, falsch. Dann könnte man Folgendes schreiben:
def check(s):
num = 1
i = 0
while i < len(s):
if (s[i].isdigit() and int(s[i]) == num):
num += 1
if (num == 6):
return True
else:
num = 1
i += 1
return False
inputStr = input('Gib eine Zeichenkette ein:')
print()
if (check(inputStr) == True):
print('Die Große Straße kommt in der Zeichenkette vor!')
else:
print('Die Große Straße kommt in der Zeichenkette nicht vor!')
2. Jede Zahl kommt im gesamten String genau einmal an beliebiger Stelle vor: richtig, falsch, falsch, richtig, richtig. Dann könnte man Folgendes schreiben:
import array
def check(s):
arr = array.array('i', (0 for i in range(0, 6)))
i = 0
while (i < len(s)):
if (s[i].isdigit()):
num = int(s[i]) - 1
if (num >= 0 and num < len(arr)):
arr[num] += 1
i += 1
return all(x == 1 for x in arr)
inputStr = input('Gib eine Zeichenkette ein:')
print()
if (check(inputStr) == True):
print('Die Große Straße kommt in der Zeichenkette vor!')
else:
print('Die Große Straße kommt in der Zeichenkette nicht vor!')
Oder ohne Array:
def check(s):
n1 = n2 = n3 = n4 = n5 = n6 = 0
i = 0
while (i < len(s)):
if (s[i].isdigit()):
num = int(s[i])
if (num == 1):
n1 += 1
elif (num == 2):
n2 += 1
elif (num == 3):
n3 += 1
elif (num == 4):
n4 += 1
elif (num == 5):
n5 += 1
elif (num == 6):
n6 += 1
i += 1
return (n1 == n2 == n3 == n4 == n5 == n6 == 1)
inputStr = input('Gib eine Zeichenkette ein:')
print()
if (check(inputStr) == True):
print('Die Große Straße kommt in der Zeichenkette vor!')
else:
print('Die Große Straße kommt in der Zeichenkette nicht vor!')
Du liest die Zahlen geordnet in ein Array ein und guckst dann mit einer Schleife ob die Zahlen bei eins Anfangen und bei 6 aufhören.
weiß nicht wie das geht. haben in der schule erst if und while behandelt