<pyshell#0> und input() / int()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DarthKai1989
User
Beiträge: 3
Registriert: Donnerstag 8. Juli 2021, 13:27

Durch meine Ausbildung befasse ich mich seit dieser Woche mit Python und lern mir diese selbstständig.

Meist mach ich Fehler, weil ich iwie nicht verstehe, wann man

x = input()
zahl = int(x)

verwendet und wann man die trennen muss z.B.:

print("bla")
z = input()

try:
zahl = int(z)

Warum kann man das nicht gleich unter einander schreiben? Das versteh ich iwie nicht.

Ebenso hab ich gerade ein kleines Programm geschrieben (nichts besonderes aber für Übung) die ist wie folgt:

def quadrat(x):
q = x*x
print("Zahl:", x, "Quadrat:", q)

quadrat(4.5)
a = 3
quadrat(a)
quadrat(2*a)


Da haut er aber raus:
= RESTART: C:/Users/xyz/AppData/Local/Programs/Python/Python39-32/funktion_einfach.py

und wenn ich dann z.B. a eingebe sagt er:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
a
NameError: name 'a' is not defined

aber a ist doch mit 3 deklariert. Warum sagt er dann, dass das nicht definiert ist.

ich benutze IDLE Shell 3.9.6 und Python 3 mit ner 32Bit version

LG :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte in Zukunft code in code-tags posten. Das ist der </>-Knopf im vollstaendigen Editor.

Zu deiner ersten Frage: du musst das nie trennen. Du musst nur entscheiden, ob du mit Fehleingaben (die einen ValueError ausloesen, den man mit try/except abfangen kann) umgehen willst, und den Benutzer erneut um eine Eingabe bitten. Oder ob dein Programm dann einfach abschmieren soll. Wenn ersteres, ja, dann musst du das eben programmieren. Wie alles, was ein Programm koennen soll.

Und dein a ist eine Funktions-lokale Variable. Es waere doch eine totale Katastrophe, wenn dieser Name im ganzen Interpreter zu sehen (und damit auch zu aendern) waere. Dann schreibe ich eine Funktion "kubik", die benutzt auch a, und alles geht kaputt.

Was du wahrscheinlich wirklich willst, ist, dein a und deine Aufrufe von quadrat(...) auf die oberste Ebene zu ziehen. Du solltest ein Grundlagentutorial zu Python durcharbeiten, denn dass die Einrueckungstiefe in Python sehr wichtig ist, sollte da vermittelt werden.

Code: Alles auswählen

def quadrat(x):
    a = x ** 2
    return a
    
quadrat(10)
DarthKai1989
User
Beiträge: 3
Registriert: Donnerstag 8. Juli 2021, 13:27

@_deets_ ich danke dir schon mal für deine Antwort!
Ab sofort werde ich in code-tags posten.

Ich lerne momentan mit einem Buch und gebe zeitgleich alles so ein wie es im Buch steht und schau dann wie es in IDLE übermittelt wird.
Dies was ich oben gepostet habe stammen direkt aus dem Buch. Also so wie ich es jetzt verstanden habe, wenn ich x = input() trennen würde, dann macht er weiter mit der Aufgabe und wenn ich sie zusammen stehen lasse, dann bricht das Programm ab. Ist das so richtig?
Die Intention dahinter war, dass das Programm nicht abbricht ;)

Und zu dem anderen:
Es stand ebenfalls so als Lösung im Buch drinnen. Dann bin ich doch überrascht. Wenn ich diese lokale Funktionsvariable zu einer globalen Funktionsvariable abänder, würde dann IDLE was ausspucken?

LG
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Also so steht es bei dir, mit code-tags:

Code: Alles auswählen

def quadrat(x):
    q = x*x
    print("Zahl:", x, "Quadrat:", q)

    quadrat(4.5)
    a = 3
    quadrat(a)
    quadrat(2*a)
    
Das ist ganz offensichtlich falsch, denn man will ja Quadrat definieren. Und danach aufrufen. Statt eine Rekursion auszuloesen. Und ich bin mir ziemlich sicher, dass es im Buch so steht:

Code: Alles auswählen

def quadrat(x):
    q = x*x
    print("Zahl:", x, "Quadrat:", q)

quadrat(4.5)
a = 3
quadrat(a)
quadrat(2*a)
Wenn das nicht so ist, dann ist das ein so grober Schnitzer, dass du das Buch wegwerfen solltest. Und einfach mal das Tutorial auf Python.org durcharbeiten. Das stimmt wenigstens, und ist von Leuten geschrieben, die die Sprache kennen.
DarthKai1989
User
Beiträge: 3
Registriert: Donnerstag 8. Juli 2021, 13:27

@__deets__

omg ich danke dir vielmals ! jetzt weiß ich auch was der Fehler war. Ja du hast natürlich vollkommen recht. und so stehts auch im Buch, ABER...
bis zu "print..." stand es auf der einen Seite und dann musste ich umblättern und da hab ich nicht gesehen, dass da kein TAB mehr dabei ist!!

jetzt hat es auch funktioniert. Danke dir :)
Antworten