Python :: Aufgabe #348
4 Lösungen
Noch mehr Mustervergleiche (word pattern)
Fortgeschrittener - Python
von JKooP
- 17.04.2021 um 19:10 Uhr
Gegeben ist ein Text (String), der ausschließlich aus kleingeschriebenen Wörtern besteht,
welche durch Leerzeichen getrennt sind.
Weiterhin gibt es eine Sequenz (String) mit der der Text verglichen werden soll (Mustergleichheit).
Beispiele:
t = "hund katze katze hund"
s = "abba"
Lösung: wahr => a = hund; b = katze; b = katze; a = hund
t = "hund katze maus hund"
s = "abba"
Lösung: falsch => a = hund; b = katze; b = maus; a = hund (b ist unterschiedlich)
t = "hund hund hund hund"
s = "aaa"
Lösung: falsch => Anzahl stimmt nicht überein
Schreibe eine Methode/Funktion, mit der man die Mustergleichheit überprüfen kann.
Als fakultative Herausforderung: ohne die implementierten Funktionen wie etwa Dictionary, map, set, zip, etc.
Viel Spaß
welche durch Leerzeichen getrennt sind.
Weiterhin gibt es eine Sequenz (String) mit der der Text verglichen werden soll (Mustergleichheit).
Beispiele:
t = "hund katze katze hund"
s = "abba"
Lösung: wahr => a = hund; b = katze; b = katze; a = hund
t = "hund katze maus hund"
s = "abba"
Lösung: falsch => a = hund; b = katze; b = maus; a = hund (b ist unterschiedlich)
t = "hund hund hund hund"
s = "aaa"
Lösung: falsch => Anzahl stimmt nicht überein
Schreibe eine Methode/Funktion, mit der man die Mustergleichheit überprüfen kann.
Als fakultative Herausforderung: ohne die implementierten Funktionen wie etwa Dictionary, map, set, zip, etc.
Viel Spaß
Lösungen:
"""
#348: Noch mehr Mustervergleiche (word pattern)
Gegeben ist ein Text (String), der ausschließlich aus kleingeschriebenen Wörtern besteht, welche durch Leerzeichen
getrennt sind. Weiterhin gibt es eine Sequenz (String) mit der der Text verglichen werden soll (Mustergleichheit).
"""
def prf_wrdpat(t, s):
u = []
erg = True
for i in range(0, len(s)):
u.append([s[i], t[i]])
u = (sorted(u))
for i in range(0, len(s) - 1):
if u[i][0] == u[i + 1][0] and u[i][1] != u[i + 1][1]:
erg = False
print(s, t, "Ergebnis =", erg)
def prf_ein(t1, s1):
t1 = t1.split(" ")
s1 = list(s1)
if len(t1) == len(s1):
prf_wrdpat(t1, s1)
else:
print("Anzahl stimmt nicht überein", t1, s1)
def main():
prf_ein("hund katze katze hund", "abba")
prf_ein("hund katze maus hund", "abba")
prf_ein("hund hund hund hund", "aaa")
prf_ein("hund katze katze hund katze", "abbab")
if __name__ == '__main__':
main()
def in_zahlenmuster(s):
m = ''
muster = ''
for i in s:
if i not in m:
m += i
if i in m:
muster += str(m.index(i))
print(muster)
return muster
def ist_isomorph(s1, s2):
if in_zahlenmuster(s1) == in_zahlenmuster(s2):
return True
return False
beispiele = [("hund katze katze hund", "abba"),
("hund katze maus hund", "abba"),
("hund hund hund hund", "aaa")]
for s1, s2 in beispiele:
s1n = []
for i in str.split(s1,' '):
s1n.append(i[0])
print('s1 = {}; s2 = {} => {}'.format(s1, s2, ist_isomorph(s1n, s2)))
def pattern_analysis(t):
return [[k for k in range(len(t)) if t[k] == t[i]] for i in range(len(t))]
def pattern_identity(text, sequence):
text_list = text.split(" ")
sequence_list = [char for char in sequence]
if len(text_list) == len(sequence_list):
return pattern_analysis(text_list) == pattern_analysis(sequence_list)
else:
return False
# Test
t = "coffin substitute outlook bubble substitute coffin"
s = "abcdba"
print(pattern_identity(t, s))
def ist_isomorph(s1,s2) :
if len(s1) != len(s2):
return False
return [len(set(s1)),len(set(s2))] == 2 * [len(set(zip(s1,s2)))]
beispiele = [("hund katze katze hund", "abba"),
("hund katze maus hund", "abba"),
("hund hund hund hund", "aaa")]
for s1, s2 in beispiele:
s1n = []
for i in str.split(s1,' '):
s1n.append(i)
print('s1 = "{}"; s2 = "{}" => {}'.format(s1, s2, ist_isomorph(s1n, s2)))
