Python :: Aufgabe #352

5 Lösungen Lösungen öffentlich

Binärzahl enthält maximal eine Folge von Einsen

Anfänger - Python von JKooP - 23.04.2021 um 15:37 Uhr
Eine als String (Text) dargestellte Binärzahl (0 und 1) soll dahingehend geprüft werden,
ob sie maximal eine Folge von Einsen enthält. Die Länge der Folge ist beliebig.
Dabei kann die Binärzahl auch vorangestellte Nullen enthalten.

Beispiele:
b = "1100"
Lösung: wahr => 1100 (1 Folge)

b = "1010"
Lösung: falsch => 1010 (2 Folgen)

b = "00111000"
Lösung: wahr => 00111000 (1 Folge)

b = "10000001"
Lösung: falsch => 10000001 (2 Folgen)

Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.

Viel Spaß

Lösungen:

vote_ok
von eisheiliger (3750 Punkte) - 24.04.2021 um 17:00 Uhr
Quellcode ausblenden Python-Code

"""
#352: Binärzahl enthält maximal eine Folge von Einsen
Eine als String (Text) dargestellte Binärzahl (0 und 1) soll dahingehend geprüft werden, ob sie maximal eine Folge
von Einsen enthält.
"""


def prf_bin(b):
    erg = True
    b = ([index for index, char in enumerate(([int(num) for num in str(b)])) if char == 1])
    for i in range(0, len(b) - 1):
        if b[i + 1] > b[i] + 1:
            erg = False
    return erg


print(prf_bin("1100"))
print(prf_bin("1010"))
print(prf_bin("00111000"))
print(prf_bin("10000001"))


vote_ok
von satn1241 (3090 Punkte) - 24.04.2021 um 21:34 Uhr
Quellcode ausblenden Python-Code
input = ("00111000")
counter1 = 0
counter2 = 0

zahl = str(int(input))

for e in zahl:
    if e == "1":
        counter1 += 1

for e in zahl:
    if e == "1":
        counter2 += 1
    elif e == "0":
        break
if counter1 == counter2:
    print("TRUE")
else:
    print("FALSE")
2 Kommentare
vote_ok
von AlexGroeg (2010 Punkte) - 06.05.2021 um 15:47 Uhr
Quellcode ausblenden Python-Code

def prüfe_folge(b):
    for i in range(len(b)-1):
        if b[i] == '1' and b[i+1] == '1':
            return True
    return False


beispiele = ["1100", "1010", "00111000", "10000001"]

for b in beispiele:
    print(prüfe_folge(b))

vote_ok
von nitnat (670 Punkte) - 07.05.2021 um 21:04 Uhr
Quellcode ausblenden Python-Code
# Die Aufgabenstellung erinnerte mich sofort an klassische deterministische endliche Automaten.
# Daher habe ich hier für diese Aufgabe einen etwas ungewöhnlichen Lösungsweg gewählt.
# Die Klasse DFA implementiert ein Modell für beliebige deterministische endliche Automaten.
# Die Spezifizierung erfolgt durch das 5-Tupel Zustände (list), Alphabet (list),
# Übergangsfunktion als Tabelle (2d list), Startzustand (str) und akzeptierende Endzustände (list).

# Eine graphische Darstellung des Automaten für die konkrete Aufgabenstellung habe ich als Anhang beigefügt.


# Deterministic Finite Automaton
class DFA:
    def __init__(self, S, A, d, s0, F):
        self.states = S
        self.alphabet = A
        self.transition_table = d
        self.start_state = s0
        self.final_states = F

    def delta(self, state, word):
        return self.transition_table[self.states.index(state)][self.alphabet.index(word)]

    def delta_circumflex(self, state, word_list):
        if not word_list:
            return state
        else:
            return self.delta(self.delta_circumflex(state, word_list[:-1]), word_list[-1])

    def run(self, words):
        return self.delta_circumflex(self.start_state, [word for word in words]) in self.final_states


# automaton to solve the problem
states = ["s0", "s1", "s2", "s3"]
alphabet = ["0", "1"]
transition_table = [["s0", "s1"],
                     ["s2", "s1"],
                     ["s2", "s3"],
                     ["s3", "s3"]]
start_state = "s0"
final_states = ["s1", "s2"]


# Test

automaton = DFA(states, alphabet, transition_table, start_state, final_states)

test_data = ["1100", "1010", "00111000", "10000001"]

for element in test_data:
    print(automaton.run(element))

vote_ok
von AlexGroeg (2010 Punkte) - 19.05.2021 um 13:12 Uhr
Quellcode ausblenden Python-Code

def prüfe_folge(b):
    n = []
    for i in range(len(b)-1):
        if b[i] == '1' and b[i+1] == '1':
            n.append(i)        
        if len(n) > 1 and n[0] == n[1]-1:
            n.remove(n[0])
    if len(n) == 1: 
        return True
    return False


beispiele = ["1100", "1010", "00111000", "10000001", "0010101100000110"]

for b in beispiele:
    print('b= "{}"'.format(b))
    print('Lösung:',prüfe_folge(b),'\n')

1987572

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.