Du bist nicht angemeldet.

Werbeanzeige

Schorsch

Supermoderator

Beiträge: 5 200

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

31

15.10.2012, 11:10

Wichtig ist dafür zu wissen, dass "and" und "or" links und rechts von sich jeweils einen Boolschen Ausdruck erwarten. Das heisst vereinfacht einen Bool-Wert. Bool ist ein Typ welcher die Werte true oder false annehmen kann(wahr oder falsch). Der Ausdruck "Variable == Wert" liefert zum Beispiel true zurück wenn Variable und Wert gleich sind. Sind sie ungleich dann wird false zurück geliefert.
Bei or geht es so, dass erst links geprüft wird. Ist der Wert links false, dann wird auch rechts geprüft. Ist der Wert links schon true (also wahr), dann muss rechts nicht mehr geprüft werden und es kann direkt weiter gemacht werden. Wenn du jetzt also links false hast, weil deine Eingabe zum Beispiel nicht mit dem Abgefragten übereinstimmt, dann guckt er sich den rechten Teil an. Der rechte Teil ist bei dir aber nur ein String. Strings werden oft als true interpretiert. Genau wie einige Zahlenwerte. Das ist immer je nach Sprache abhängig.
Wenn du also schreibst:
"if "a":"
Dann müsste der Codeblock immer ausgeführt werden.
Wenn du schreibst:
"if false or false or false or false or false or false or "a":"
Dann wird der Codeblok auch immer ausgefrührt werden. Das sind aber so Fehler, welche du vermeidest wenn du mit einem Buch arbeitest. Groß umentscheiden ist eigentlich quatsch, da der Unterschied zu anderen Sprachen vor allem am Anfang noch recht klein ist. Und selbst bei den Unterschieden wirst du noch nicht sehen, womit du hinterher lieber arbeiten wirst.
Was auf den ersten Blick einfach wirkt kann noch seine Tücken zeigen und was auf den ersten Blick nicht so einfach wirkt kann eigentlich doch ganz easy sein.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

32

15.10.2012, 11:11

ein paar kleinere Hinweise:

wie dir vielleicht schon selbst aufgefallen ist, hast du an mehreren Stellen im Code genau die gleiche Abfrage und genau die gleichen Aktionen (konkret meine ich die Abfrage, ob wiederholt oder beendet werden sollte)
das hat zur folge, dass, wenn du den Code ändern willst/musst, dies an mehreren Stellen durchführen musst (das war ja erst der Fall beim Anpassen der Abfrage)
da du bereits mit Funktionen (das mit def menu(): oder def multi(): beispielsweise) könntest du schauen, wie du damit den Code an eine einzige Stelle bekommst, aber dennoch von allen Stellen darauf zugreifen kannst ;)

dir scheint bereits aufgefallen zu sein, dass der Benutzer mal Großbuchstaben, mal Kleinbuchstaben verwenden könnte
du könntest, bevor du die vom Benutzer eingegebene Zeichenkette - auch wenn es nur 1 oder vielleicht kein Zeichen ist, redert man immer von Zeichenketten - überprüfst, alle Großbuchstaben in Kleinbuchstaben umwandeln
um danach zu suchen, solltest du die englischen Bezeichnungen verwenden, also "String" für Zeichenkette und für das "Kleiner"machen "lower"

wenn der Benutzer "Möchtest du es nochmal Versuchen? [Y/N]: " gefragt wird, kann er entweder "Y" oder "N" eingeben
du könntest ja mal schauen, was passiert, wenn er "Ja" oder "vielleicht" eingibt und schauen, woran das, was passiert, liegen könnte ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

33

15.10.2012, 18:02

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import subprocess
import sys

def clearScreen():
    if subprocess.call('cls', shell=True) > 0:
        subprocess.call('clear', shell=True)

def menu():
    clearScreen()
    print("(A)ddieren, (S)ubtrahieren, (M)ultiplizieren, (D)ividieren")
    print("")

    mAuswahl = input(":> ")
    
    if mAuswahl == "a" or mAuswahl == "A":
        plus()
    elif mAuswahl == "s" or mAuswahl == "S":
        minus()
    elif mAuswahl == "m" or mAuswahl == "M":
        multi()
    elif mAuswahl == "d" or mAuswahl == "D":
        divi()
    else:
        print("Falsche Eingabe")
        decide = input("Möchtest du es nochmal Versuchen? [Y/N]: ")
        if decide == "y" or "Y":
            menu()
        elif decide == "n" or "N":
            sys.exit(0)


def repeat():
    decide = input("Noch eine Rechnung ausführen? [Y/N]: ")
    if decide == "y" or decide == "Y":
        menu()
    elif decide == "n" or decide == "N":
        sys.exit(0)

def plus():
    clearScreen()
    x = int(input("Geben sie die erste Zahl ein: "))
    y = int(input("Geben sie die zweite Zahl ein: "))
    ergebnis = str(x + y)
    print("Das Ergebnis ist: " + ergebnis)
    repeat()

def minus():
    clearScreen()
    x = int(input("Geben sie die erste Zahl ein: "))
    y = int(input("Geben sie die zweite Zahl ein: "))
    ergebnis = str(x - y)
    print("Das Ergebnis ist: " + ergebnis)
    repeat()

def multi():
    clearScreen()
    x = int(input("Geben sie die erste Zahl ein: "))
    y = int(input("Geben sie die zweite Zahl ein: "))
    ergebnis = str(x * y)
    print("Das Ergebnis ist: " + ergebnis)
    repeat()

def divi():
    clearScreen()
    x = int(input("Geben sie die erste Zahl ein: "))
    y = int(input("Geben sie die zweite Zahl ein: "))
    ergebnis = str(x / y)
    print("Das Ergebnis ist: " + ergebnis)
    repeat()



    
menu()


Code um 10 Zeilen verkürzt :D

Crush

Alter Hase

Beiträge: 384

Wohnort: Stuttgart

Beruf: Softwareentwickler

  • Private Nachricht senden

34

16.10.2012, 11:36

Also müßte ich jetzt wieder rein aus Interesse als Hobby bei Null anfangen würde ich vermutlich trotzdem erst wieder Assembler lernen, einfach nur um zu wissen, was man tut. Mit der Grundlage geht alles weitere ohnehin wesentlich leichter, weil man genau versteht, wie alles wirklich funktioniert.

35

16.10.2012, 11:56

Also müßte ich jetzt wieder rein aus Interesse als Hobby bei Null anfangen würde ich vermutlich trotzdem erst wieder Assembler lernen, einfach nur um zu wissen, was man tut. Mit der Grundlage geht alles weitere ohnehin wesentlich leichter, weil man genau versteht, wie alles wirklich funktioniert.

Ich würde Assembler jetzt aber nicht als Anfängersprache wählen. Außer du gehst mit deinem Hobby eher in die Microcontroller sparte. Ich finde Python oder VB als Anfängersprache für sinnvoll. Gibt es in Python eigentlich OO? Das Umdenken wäre dann ein größere Hürde die zu nehmen ist ( Zumindest bei mir war das so, als ich zum .Net gewechselt habe ). Wenn Python auch OO kann hab ich nichts gesagt.

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

36

16.10.2012, 12:03

Gibt es in Python eigentlich OO?

ja
es gibt zwar ein paar kleine Besonderheiten, allerdings finde ich nicht, dass diese sich besonders nachteilig auswirken
Beispiele: man hat "Magic Member", mit denen Operatorenüberladung oder die Definition des Konstruktors realisiert werden und man kann keine Methoden überladen
was den Konstruktor angeht ist das sogar fast das gleiche, wie bei anderen Sprachen - er heißt nur nicht wie die Klasse selbst, sondern immer "__init__"

Wenn Python auch OO kann hab ich nichts gesagt.

;)


@Sh4dow:
es dürfte noch eine Weile dauern, bis das für dich relevant sein wird, also ist es auch nicht schlimm, wenn du noch nicht verstehst, was damit gemeint ist ;)

und du solltest in deinem Code nochmal schauen, wo du ein weiteres Mal deine "repeat" Funktion verwenden kannst
an der Stelle hast du das Problem mit dem x == "x" or "X" noch nicht behoben ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige