Forum: PC-Programmierung If schleife in Python


von Marc (Gast)


Lesenswert?

Hi,

ich bin gerade etwas verwirrt. Ich versuche gerade eine Zahl aus der 
Texteingabe in eine kleine if schleife einzubauen. Nur gelinkt es mir 
nicht. Python beendet ohne Fehlermeldung. Wie mache ich das denn 
richtig?
1
print('gebe die Zahl 1 ein')
2
zahlinput= input()
3
print (zahlinput)
4
5
6
if zahlinput == 1:
7
    print('Das war die 1')
8
9
if zahlinput == 2:
10
    print('Und das die 2')

von FloF3000 (Gast)


Lesenswert?

Deine Eingabewerte sind Text (String) - da muessen Anfuehrungszeichen um 
deine Vergleichszahlen.

von ?!? (Gast)


Lesenswert?

Marc schrieb:
> Wie mache ich das denn richtig?

Lies mal hier:
http://www.if-schleife.de/

von Marc (Gast)


Lesenswert?

FloF3000 schrieb:
> Deine Eingabewerte sind Text (String) - da muessen
> Anfuehrungszeichen um
> deine Vergleichszahlen.

Danke

von Korinthenkacker (Gast)


Lesenswert?

> Wie mache ich das denn richtig?

'gib' die Zahl ein,

und damit es Dir 'gelingt'

vermeide if-'Schleifen'

von Kaj (Gast)


Lesenswert?

Marc schrieb:
> Python beendet ohne Fehlermeldung.
Ist ja auch kein Fehler aufgetreten.

Marc schrieb:
> Wie mache ich das denn richtig?
Dir erstmal ein Buch besorgen, z.B.: 
http://www.amazon.de/Python-umfassende-Sprachgrundlagen-Objektorientierung-Modularisierung/dp/3836236338/ref=sr_1_1?ie=UTF8&qid=1455654879&sr=8-1&keywords=Python

Marc schrieb:
> if schleife
Woher hast du diese Begrifflichkeit? So etwas gibt es nicht!

Marc schrieb:
> print('gebe die Zahl 1 ein')
> zahlinput= input()
> print (zahlinput)
Das machst du zu:
1
zahlinput = input('Gib die Zahl 1 ein: ')

Marc schrieb:
> if zahlinput == 1:
>     print('Das war die 1')
>
> if zahlinput == 2:
>     print('Und das die 2')
Du hast jetzt 2 möglichkeiten: String- oder Integervergleich:
1
# Stringvergleich:
2
if zahlinput == '1':
3
    print('Das war die 1')
4
5
if zahlinput == '2':
6
    print('Und das die 2')
7
8
# oder Intergervergleich
9
if int(zahlinput) == 1:
10
    print('Das war die 1')
11
12
if int(zahlinput) == 2:
13
    print('Und das die 2')

Und von einer Schleife sehe ich da nichts...

Halbwegs richtig sieht dein Script so aus:
1
#!/usr/bin/env python3
2
3
def main():
4
    zahlinput = input('Gib die Zahl 1 ein: ')
5
    if zahlinput == '1':
6
        print('Das war die 1')
7
8
    elif zahlinput == '2':
9
        print('Und das die 2')
10
11
    else:
12
        print('Die Eingabe war: %s' % (zahlinput))
13
  
14
    print('Ende von main. Script wird beendet.')
15
16
17
if __name__ == '__main__':
18
    main()
Ob man eine main-Funktion definiert ist geschmackssache. Und über die 
Formatformatierung mit %s im print kann man auch streiten.

von root (Gast)


Lesenswert?

>ich bin gerade etwas verwirrt. Ich versuche gerade eine Zahl aus der
>Texteingabe in eine kleine if schleife einzubauen. Nur gelinkt es mir
>nicht. Python beendet ohne Fehlermeldung. Wie mache ich das denn
>richtig?

if-Schleifen gibt es nicht ;-)
Wenn schon, dann if-Treppen .. ok, ja
1
Daniel@dellPC /home/Daniel
2
$ cat > test.py <<EOF
3
> print('gebe die Zahl 1 ein')
4
> zahlinput= input()
5
> print (zahlinput)
6
>
7
>
8
> if zahlinput == 1:
9
>     print('Das war die 1')
10
>
11
> if zahlinput == 2:
12
>     print('Und das die 2')
13
> EOF
14
15
Daniel@dellPC /home/Daniel
16
$ chmod 755 test.py
17
18
Daniel@dellPC /home/Daniel
19
$ python ./test.py
20
gebe die Zahl 1 ein
21
1
22
1
23
Das war die 1

dein Code ist ok.
Das Problem liegt woanders.
Wie rufst das Program auf?
Keine shebang Zeile?

Entgegen den Postings oben, liefert input() keinen string zurück.
Das tut raw_input()
1
>>> type(input())
2
1
3
<type 'int'>
4
>>> type(raw_input())
5
1
6
<type 'str'>

1
help(input)
2
Help on built-in function input in module __builtin__:
3
4
input(...)
5
    input([prompt]) -> value
6
7
    Equivalent to eval(raw_input(prompt)).
1
Help on built-in function raw_input in module __builtin__:
2
3
raw_input(...)
4
    raw_input([prompt]) -> string
5
6
    Read a string from standard input.  The trailing newline is stripped.
7
    If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
8
    On Unix, GNU readline is used if enabled.  The prompt string, if given,
9
    is printed without a trailing newline before reading.
10
(END)

von Lukas K. (carrotindustries)


Lesenswert?

root schrieb:
> Entgegen den Postings oben, liefert input() keinen string zurück.
> Das tut raw_input()

Kommt drauf an. In python 3 gibt input() nen string zurück, wie 
raw_input() in 2.7.

von Kaj (Gast)


Lesenswert?

root schrieb:
> Entgegen den Postings oben, liefert input() keinen string zurück.
Da der TO Input benutzt, und der vergleich mit einem int nicht 
funktioniert, würde ich diese aussage nochmal überdenken... ;)

Lukas K. schrieb:
> Kommt drauf an. In python 3 gibt input() nen string zurück, wie
> raw_input() in 2.7.
So siehts nämlich aus!

von root (Gast)


Lesenswert?

Kaj schrieb:
> root schrieb:
>> Entgegen den Postings oben, liefert input() keinen string zurück.
> Da der TO Input benutzt, und der vergleich mit einem int nicht
> funktioniert, würde ich diese aussage nochmal überdenken... ;)
>
> Lukas K. schrieb:
>> Kommt drauf an. In python 3 gibt input() nen string zurück, wie
>> raw_input() in 2.7.
> So siehts nämlich aus!

ich hatte die Möglichkeit der Inkompatibilität in Erwägung gezogen,
hatte jedoch keine Python3 Installation aktuell auf dem Rechner.
So kann man sich täuschen ;-)

Ist raw_input in Python3 verschwunden?
War das böse versteckte eval als Sicherheitslücke der eigentliche Grund
für die Änderung gewesen?
1
input()
2
os.system("rm somefile")

von Kaj (Gast)


Lesenswert?

root schrieb:
> Ist raw_input in Python3 verschwunden?
https://docs.python.org/3/whatsnew/3.0.html#builtins
1
PEP 3111: raw_input() was renamed to input(). That is, the new input()
2
function reads a line from sys.stdin and returns it with the trailing
3
newline stripped. It raises EOFError if the input is terminated
4
prematurely. To get the old behavior of input(), use eval(input()).

von Robert (Gast)


Lesenswert?

Kaj schrieb:
> #!/usr/bin/env python3
>
> def main():
>     zahlinput = input('Gib die Zahl 1 ein: ')
>     if zahlinput == '1':
>         print('Das war die 1')
>
>     elif zahlinput == '2':
>         print('Und das die 2')
>
>     else:
>         print('Die Eingabe war: %s' % (zahlinput))
>
>     print('Ende von main. Script wird beendet.')
>
> if _name_ == '__main__':
>     main()



Hi, ich habe etwas ähnliches und googgel hat diesen Beitrag gefunden.

Wie müsste dieses Beispiel aussehen, wenn eine Falscheingabe gemacht 
wurde das es wieder von vorne beginnt?

von Kaj (Gast)


Lesenswert?

1
#!/usr/bin/env python3
2
3
def main():
4
    condition = False
5
    while condition is False:
6
        zahlinput = input('Gib die Zahl 1 ein: ')
7
        if zahlinput == '1':
8
            print('Das war die 1')
9
            condition = True
10
11
        elif zahlinput == '2':
12
            print('Und das die 2')
13
            condition = True
14
15
        else:
16
            print('Die Eingabe war: %s' % (zahlinput))
17
  
18
    print('Ende von main. Script wird beendet.')
19
20
21
if __name__ == '__main__':
22
    main()
Nur eine von vielen moeglichkeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.