Probleme bei print(input1 + input2) in KomodoEdit 6.2

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
Jasmina
User
Beiträge: 10
Registriert: Sonntag 4. November 2012, 15:05

Hallo zusammen,

das ist mein erster Programmierkurs überhaupt und ich versuch mich gerade in Python reinzudenken.
Ich habe die Version 3.3 auf meinem Windows-Rechner installiert und benutze als Editor KomodoEdit 6.2.

Es geht darum, dass ich zwei inputs habe und die anschließend miteinander verbinden will. Ich zeig einfach mal mein Beispiel, damit es etwas deutlicher wird worum es geht:

#Das Ehepaar Child
Ehepaar_Child_wife = input("Enter the wife's name: ")
Ehepaar_Child_husband = input("Enter the husband's name: ")
Enter the wife's name: Julia
Enter the husband's name: Paul

#bis hierher klappt alles wunderbar. Jetzt möchte ich allerdings beide miteinander verbinden. Ich habe es so versucht:
print (Ehepaar_Child_wife +" and "+ Ehepaar_Child_husband)
Julia and Enter the husband's name: Paul

#eigentlich sollte Julia and Paul rauskommen. Wenn ich genau das alles genau gleich direkt in die Kommando-Zeile von Python eingebe, dann kommt das richtige Ergebnis raus.
>>>print (Ehepaar_Child_wife +" and "+ Ehepaar_Child_husband)
Julia and Paul

Ich habe keine Ahnung, was ich machen soll :K

Es wäre super, wenn ihr mir helfen könntet. Vielleicht kennt ja jemand das Problem.
Vielen lieben Dank :!:

Beste Grüße
BlackJack

@Jasmina: Das Ergebnis kann einfach nicht sein. Ich vermute mal Du hast hier nicht den Quelltext gezeigt, den Du auch tatsächlich ausgeführt hast.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen im Forum und zu Python!

Mal ins Blaue: Kann es sein, dass du mit KomodoEdit Python 2 verwendest und auf der Kommandozeile explizit python3 gestartet hast?

Ansonsten: Zeige uns bitte den kompletten Traceback.
Benutzeravatar
pyFan
User
Beiträge: 22
Registriert: Sonntag 4. Januar 2009, 15:44

@Cofi:

> Zeige uns bitte den kompletten Traceback.

Da muss man erst mal wissen, was das ist... :-)

@Jasmina:

Kannst Du den Bildschirm mit einer Kamera abfotografieren und uns
das Bild (Screenshot) zusenden? Es gibt da oben einen "Img"-Button.
Ein Bild sagt oft mehr als 1000 Worte.

Gruss

PyFan
BlackJack

@pyFan: Lesen sollte man schon können und zumindest soweit denken, dass wenn nach einem kompletten Traceback gefragt wird, sehr wahrscheinlich all der Text gemeint ist, der mit dem Wort „Traceback” beginnt.


@pyFan & @Jasmina: Bitte jetzt nicht mit Bildschirmfotos von *Text* anfangen. Den kann man auch als Text kopieren und einfügen.

@pyFan: Bildschirmfoto mit einer *Kamera*‽ :shock: Ernsthaft‽
Benutzeravatar
pyFan
User
Beiträge: 22
Registriert: Sonntag 4. Januar 2009, 15:44

@BlackJack

> Bildschirmfoto mit einer *Kamera*‽

Ja, schon 100x mit Kunden erprobt...

falls das Betriebsystem Windows 7 ist, geht auch das Snipping Tool:
Start -> alle Programme -> Zubehör -> Snipping Tool
-> den ganzen Bildschirm auswählen und als PNG-Datei abspeichern.

Wie gesagt, ein Bild sagt mehr als 1000 Worte.

> Lesen sollte man schon können und zumindest soweit denken...

Du hast ein Emphathie-Defizit.

Gruss

PyFan
BlackJack

@pyFan: Das man das mit nicht technikaffinen Kunden machen kann ist kein Grund so einen Unsinn mit Leuten zu veranstalten die Programmieren lernen wollen. Und selbst bei erwähnten Kunden: Dort schlägt man nicht ernsthaft vor ein Foto mit der Kamera zu machen wenn man sie alternativ auch bitten kann per kopieren und einfügen den Text zu übertragen.

Man kann auch mit diversen Tastenkombinationen mit der „Druck”-Taste einen Schnappschuss des kompletten Bildschirms und des aktiven Fensters in die Zwischenablage kopieren. Das geht IIRC schon seit Windows 3.1.

Aber ein Bild sagt nur dann mehr als 1000 Worte wenn es nicht ein Bild von Text mit deutlicher weniger Worten ist, die man auch als Text kopieren könnte. Nur weil die Speichermenge grösser ist muss nicht automatisch mehr Information enthalten sein.

Ich sage das noch nicht mal nur weil ich das für eine kolossale Speicherverschwendung halte, sondern weil es Fragestellern eher weniger hilft Quelltext als Bilder zu veröffentlichen, den dann niemand ausprobieren kann ohne ihn abzutippen. Was *ich* sicher nicht machen werde (obwohl ich hier neulich in einer ähnlichen Situation OCR-Software verwendet hatte :-)).

Weil Du den Leuten unterstellst zu dumm zum Lesen zu sein, habe ich ein Empathie-Defizit‽ Ich gehe davon aus, dass wenn man jemanden sagt er solle nicht nur die letzte Zeile sondern den ganzen Traceback zeigen, er in der Lage ist herauszufinden was das ist wenn er sich die Fehlermeldung noch einmal anschaut. Die meisten lesenden, denkenden Menschen werden dann von der letzten Zeile ausgehend irgendwo weiter oben das Wort „Traceback” entdecken.

Andererseits erwarte ich vielleicht zu viel. Wenn alle lesen könnten, würde ja keiner nach einem Traceback fragen den es nicht gibt. Jedenfalls nicht laut Fragestellung. Da kommt einfach ein falsches Ergebnis heraus. Und zwar eines was 99,999%ig nicht mit dem gezeigten Quelltext entstehen kann. Ich lasse jetzt mal die 0,001%ige Chance zu, dass es da einen Hintergrundthread gibt, der genau zwischen den beiden Codezeilen für die Benutzereingabe die eingebaute `input()`-Funktion durch eine Identitätsfunktion ersetzt. ;-)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Jasmina hat geschrieben:print (Ehepaar_Child_wife +" and "+ Ehepaar_Child_husband)
Julia and Enter the husband's name: Paul
Das schreit danach, dass die Codezeile nicht so aussieht wie gezeigt sondern eher wie folgt:

Code: Alles auswählen

print ("Ehepaar_Child_wife +" and "+  Ehepaar_Child_husband")
Bitte verwende immer Copy & Paste um Code und Fehlermeldungen ins Forum einzustellen, da sonst schon einmal Sachen verloren gehen können oder unvollständig sind.
Jasmina
User
Beiträge: 10
Registriert: Sonntag 4. November 2012, 15:05

Da hab ich ja eine Diskussion losgetreten. Wahnsinn. Okay, also so hab ich das in Komodo eingegeben.

Code: Alles auswählen

#erste eigene Versuche mit Python am Film Julie and Julia

Film = "Julie and Julia"
Meryl_Streep = "Julia Child"
Amy_Adams = "Julie Powell"
Stanley_Tucci = "Paul Child"
Chris_Messina = "Eric Powell"

#print (Meryl_Streep)

#Das Ehepaar Child
Ehepaar_Child_wife = input("Enter the wife's name: ")           #funktioniert
Ehepaar_Child_husband = input("Enter the husband's name: ")     #funktioniert

print (Ehepaar_Child_wife +" and "+  Ehepaar_Child_husband)
Ein ähnliches Problem bietet sich bei:

Code: Alles auswählen

Vorname = input("Bitte geben Sie Ihren Vornamen ein: ")
Nachname = input("Bitte geben Sie Ihren Nachnamen ein: ")
print (len(Vorname))
print (len(Nachname))
Nimmt man bspw. den Vornamen "Meryl" und den Nachnamen "Streep", dann druckt er mir:

Code: Alles auswählen

Bitte geben Sie Ihren Vornamen ein: Meryl
Bitte geben Sie Ihren Nachnamen ein: Streep
5 # stimmt von der Zeichenanzahl
43 # hier rechnet er alle Zeichen von "Bitte geben Sie Ihren Nachnamen ein: Streep" und kommt dann auf die 43
BlackJack

@Jasmina: Und wenn man das laufen lässt, passiert das hier:

Code: Alles auswählen

bj@s8n:~$ python3 forum4.py
Enter the wife's name: Julia
Enter the husband's name: Paul
Julia and Paul
Wenn da bei Dir etwas anderes bei der Eingabe von `Julia` und `Paul` heraus kommt, dann kann es nicht der Quelltext gewesen sein.

Das Leerzeichen zwischen `print` und der öffnenden Klammer würde ich weglassen. Das sieht komisch aus. Hast Du bei `input` ja auch nicht gemacht, und man macht üblicherweise auch keins vor Klammern die einen Aufruf darstellen.

Bezüglich Form des Quelltextes und auch der Schreibweise von Namen kannst Du mal einen Blick in PEP 8 -- Style Guide for Python Code werfen.
Benutzeravatar
pyFan
User
Beiträge: 22
Registriert: Sonntag 4. Januar 2009, 15:44

Hallo Jasmina,

kopiere doch mal folgendes in eine Datei:

Code: Alles auswählen

# -*- coding: utf-8 -*-
# Test Stringeingabe

# Definition einer Subroutine für Texteingabe
def myinput(anforderung):
    return input(anforderung) # -> gibt einfach den eingegebenen Text zurück

# hier startet das Programm
vorname=myinput("Bitte geben Sie Ihren Vornamen ein: ")
nachname=myinput("Bitte geben Sie Ihren Nachnamen ein: ")

# Ausgabe
print("der vollständige Name:",vorname,nachname)

#
print(len(vorname),len(nachname))
funktioniert das?

Gruss

Pyfan
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

Also ich bin ja für confi's Vermutung.
cofi hat geschrieben:Kann es sein, dass du mit KomodoEdit Python 2 verwendest und auf der Kommandozeile explizit python3 gestartet hast?
Alles andere wäre schwarze Magie :lol:
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
BlackJack

Das würde bei dem gezeigten Quelltext auch in Python 2 nicht passieren. Dort würde man schon beim ersten `input()` für die Eingabe 'Julia' (ohne Anführungszeichen) einen Programmabbruch wegen einem `NameError` bekommen.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich kenn zwar die Komodo-IDE nicht, aber für mich sieht es so aus, als ob der
output- und input-stream der integrierten Kommandozeile ein Timing-Problem haben,
dass also der input vor der Ausgabe des Textes "Bitte geben..." aktiv ist.

@Jasmina: Kannst Du den Prompt mit <-- löschen?

Grüße
Sirius
Jasmina
User
Beiträge: 10
Registriert: Sonntag 4. November 2012, 15:05

Hallo zusammen,

hab erst heute wieder geschafft mich meinem Problem zu widmen.

@pyFan: das funktioniert leider nicht.

@Sirius 3: Sorry, aber ich hab keine Ahnung was du mit: Kannst Du den Prompt mit <-- löschen? meinst. Wie müsste ich das machen?

Bei meinem Komodo läuft Python 3.

Ich habe heute mal Folgendes probiert:

Code: Alles auswählen

Ehepaar_Child_wife = input("Please enter the wife's name: ")
print (Ehepaar_Child_wife)
Ehepaar_Child_husband = input("Please enter the husband's name: ")
print (Ehepaar_Child_husband)
print (Ehepaar_Child_wife +" and "+ Ehepaar_Child_husband)
print (Ehepaar_Child_husband +" and "+ Ehepaar_Child_wife)
und heraus kam

Code: Alles auswählen

Please enter the wife's name: Julia
Julia
Please enter the husband's name: Paul
Paul
Julia and Paul
Paul and Julia
Wenn ich allerdings folgende zwei Schritte deaktiviere, dann gibt es wieder das alte Problem:

Code: Alles auswählen

Ehepaar_Child_wife = input("Please enter the wife's name: ")
#print (Ehepaar_Child_wife)
Ehepaar_Child_husband = input("Please enter the husband's name: ")
#print (Ehepaar_Child_husband)
print (Ehepaar_Child_wife +" and "+ Ehepaar_Child_husband)
print (Ehepaar_Child_husband +" and "+ Ehepaar_Child_wife)

Code: Alles auswählen

Please enter the wife's name: Julia
Please enter the husband's name: Paul
Julia and Please enter the husband's name: Paul
Please enter the husband's name: Paul and Julia
Ich versteh's nicht. Bei einem Freund funktionierte das, was ich ganz am Anfang eingegeben hatte, sofort.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Das macht keinen Sinn.
Der von dir aufgezeigte Unterschied, nämlich das auskommentieren der beiden Print-Anweisungen, kann den entsprechenden Effekt nicht haben. Wobei ich davon ausgehe, dass du eine nicht veränderte Version von CPython verwendest.
Ich könnte mir vorstellen, dass deine IDE Mist mit stdin und stdout macht. Dann solltest du sie schlicht nicht benutzen.
BlackJack

@Jasmina: Dann würde ich jetzt mal auf die IDE als Problem tippen wenn Du das von dort oder darin ausführst. Lass die doch zum Ausführen einfach mal weg.
Jasmina
User
Beiträge: 10
Registriert: Sonntag 4. November 2012, 15:05

Das Problem hat sich geklärt. Ich habe Komodo neu installiert mit der Version Komodo 7. Nun funktionierts. Wahrscheinlich verträgt sich Python 3 einfach nicht mit vorherigen Komodo Versionen. Die Lösung kann manchmal so einfach sein, aber man sieht sie einfach nicht.

Trotzdem vielen Dank, dass ihr euch so viel Gedanken drum gemacht habt. :!:
Antworten