Wie in Python überprüfen, ob jede Ziffer 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.


florian203 
Fragesteller
 13.01.2018, 16:08

weiß nicht wie das geht. haben in der schule erst if und while behandelt

0
regex9  13.01.2018, 20:02
@florian203

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.

0
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.


florian203 
Fragesteller
 13.01.2018, 14:59

wie geht das? haben in Schule erst if und while

0