inputs_param
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
inputs_param [2017/07/04 11:18] – [Beispiele] gg | inputs_param [2017/07/05 11:03] (current) – gg | ||
---|---|---|---|
Line 6: | Line 6: | ||
Die folgenden Beispiele lesen einen Namen und Alter als Kommandozeilenparameter ein, prüfen die Parameter auf Korrektheit und geben Sie dann wieder aus.\\ | Die folgenden Beispiele lesen einen Namen und Alter als Kommandozeilenparameter ein, prüfen die Parameter auf Korrektheit und geben Sie dann wieder aus.\\ | ||
- | Geprüft wird, ob der Vorname mit einem Grossbuchstaben startet und sonst nur Kleinbuchstaben enthält und ob das Alter zwischen 1 und 99 ist und nicht mit einer 0 startet. Es gibt **elegantere Möglichkeiten** zu prüfen, ob eine Zahl zwischen 1 und 99 ist, nämlich könnte man den **String in eine Zahl umwandeln**. Hier wird aber gezeigt, wie man einen String prüft, ob er passt. Bietet eine Programmiersprache keine vernünftige Möglichkeit einzelne Zeichen zu vergleichen (Bash, Perl) so werden reguläre Ausdrücke verwendet. | + | Geprüft wird, ob der Vorname mit einem Grossbuchstaben startet und sonst nur Kleinbuchstaben enthält und ob das Alter zwischen 1 und 99 ist und nicht mit einer 0 startet. Es gibt **elegantere Möglichkeiten zu prüfen**, ob eine Zahl zwischen 1 und 99 ist, nämlich könnte man den **String in eine Zahl umwandeln**. Hier wird aber gezeigt, wie man einen String prüft, ob er passt. Auch gibt es **elegantere Möglichkeiten** Fehler auszugeben. Man könnte **Fehler sammeln und alle gemeinsam ausgeben**. Bietet eine Programmiersprache keine vernünftige Möglichkeit einzelne Zeichen zu vergleichen (Bash, Perl), so werden reguläre Ausdrücke verwendet. |
==== Bash ==== | ==== Bash ==== | ||
Line 374: | Line 374: | ||
perl input.pl Werner 30 | perl input.pl Werner 30 | ||
</ | </ | ||
+ | |||
+ | ==== PHP ==== | ||
+ | === Code === | ||
+ | <code php> | ||
+ | <?php | ||
+ | |||
+ | function checkName($name) { | ||
+ | // Die Länge des Namens prüfen | ||
+ | if(strlen($name) == 0) { | ||
+ | return false; | ||
+ | } | ||
+ | |||
+ | // prüfen, ob der erste Buchstabe eine Grossbuchstabe ist | ||
+ | if($name[0] < ' | ||
+ | return false; | ||
+ | } | ||
+ | // Sind alle anderen Buchstaben Kleinbuchstaben? | ||
+ | for($i = 1; $i < strlen($name); | ||
+ | if($name[$i] < ' | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Alle Bedingungen sind erfüllt | ||
+ | return true; | ||
+ | } | ||
+ | |||
+ | function checkAge($age) { | ||
+ | // Die Länge des Alters prüfen | ||
+ | if(strlen($age) == 0 || strlen($age) > 2) { | ||
+ | return false; | ||
+ | } | ||
+ | |||
+ | // prüfen, ob das Alter mit 1-9 beginnt | ||
+ | if($age[0] < ' | ||
+ | return false; | ||
+ | } | ||
+ | // prüfen, ob die zweite Zahl (falls vorhanden) zwischen 0 und 9 ist | ||
+ | if(strlen($age) == 2) { | ||
+ | if($age[1] < ' | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Alle Bedingungen sind erfüllt | ||
+ | return true; | ||
+ | } | ||
+ | |||
+ | // prüfen, ob die Anzahl der Parameter stimmt | ||
+ | if(sizeof($argv) != 3) { | ||
+ | echo " | ||
+ | exit; | ||
+ | } | ||
+ | |||
+ | // sprechendere Namen verwenden | ||
+ | $name = $argv[1]; | ||
+ | $age = $argv[2]; | ||
+ | |||
+ | // die beiden Variablen prüfen | ||
+ | if(!checkName($name)) { | ||
+ | echo "Der Name muss mit einem Grossbuchstaben beginnen und darf sonst nur Buchstaben enthalten\n"; | ||
+ | exit; | ||
+ | } | ||
+ | if(!checkAge($age)) { | ||
+ | echo "Das Alter muss mit 1-9 beginnen, darf nur Zahlen enthalten und maximal 99 sein\n"; | ||
+ | exit; | ||
+ | } | ||
+ | |||
+ | echo "Dein Name ist $name und du bist $age Jahre alt\n"; | ||
+ | </ | ||
+ | |||
+ | === Ausführen === | ||
+ | Die Datei input.php mit obigen Code befüllen und auf folgendem Weg ausführen. | ||
+ | <code bash> | ||
+ | php input.php Werner 30 | ||
+ | </ | ||
+ | |||
+ | ==== Python ==== | ||
+ | Python bietet mit **OptParse** oder **ArgParse** ziemlich gute Module für Programmparameter an. Hier soll aber gezeigt werden, wie es mit Bordmitteln funktioniert. | ||
+ | === Code === | ||
+ | <code python> | ||
+ | import sys | ||
+ | |||
+ | # Funktion definieren | ||
+ | def checkName(name): | ||
+ | # ist die Länge korrekt | ||
+ | if len(name) == 0: | ||
+ | return False | ||
+ | |||
+ | firstCharacter = True | ||
+ | for c in name: | ||
+ | if firstCharacter: | ||
+ | # ist das erste Zeichen ein Grossbuchstabe? | ||
+ | if c < ' | ||
+ | return False | ||
+ | firstCharacter = False | ||
+ | else: | ||
+ | # sind alle anderen Zeichen Kleinbuchstaben? | ||
+ | if c < ' | ||
+ | return False | ||
+ | |||
+ | # Alle Bedingungen sind erfüllt | ||
+ | return True | ||
+ | |||
+ | def checkAge(age): | ||
+ | # ist die Länge korrekt? | ||
+ | if len(age) <= 0 or len(age) > 2: | ||
+ | return False | ||
+ | |||
+ | # Fängt das erste Zeichen zwischen 1 und 9 an? | ||
+ | if age[0] < ' | ||
+ | return False | ||
+ | |||
+ | # Ist das zweite Zeichen (falls vorhanden) zwischen 0 und 9? | ||
+ | if len(age) == 2: | ||
+ | if age[1] < ' | ||
+ | return False | ||
+ | |||
+ | # Alle Bedingungen sind erfüllt | ||
+ | return True | ||
+ | |||
+ | # Die Anzahl der Parameter prüfen | ||
+ | if len(sys.argv) != 3: | ||
+ | print(" | ||
+ | sys.exit(1) | ||
+ | |||
+ | # sprechendere Namen verwenden | ||
+ | name = sys.argv[1] | ||
+ | age = sys.argv[2] | ||
+ | |||
+ | # Die Parameter prüfen | ||
+ | if not checkName(name): | ||
+ | print(" | ||
+ | sys.exit() | ||
+ | if not checkAge(age): | ||
+ | print(" | ||
+ | sys.exit() | ||
+ | |||
+ | # Ausgabe | ||
+ | print(" | ||
+ | </ | ||
+ | === Ausführen === | ||
+ | Die Datei input.py mit obigen Quelltext füllen und so zum Laufen bringen: | ||
+ | <code bash> | ||
+ | python3 input.py | ||
+ | </ | ||
+ | |||
+ | ===== Übungen ===== | ||
+ | * Lese eine ganze Zahl als Programmparameter ein und berechne die Fakultät dieser Zahl | ||
+ | * Erweitere die obigen Beispiele um einen weiteren Parameter. Lese zusätzlich das Geburtsdatum ein (inklusive Prüfungen!) und gib es aus | ||
+ | * Baue einen kleinen Taschenrechner, | ||
+ | * Erweitere den Taschenrechner um die Multiplikation und Division |
inputs_param.1499159881.txt.gz · Last modified: 2017/07/04 11:18 by gg