<?PHP
echo("Hallo Welt!");
?>
Das eigentliche Problem ist, dass ich noch nicht weiß, ob meine Version wirklich schon völlig funktioniert. Der Test hier sagt: Es funktioniert. Wenn ich den PHP-Code direkt posten würde, dann würde er in Blogger nicht angezeigt werden.
Freitag, 29. März 2013
SimpleCode 2
Ich habe eine eigene Version von SimpleCode in PHP programmiert. Das ging überraschend einfach, wenn auch der Aufwand es zu coden exorbitant war. Ganz verstanden habe ich das Problem noch nicht...
Sonntag, 24. März 2013
Die Funktion header()
Ich fange gerade erst an das erste PHP-Tutorial durchzuarbeiten, bin aber in die Verlegenheit gekommen, eine Umleitung zu programmieren. Ich möchte verhindern, dass ein Benutzer auf ein PHP-Skript zugreift, dass Daten eines anderen Skripts verarbeitet und ausgibt.
Im Augenblick behelfe ich mir mit folgendem Code:
Wahrscheinlich ist das so nicht direkt im Sinne des Erfinders, aber es funktioniert erst einmal.
Im Augenblick behelfe ich mir mit folgendem Code:
if (empty($_POST)){
header('Location: skript_1.php');
};
Wahrscheinlich ist das so nicht direkt im Sinne des Erfinders, aber es funktioniert erst einmal.
Sonntag, 10. März 2013
Morse Code Palindrome
Das „Morse Code Palindrome“-Problem gehört zum „HP Code wars“-Wettbewerb 2013 und war eher sehr einfach zu lösen. Einmal galt es eine Botschaft in Morsecode zu übersetzen und dann die Botschaft auf ihre Palindrom-Eigenschaft hin zu untersuchen:
# HP Code wars 2013
# problem 12
# Morse Code Palindrome
# 6 points
def botschaft_decodieren(botschaft):
""" Bekommt eine Botschaft und setzt sie
in Morsezeichen um. Leerzeichen und Satzzeichen
werden ignoriert. Kleinbuchstaben werden nicht
erwartet oder beachtet.
"""
morsecode = {"A": "•-",
"B": "-•••",
"C": "-•-•",
"D": "-••",
"E": "•",
"F": "••-•",
"G": "--•",
"H": "••••",
"I": "••",
"J": "•---",
"K": "-•-",
"L": "•-••",
"M": "--",
"N": "-•",
"O": "---",
"P": "•--•",
"Q": "--•-",
"R": "•-•",
"S": "••••",
"T": "-",
"U": "••-",
"V": "•••-",
"W": "•--",
"X": "-••-",
"Y": "-•--",
"Z": "--••"}
codierte_botschaft = []
for a in botschaft:
codierte_botschaft.append(morsecode.get(a,""))
return "".join(codierte_botschaft)
def palindrom_testen(datensatz):
""" Testet auf ein Palindrom und
schickt den Datensatz dazu zum decodieren
"""
botschaft = botschaft_decodieren(datensatz)
if botschaft == botschaft[::-1]:
return True
else:
return False
data = """ELEGIZED
QUIRKILY
MERCURY
FACE A WINE
HAPPY DAY
FEVER REBEL
SOPRANOS
EMIT OLD UFO TIME
PROTEIN POWDER
ANNEXING
ENJOIN
. """
datensaetze = data.split("\n")
for datensatz in datensaetze:
datensatz = datensatz.strip(" ")
if not datensatz == ".":
if palindrom_testen(datensatz):
print ("{} is a MCP".format(datensatz))
else:
print("{} is *not* a MCP".format(datensatz))
Anders als einige andere Aufgaben des diesjährigen Wettbewerbs eher keine Herausforderung.
Webcrawler zur Websitenanalyse
Bei einer gestrigen Besprechung kam das Problem der Website-Wartung, der Behandlung toter Weblinks, des Aufspürens inzwischen falscher E-Mail-Adressen und - ich ergänze - defekter (Bild–)Dateien auf die Tagesordnung. Das Problem scheint „ungelöst“, jedenfalls wenn man dem Wikipedia-Artikel zu „Toten Weblinks“ glauben darf.
Erste Überlegungen
Ich hatte mir gestern überlegt an drei Stellen ansetzen zu können:
- Datenbank-Dump zur Website als CSV-Datei oder als SQL-Datei.
Vorteil: Die Prüfung erfasst alle Seiten und nicht nur die, die öffentlich zugänglich sind, sondern auch die, die einst zugänglich waren und vielleicht noch von jemandem über ein Lesezeichen besucht werden.
Nachteil: Per Hand muss zunächst ein Datenbank-Dump erzeugt werden. - Website im Laufenden Betrieb parsen.
Vorteil: Ich erfasst die vollständig zugängliche Website und brauche keinen Datenbankzugriff.
Nachteil: Einige Seiten werden übersehen. - Ich generiere spezielle 404-Seiten, die eine Meldung per E-Mail an den Webadmin absetzen und zeitnah über einen möglichen Fehler der Seite informieren.
Tja.
Ausgabe eines Protokolls
Prüfung der Bilddateien auf dem Rechner
Prüfung der E-Mail-Adressen durch Test-E-Mail und Information an den Empfänger.
Prüfung der Links über Protokoll (Liste) zur manuellen Prüfung und automatischen Prüfung über Test auf 404- oder weitere Fehlerseiten...
Ausgabe eines Protokolls
Prüfung der Bilddateien auf dem Rechner
Prüfung der E-Mail-Adressen durch Test-E-Mail und Information an den Empfänger.
Prüfung der Links über Protokoll (Liste) zur manuellen Prüfung und automatischen Prüfung über Test auf 404- oder weitere Fehlerseiten...
Samstag, 9. März 2013
Family tree
Eigentlich könnte „Family tree“ ein schönes Problem sein, müsste man nicht eine durchaus komplexe Datenstruktur aufbauen, die sowohl aufsteigend, als auch absteigend durchsucht werden kann. Ich denke daran die Datenstruktur in ein Dictionary zu packen und die Auf- bzw. Abwärtssuche dann gesondert zu implementieren.
Die Ausgabe soll folgendermaßen aussehen:
Also gehen wir es an.
Ein- und Ausgabe
Ich erhalte als Eingabe folgende Datensätze:9 A + B : C , D , E . F + G : H . I + J : K , L . C + H : M , N . D + K : O . L + E : P , Q , R , S . N + Q : T , U , V . O + S : W , X . Y + H : Z . 7 K > O ? F > W ? B ^ U ? O ^ V ? A > Z ? F > Z ? X ^ Z ?
Die Ausgabe soll folgendermaßen aussehen:
K > O ? TRUE F > W ? FALSE B ^ U ? FALSE O ^ V ? TRUE A > Z ? FALSE F > Z ? TRUE X ^ Z ? FALSE
Das Problem
Eine Visualisierung dient der ersten Orientierung:![]() |
| Ein Stammbaum erzeugt aus den Anweisungen |
Also gehen wir es an.
Room for an argument
„Room for an argument“ war Problem 11 bei HP Code wars 2013 und es gab hierfür insgesamt 5 Punkte, was mir recht hoch erscheint, wenn man sich das Problem vergegenwärtigt. Insgesamt galt es bei einer Reihe von Texten aus „is“ ein „is not“ zu machen und umgekehrt.
Aus meiner Sicht ließ sich das mit Stringoperationen erledigen ohne jede Zeile gesondert zu parsen, womit ich direkt einen Gedankenfehler gemacht habe, weil ich dabei z. B. „This“ übersehen hatte. Folglich muss doch jede Zeile gesondert geparst werden bzw. müssen die Ersetzungen angepasst werden.
Aus meiner Sicht ließ sich das mit Stringoperationen erledigen ohne jede Zeile gesondert zu parsen, womit ich direkt einen Gedankenfehler gemacht habe, weil ich dabei z. B. „This“ übersehen hatte. Folglich muss doch jede Zeile gesondert geparst werden bzw. müssen die Ersetzungen angepasst werden.
data = """7
This is not an argument.
An argument is an intellectual process.
It is fair if you do not go.
The ferris wheel is not working.
A butterfly is beautiful, but litter is not.
A lady discerns that which is not elegant from that which is.
A lemur is a monkey and a grivet is a monkey but a chimp is not. """
for i, line in enumerate(data.split("\n")):
if not i == 0:
print(line)
line = line.strip(" ")
line = line.replace(" is not"," ")
line = line.replace(" is"," is not")
line = line.replace(" "," is")
print(line,"\n")
Ob die es sich so gedacht haben? Alternativ müsste man jede Zeile in eine Liste aufsplitten und dann jedes Element und ggf. sein Folgeelement einzeln parsen und Änderungen auf einer Liste vornehmen. Die Lösung hier scheint mit vertretbar.
Dienstag, 5. März 2013
Hot Pad
Das „Hot Pad“-Problem von HP Codewars für 9 Punkte besteht eigentlich aus 2 Problemen. Im Rahmen des Problems erhalte ich von einem Keypad die Temperaturen je Taste und muss eine Liste der möglichen Kombinationen ausgegeben, die ein Anwender getippt haben könnte.
Die Temperaturwerte für das Pad sehen u. a. so aus:
Datensatz 1
Datensatz 2
Die Temperaturen können schwanken, was beachtet werden muss! Denke daran, dass eine Taste einmal, zweimal, dreimal oder auch viermal gedrückt werden könnte; die Raute wird einmal gedrückt worden sein. Das Sternchen sollte eigentlich nicht gedrückt worden sein.
Problem
Die beiden Probleme sind folglich:- Lies die Temperaturwerte ein und stelle fest, welche Taste einmal und welche ggf. zweimal gedrückt wurde. Es gibt eine durchschnittliche Temperatur und die Taste # muss zwingend zum Absenden gedrückt sein.
- Für die ermittelten Tasten muss ich anschließend alle möglichen Kombinationen ausgeben. Das ist ein Problem der Kombinatorik, wenn ich mich nicht irre.
Erste Annäherung
Beachten muss ich, dass die eingegebenen Codes eine Länge von 4 Ziffern haben und mit einem # abgeschlossen werden. Das Keypad sieht so aus:| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
| * | 0 | # |
Die Temperaturwerte für das Pad sehen u. a. so aus:
Datensatz 1
72.1
|
75.0
|
75.1
|
72.0
|
72.1
|
72.2
|
72.0
|
72.2
|
77.9 |
72.1
|
72.2
|
75.2
|
Datensatz 2
77.2
|
77.1
|
76.9
|
| 77.0 | 83.5 |
77.0
|
| 77.1 |
77.3
|
77.1 |
77.0
|
79.4 |
79.1
|
Die Temperaturen können schwanken, was beachtet werden muss! Denke daran, dass eine Taste einmal, zweimal, dreimal oder auch viermal gedrückt werden könnte; die Raute wird einmal gedrückt worden sein. Das Sternchen sollte eigentlich nicht gedrückt worden sein.
Counting Ones
Das Problem Nr. 9 „Counting Ones“ wird bereis als Spaßproblem („This program is a fun math problem!“) beschrieben. Es sind in einem Zahlenbereich von 1 bis einschließlich einer Zahl n alle Einser gezählt werden. Im Bereich bis 10 finden sich so z. B. zwei Einser und zwar bei 1 und einmal bei 10. Die Lösung des Problems, wenn man die Dateneingabe außen vor lässt, ist knapp zu formulieren:
def counting_ones(n):
""" Soll alle Einser zwischen
1 bis einschließlich n ermitteln
"""
zahlen = [str(n) for n in range(1,n + 1)]
zahlenreihe = "".join(zahlen)
return zahlenreihe.count("1")
for i in [13,1,999,23,1111,9997,511]:
print(counting_ones(i))
Schöne, einfache Probleme, zumindest die, die ich mir jetzt angesehen habe.
Distinct Letters
Das Problem 8 „Distinct Letters“ von HP Code wars 2013 für 4 Punkte ist eher eines der sehr einfachen Probleme. Es muss geprüft werden, ob ein Wort einen jeden Buchstaben des Wortes nur einmal verwendet.
data = """UNCOPYRIGHTABLE
FLIPPER
EXECUTABLE
UNPROFITABLE
QUESTIONABLY
WINDOW
TAMBOURINE
. """
def daten_aufbereiten(data):
""" Wandelt die Daten in Zeilen
in einer Liste um und gibt die
Liste zurück...
"""
zeilen = data.replace(" ","").split("\n")
if zeilen[-1] == ".":
zeilen.pop()
return zeilen
def distinct_letters_pruefen(wort):
""" Muss prüfen, ob ein Wort einen
Buchstaben mehr als einmal nutzt,
dann ist der Rückgabewert
FALSE
sonst
TRUE
"""
if len(wort) != len(set(wort)):
return False
else:
return True
woerter = daten_aufbereiten(data)
for wort in woerter:
if distinct_letters_pruefen(wort):
print("{} USES DISTINCT LETTERS.".format(wort))
else:
print("{} DOES NOT USE DISTINCT LETTERS.".format(wort))
Ich finde meine Lösung intelligent, weil kurz und richtige Ergebnisse geliefert werden ohne dass ich eine Prüfung je Buchstabe durchführen muss.
Selling Shirts
Die Aufgaben von HP Code wars 2013 sind online und die erste echte Aufgabe ist eine Sache für wenige Minuten:
""" Die Formel zur Berechnung des Profits lautet
P = 8 * N – 95
$ 8 pro verkauftem Shirt
N = die Zahl der verkauften Shirts
95 = die Standgebühr
"""
profit = lambda n : 8 * n - 95
print(profit(31),end=" $")
Die Formel zur Berechnung des Profits kann gut mittels lambda-Operator ausgedrückt werden.
Sonntag, 3. März 2013
E-Mail-Versand mit Python
Das Thema E-Mail-Versand mit Python finde ich ganz spannend.
Brauchbare Ressourcen
Für den Versand von E-Mails mit Python haben sich folgende Ressourcen als ganz brauchbar herausgestellt:
Module:
- Das Modul smtplib
- Das Modul email
- Das Modul ...
Referenzen:
- Liste mit POP3- und SMTP-Servern
Ziemlich umfangreich und aktuell
Einfache Text-E-Mails
Text
Versand von HTML-E-Mails
Text
Versand von E-Mails mit Anhängen
Text
Name That Cow
![]() |
| Aus dem OpenClipart-Project |
Problembeschreibung
Auf einer texanischen Rinderfarm soll für die Seriennummer einer Kuh eine Liste weiblicher Vornamen vorgeschlagen werden, wobei die Übersetzung sich am Tastenfeld eines Telefons orientiert, d. h. für die Zahl 2 kann im Vornamen der Buchstabe A, B oder C stehen.Ich verwende meine Telefontastatur, wie ich sie auf meinem Telefon vorfinde.
| 1 | 2 ABC |
3 DEF |
| 4 GHI |
5 JKL |
6 MNO |
| 7 PQRS |
8 TUV |
9 WXYZ |
Diese Änderung sollte unproblematisch sein. Die richtige Funktionsweise meines Programms kann später über die Tastatur überprüft werden. Wirft mir das Programm für den Code 23353 z. B. den Vornamen Adele aus, dann kann ich prüfen, ob die Buchstaben jeweils in den den Zahlen zugeordneten Buchstabenlisten enthalten sind.
Folglich stellt sich folgendes Problem: Schreibe ein Programm das für die Nummer eines Rinds alle validen Namen ausgibt, die für diese Nummer generiert werden können. Sonst lautet die Ausgabe „No matching names found“. Seriennummern dürfen maximal 9 Zahlen lang sein. Das Programm endet, wenn eine 0 eingegeben wird.
Vorüberlegungen
Die Aufgabenstellung führt zu folgenden Vorüberlegungen:
- Die Seriennummer eines Rindes darf keine 0 oder 1 enthalten, weil ich diesen Ziffern keinen Buchstaben zuweisen kann.
Die Verwendung des RE-Moduls bietet sich m. E. an. Die dynamische Generierung eines RE-Ausdrucks ist m. E. erforderlich.(Ging einfacher)
- Möglicherweise macht es Sinn die Vornamen in Listen entsprechend der Länge aufzuteilen. Das könnte helfen die Performanz zu verbessern.
Datendatei aufbauen
Ich habe mir - leider manuell - aus der Wikipedia eine Liste mit - laut Wikipedia - 1.761 weiblichen Vornamen (Stand März 2013) geholt und aufbereitet. Aus dieser Liste soll das Programm geeignete Namen auswählen.Die Vornamensliste wird aus dem Quelltext der Kategorienseiten heraus aufgebaut:
with open("Männlicher Vorname.txt") as f, open("Männliche Vornamen.txt","w") as g:
for line in f:
line = line.replace("\n","")
# title="Zsuzsanna"
if "title" in line:
line = line.split('title="')[1]
vorname = line.split('"')[0]
vorname = vorname.replace(" (Vorname)","")
vorname = vorname.replace(" (Name)","")
print(vorname)
vorname += "\n"
g.write(vorname)
Das war gerade etwas Handarbeit, aber noch im Rahmen und einfacher und schneller als sich beim Pywikipediabot einzulesen.Die entsprechende Übersicht mit denn männlichen Vornamen bietet - laut Wikipedia - 3.390 männliche Vornamen (Stand März 2013).
Quelle: Deutschsprachige Wikipedia (2. März 2013)
Aus beiden Listen kann man die benötigte Vornamensliste aufbauen.
Ein- und Ausgabe
Die Eingabe stellt man sich bei HP in etwa in folgender Form vor:
Program Input 232 252473 727225 0 Program Output Possible names for #232 are: Ada Possible names for #252473 are: Blaise, Claire Possible names for #727225 are: PascalSieht leistbar aus.
Mein Programm
Das re-Modul kommt hier nicht zum Einsatz, weil es Treffer für Strings findet, nicht aber in Listen. Eigentlich hätte ich gerne alle Listenelemente bekommen und muss daher - gefühlt - einen kleinen Umweg nehmen.# Code wars IV
# Problem 9: Name That Cow
def codeliste_aufbauen(data):
''' Bekommt die Daten und gibt
einzelne Codes in einer Liste zurück
'''
data = data.replace(" ","")
data = data.split("\n")
if data[-1] == "0":
data.pop()
return data
def ergebnis_ausgeben(code,namensliste):
''' Erledigt die Ausgabe in der Konsole
'''
if namensliste: # Wahr, wenn die Liste nicht leer ist!
print("Possible names for #{} are: {}.\n".format(code,", ".join(namensliste)))
else:
print("No matching names found for #{}.\n".format(code))
def vornamenliste_aufbauen():
''' Holt sich die Daten aus den Vornamenslisten
Offene Probleme:
[ ] Es werden alle Namen geholt, nicht nur die, die
auch möglich sind, z. B. < 10 oder ohne Leerzeichen
und ohne Sonderzeichen
'''
vornamen = []
dateien = ["Männliche Vornamen.txt","Weibliche Vornamen.txt"]
for datei in dateien:
with open(datei) as f:
for line in f:
line = line.replace("\n","")
vornamen.append(line)
vornamen.sort()
# Trainingsmaterial
'''
Wähle code = 382 -> EVA
vornamen = ['Bob', 'Eda', 'Eda', 'Eka', 'Eka', 'Eva', 'Ewa', \
'Ida', 'Iga', 'Ina', 'Ina', 'Ira', 'Ira', 'Isa', \
'Isa', 'Iva', 'Lea', 'Lia', 'Mia', 'Nea', 'Nia', \
'Noa', 'Néa', 'Oda', 'Ola', 'Ola', 'Ona', 'Oya', \
'Pia', 'Ria', 'Rob', 'Uta']
'''
return vornamen
def treffer_suchen(code,vornamen):
''' Suche alle Treffer in der Vornamensliste für
den dekodierten code und gibt die Liste zurück
'''
codeliste = {"2":["A","B","C"],
"3":["D","E","F"],
"4":["G","H","I"],
"5":["J","K","L"],
"6":["M","N","O"],
"7":["P","Q","R"],
"8":["T","U","V"],
"9":["W","X","Y","Z"]}
results = [] # Nimmt die Ergebnisse auf
if "1" in code or "0" in code:
# Der 1 sind keine Buchstaben zugeordnet
return []
else:
for vorname in vornamen:
match = True
if len(vorname) != len(code):
# Kann nicht passen
pass
elif " " in vorname:
# Kann nicht passen
pass
else:
for letter, i in zip(list(vorname),list(code)):
if not letter.upper() in codeliste[i]:
match = False
# Muss nicht weiterprüfen
break
# Nächster Vorname!
if match == True:
results.append(vorname)
return results
def main():
""" Mainfunktion
"""
data = """114
2662
6886
42664
42662
58473
58472
5642662
382
232
252473
727225
6424235
0"""
# Übungsmaterial
# data = """382"""
# Daten aufbereiten
codes = codeliste_aufbauen(data)
vornamen = vornamenliste_aufbauen()
# Treffer suchen
for code in codes:
treffer = treffer_suchen(code,vornamen)
ergebnis_ausgeben(code,treffer)
if __name__ == "__main__":
main()
Zu verbessern wäre hier wohl die Funktion treffer_suchen(code,vornamen). Mich würde interessieren, ob es eine bessere Lösung - z. B. mittels Datenbank oder re-Modul geben könnte. Eine Musterlösung von HP gibt es für die frühen Code wars leider noch nicht.Verbesserungsvorschläge und Feedback
Ich habe im Python-Forum und zwar hier um Kritik gebeten und bekommen.Samstag, 2. März 2013
CSI Crime Lab
Bei Aufgabe „CSI Crime Lab“ von HP Codewars VII sollte eine DNA-Prüfung implementiert werden, was mich etwas Zeit und Energie gekostet hat, weniger aufgrund der Komplexität der Aufgabe, als vielmehr, weil ich mir die Datenstruktur mit 2 dictionaries und dort u. U. hinterlegten Listen erst einmal vorgestellen musste.
# CodeWars VII Problems
# CSI Crime Lab
def suspects_aufbereiten(suspects):
''' Soll die Daten aufbereiten und in
ein Wörterbuch packen
'''
personen = {}
suspects = suspects.split("\n")
for suspect in suspects:
name,DNA = suspect.split(": ")
personen[name] = DNA
return personen
def daten_aufbereiten(scene):
''' Soll die Daten vom Tatort
aufbereiten
'''
data = {}
scene = scene.split("\n")
for datum in scene:
datum = datum.replace("On ","")
ort,dna_spur = datum.split(": ")
data[ort] = dna_spur.split(", ") # Werte sind in einer Liste (!)
return data
def spuren_prüfen(suspects,spuren):
''' Vorgaben von HP
a.) Es gibt nur einen Verdächtigen, dessen Name
zurückgegeben werden muss
b.) Falls kein positiver Treffer, dann ist die Ausgabe
des Programms "NO MATCH", berücksichtigen
c.) Positiver Treffer nur, wenn ein Verdächtiger
DNA-Spuren an allen Tatorten hinterlassen hat
d.) Es kann je Tatort mehrere DNA-Spuren geben
Achtung - meine Ergänzung
e.) Das Programm liefert nur den ersten Treffer mit
Spuren an allen Tatorten zurück. Es wird nicht
geprüft, ob das auch für andere Verdächtige
zutrifft. Das könnte eine Fehlerquelle sein!
'''
# Beispieldaten
# Larry King: GACTAATAACTTCATATATACACAGGTTAC
# revolver: GACTATTC, GACTAATA
# Was muss getan werden?
# Prüfe, ob eine der Spuren in der DNA-Sequenz enthalten ist
results = {}
for suspect in suspects:
results[suspect] = 0
dna = suspects[suspect]
for spurensatz in spuren: # Spuren im Datensatz
match = False
for spur in spuren[spurensatz]:
if spur in dna:
match = True
if match == True:
results[suspect] += 1
# Rückgabe: Name eines Verdächtigen oder "" (= False!)
keys = results.keys()
for key in keys:
if results[key] == 3:
return key
else:
return "NO MATCH"
suspects = """Larry King: GACTAATAACTTCATATATACACAGGTTAC
Paula Abdul: GACTATTCATCATAGATAGACAGTACCTAA
Charlie McCarthy: GATTCATTGACATACATACATTAGAGTTCA"""
scene = """On revolver: GACTATTC, GACTAATA
On door: GACTAAT, CATAGAT
On phone: CATACATT, ATTAGAG, ATAGATAG"""
# Daten aufbereiten
suspects = suspects_aufbereiten(suspects)
spuren = daten_aufbereiten(scene)
# Schick die Daten durch die Datenbank
suspect = spuren_prüfen(suspects,spuren)
# Ermittle das Ergebnis
if not suspect == "NO MATCH":
print("The suspect is: {}".format(suspect))
else:
print("NO MATCH")
Das hätte wohl etwas den Zeitrahmen gesprengt und ich bin mir auch noch nicht sicher, ob das wirklich die beste Implementierung ist. Produktiv würde ich das jedenfalls nicht zum Einsatz empfehlen, weil nur ein erster Verdächtiger benannt wird, nicht alle möglichen Täter ermittelt werden.
Spellbinder
Aufgabe Spellbinder war Problem 2 bei HP Code wars II. Das Problem ist recht einfach, wie mir scheint:
import string
def buchstaben_ermitteln(eingabe,ausgabe):
''' Ermittelt den Buchstaben und stellt fest,
ob es Groß- (capital) oder Kleinbuchstabe (lower-case)
ist...
'''
for a, b in zip(eingabe,ausgabe):
if a != b:
letter = b
break
if letter in string.ascii_uppercase:
type = "capital"
else:
type = "lower_case"
return type,letter
data = """fountain mountain
pet pen
check chuck
Mike bike"""
data = data.split("\n")
for line in data:
''' Ausgabe
'''
ausgabe,eingabe = line.split(" ")
type,letter = buchstaben_ermitteln(eingabe,ausgabe)
print('Ripping the {} "{}" from his shirt, Letterman'.format(type,letter))
print('changes "{}" back to "{}".'.format(eingabe,ausgabe))
Keine Herausforderung für 2 Punkte.
Palindromtest
Problem Nr. 3 bei HP Code Wars II war einen Palindromtest zu implementieren. Ich hatte mich mit dem Thema Palindrom bereits einmal befasst. Im Kern keine Herausforderung, aber eine nette Übung.
def palindrom_testen(word):
''' Teste auf Palindrom
'''
for zeichen in [" ",",",".",";","'","\n"]:
word = word.replace(zeichen,"")
if word.lower() == word.lower()[::-1]:
return True
else:
return False
data = """1881
Madam, I'm Adam.
Lisa Bonet ate no basil.
Taste penne pasta."""
data = data.split("\n")
for line in data:
# Prüfung und Ausgabe
print(line)
if palindrom_testen(line):
print("\tis a palindrome.")
else:
print("\tis *not* a palindrome.")
Den heutigen Teilnehmern an den HP Code wars viel Erfolg. Ich verfolge es gerade über Facebook.
Abonnieren
Kommentare (Atom)

