Python String zu 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
LeonEtienne
User
Beiträge: 1
Registriert: Freitag 13. März 2015, 18:11

Hallo. Ich bin noch ein blutiger Anfänger mit Python. Ich wollte ein Programm machen, in welches man am Anfang eine Zahl eingeben soll, und dann listet das Programm alle zahlen auf.
Aber irgendwie kommt nachdem man die Zahl eingibt dieser Error: :K

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\PC REMOTE\Desktop\Programm.py", line 4, in <module>
    while i <= x:
TypeError: unorderable types: int() <= str()
Hier ist mein Quelltext:

Code: Alles auswählen

x = input('Zahl: ')
float(x)
i = 1
while i <= x:
    print(i)
    i+=1
input()
Ich habe es schon mit

Code: Alles auswählen

float(x)
oder

Code: Alles auswählen

int(x)
und sogar

Code: Alles auswählen

 int(float(x))
Bite um hilfe!

Lösung:

Code: Alles auswählen

x = int(input('text'))
Zuletzt geändert von LeonEtienne am Freitag 13. März 2015, 19:55, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Durch Aufruf von int oder float wird aus einem String nicht auf magische Weise ein Integer, bzw. Float. Du suchst

Code: Alles auswählen

x = float(x)
Die while-Schleife ist an dieser Stelle die falsche Wahl. Wenn du vorher weißt wie oft eine Schleife durchlaufen wird, dann solltest du eine for-Schleife verwenden. Dann sparst du dir auch das händische Hochzählen von i.
Das Leben ist wie ein Tennisball.
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

x = int(input('Zahl'))
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
ulli82
User
Beiträge: 8
Registriert: Freitag 20. Februar 2015, 21:32

x = int(input('Zahl: '))
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Schau mal, ob du meinen Quelltext verstehst:

Code: Alles auswählen

print("Eingabe x zum Beenden!")

while True:
    
    x = input('Zahl: ')
    
    if x == "x":
        print("Sie haben das Programm beendet!")
        break
    else:
        x = int(x)
    
    for i in range(1, x + 1):
        
        print(i)
Ich habe den Verdacht, dass du Programme nicht direkt aus IDLE aus startest, was mit F5 geht. Wenn du die Programme in der Konsole startest, dann verlangsamt das deine Entwicklungszeit (bei der Fehlersuche, zumindest ist das meine Erfahrung).
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

So geht es auch ...

Code: Alles auswählen

for k in range(1, int(input("Zahl: "))+1):
    print(k)
... ohne error test.
Atomkraftwerkaktienbesitzer
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Weiß nicht, ob das so (für ihn) noch lesbar ist.
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ene Uran: für mich ist das auch nicht mehr lesbar, weil hier zu viel Eingabe mit Verarbeitungslogik vermischt wird.
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Wenn das hier python3 ist. Wenn schon ,denn schon...

Code: Alles auswählen

[print(k) for k in range(1, int(input("Zahl: "))+1)]
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Pygoscelis papua: und was fängst Du mit der Liste, in der lauter None stehen an?
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Was ich damit anfange? Ich frage mich woher sie kommt! :)

man könnte allerdings folgendes tuen:

Code: Alles auswählen

b = list()
[ b.append(k) for k in range(1, int(input("Zahl: "))+1) ]
print(b)
Damit wärs aber auch nicht kürzer.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das ist noch immer eine Liste voller Nones. Wenn du die ks sammeln willst, dann kannst du das auch gleich in der List Comprehension machen:

Code: Alles auswählen

[k for k in range(1, int(input("Zahl: "))+1) ]
das ist aber nichts anderes als

Code: Alles auswählen

list(range(1, int(input("Zahl: "))+1))
Allerdings möchte man in diesem Fall gar keine List Comprehension verwenden. Die sind dazu da um Listen zu erzeugen, keine kurze Variante für for-Schleifen. Wenn du das Ergebnis einer LC nicht verwendest, dann verwende keine LC, sondern eine echte for-Schleife.
Das Leben ist wie ein Tennisball.
Antworten