Hallo
BIn grad neu bei ich ins Forum gestoßen, hab mit aber schon 2-3 dinge hier durchgelesen und die Suchfunktion benutzt, aber zu meinem Problem keine Lösung gefunden.
1.: Wie lässt man unter Vista die Konsole offen ? ist das möglich ?
2.: Kann es sein, dass .pyw nicht unter Windows Vista 64 startet ? Ich kriege nur die normalen mit der konsole .py gestartet.
3.: Nun zu was Interesantes :
Ich hab mich entschieden Eclipse zu benutzen. Hab das mit PyDev auch gut hinbekommen, es gibt aber einen ganz merkwürdigen Fehler :
Ziel : Ich will ein Tupel eingeben und mit denen dann was errechnen.
Unter IDLEE hab ich es folgendermaßen gelöst bekommen :
(a, b, c) = eval(input("Datum: "))
y = c - (14 - b) // 12
x = y + y // 4 - y //100 + y // 400
m = b +12 * ((14 - b) //12) - 2
d = (a + x + (31 * m ) //12) % 7
Unter Eclipse bekomme ich aber mit genau dem gleichen code folgende Fehlermeldung : unexpected EOF while parsing
Wenn ich hingegen den Code folgendermaßen ändere (jede eingabe einzeln mache), dann geht es auch unter Eclipse.
a = int ( input("Tage ="))
b = int ( input("Monate ="))
c = int ( input("Jahre ="))
y = c - (14 - b) // 12
x = y + y // 4 - y //100 + y // 400
m = b +12 * ((14 - b) //12) - 2
d = (a + x + (31 * m ) //12) % 7
Kann mir jemand sagen, warum das bei dem einen geht und bei dem anderen nicht ? hat jemand nen lösungvorschlag ?
Ziel ist halt die Implementierung MIT Tupel.
MFG
HERO2
ein paar Anfängerfragen zu Python
Die Sprache heisst Python und nicht Pyton wie in der Überschrift von Deinem Beitrag.
1. Starte das Skript in einer offenen Konsole, dann bleibt die auch offen. Alles andere ist IMHO keine gute Idee.
3. Vergiss `eval()`. Da kann der Anwender beliebige Ausdrücke eingeben, die ausgeführt werden. Das ist ein Sicherheitslücke und selbst wenn der Anwender nichts böses will, ist es schwer mit falschen Eingaben umzugehen.
Wenn Du die Teile nicht einzeln eingeben lassen willst, dann schreib Dir eine Funktion die ein Datum parsen kann.
Du solltest Dir gleich vernünftige Namen angewöhnen. `a`, `b`, und `c` sind das in diesem Kontext ganz bestimmt nicht.
Von PyDev würde ich zum ausprobieren von Konsolenanwendungen Abstand nehmen, denn da gibt's immer mal wieder mal wieder Probleme weil sich die "Konsole" in Eclipse nicht so verhält wie eine Echte.
1. Starte das Skript in einer offenen Konsole, dann bleibt die auch offen. Alles andere ist IMHO keine gute Idee.
3. Vergiss `eval()`. Da kann der Anwender beliebige Ausdrücke eingeben, die ausgeführt werden. Das ist ein Sicherheitslücke und selbst wenn der Anwender nichts böses will, ist es schwer mit falschen Eingaben umzugehen.
Wenn Du die Teile nicht einzeln eingeben lassen willst, dann schreib Dir eine Funktion die ein Datum parsen kann.
Du solltest Dir gleich vernünftige Namen angewöhnen. `a`, `b`, und `c` sind das in diesem Kontext ganz bestimmt nicht.
Von PyDev würde ich zum ausprobieren von Konsolenanwendungen Abstand nehmen, denn da gibt's immer mal wieder mal wieder Probleme weil sich die "Konsole" in Eclipse nicht so verhält wie eine Echte.
Danke für die schnelle Antwort. und sorry für den Rechtschreibfehler. Hab da ne große schweche ....
1.: Gut da kann man dann nicht's machen danke.
3.: Ja mit den namen hast du recht. Das Programm habe ich aber spät abends geschrieben und mir ist erst später aufgefallen, dass nen fehler in der Berechnung war, deswegen musste ich es nochmal ändern, deswegen a,b,c, ansonten haste aber recht.
Gut das mit der Konsole werd ich mmir merken.
Nun nochmal 1 fragen die mir bei deinem Post gekommen sind :
Ich kann in eclipse gar keine Tuper eingeben. Selbst wenn ich sozusagen nur sowas mache :
(d,x) = int (input("d,x : "))
print (d,x)
bekomme ich nur die Fehlermeldung : ValueError: invalid literal for int() with base 10: '2,3 '
Leigt das echt an eclipse, oder habe ich was falsch eingestellt dort ?
MFG
ALIAS
1.: Gut da kann man dann nicht's machen danke.
3.: Ja mit den namen hast du recht. Das Programm habe ich aber spät abends geschrieben und mir ist erst später aufgefallen, dass nen fehler in der Berechnung war, deswegen musste ich es nochmal ändern, deswegen a,b,c, ansonten haste aber recht.
Gut das mit der Konsole werd ich mmir merken.
Nun nochmal 1 fragen die mir bei deinem Post gekommen sind :
Ich kann in eclipse gar keine Tuper eingeben. Selbst wenn ich sozusagen nur sowas mache :
(d,x) = int (input("d,x : "))
print (d,x)
bekomme ich nur die Fehlermeldung : ValueError: invalid literal for int() with base 10: '2,3 '
Leigt das echt an eclipse, oder habe ich was falsch eingestellt dort ?
MFG
ALIAS
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Weder noch. `2,3` ist eben kein valides Literal für `int`. Übrigens auch nicht für `float`, da Punkte, statt Kommata verwendet werden.Hero2 hat geschrieben:bekomme ich nur die Fehlermeldung : ValueError: invalid literal for int() with base 10: '2,3 '
Leigt das echt an eclipse, oder habe ich was falsch eingestellt dort ?
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Wenn du Python 2.x verwendest, solltest du von "input" genauso die Finger lassen wie von "eval" und Eingaben als String mit "raw_input" lesen.Hero2 hat geschrieben:2,3 sollte meine tupel eingabe sein.
Gebe ich das falsch ein ?
Und diesen String dann verarbeiten. Beispiel:
Code: Alles auswählen
>>> a, b = raw_input('input: ').split(',')
input: 2,3
>>> a
'2'
>>> b
'3'
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Ich würd's (in Python 3.x) so machen:
Stefan
Code: Alles auswählen
print(map(int, input("Tupel (mit Komma getrennt): ").split(",")))
- Goswin
- User
- Beiträge: 363
- Registriert: Freitag 8. Dezember 2006, 11:47
- Wohnort: Ulm-Böfingen
- Kontaktdaten:
Ich benutze 'eval(arith_exp)' in einer meiner GUIs, weil das Parsen und robuste Auswerten von arithmetischen Ausdrücken auch mit der Hilfe vom re-Modul schwer ist und viel Code benötigt. Ich habe es versucht und dann aufgegeben, wobei ich mir dachte, falls der Benutzer Blödsinn eingibt wird Python mir die Arbeit abnehmen, ihn darauf hinzuweisen.BlackJack hat geschrieben:Vergiss `eval()`. Da kann der Anwender beliebige Ausdrücke eingeben, die ausgeführt werden. Das ist eine Sicherheitslücke.
Ist die Sicherheitslücke wirklich so dramatisch?
Ja!
Code: Alles auswählen
def dangerous():
print 'I will destroy you!!!'
instruction = raw_input('...: ')
eval(instruction)
Code: Alles auswählen
~$ python evil.py
...: dangerous()
I will destroy you!!!
Nein ist sie nicht, sofern die Anwendung nur Lokal und mit dem Rechten des aktuell angemeldeten Benutzers ausgeführt wird. Aber verwende so etwas niemals in einer Webanwendung o.Ä.Goswin hat geschrieben:Ist die Sicherheitslücke wirklich so dramatisch?
So ich hab mal noch nen paar fragen .
1.) Wie genau funktionier in Python map ?
In haskell ging : map (*2) [1,2,3]
und man bekam : --> [2,4,6]
In Python krieg ich das nicht initialisiert. kann mir jemand mal das beispiel hier in python sagen ?
2.) Gibt es einen ENDE , STOPP befehl, der das Programm KOMPLETT beendet? Ich hab manschmal mit ner schleife probleme, weil ich sie sozusagen, weiß nicht wie ich es besser ausdrücken kann : doppelt abfragen muss. Das geht auch alles und klapt und ich komm dann in ein definition wo steht :
def zuviel():
print ("Hier endet der lauf")
Ich hab darüber aber noch ne schleife, die nicht richtig endet, deswegen hätte ich unter print gerne sowas wie :
quit, ende,stopp.
Weiß da einer was ?
Ps.: Hab was falsch eingegeben, ich hab das neuste Python 3.1
MFG
Hero2
1.) Wie genau funktionier in Python map ?
In haskell ging : map (*2) [1,2,3]
und man bekam : --> [2,4,6]
In Python krieg ich das nicht initialisiert. kann mir jemand mal das beispiel hier in python sagen ?
2.) Gibt es einen ENDE , STOPP befehl, der das Programm KOMPLETT beendet? Ich hab manschmal mit ner schleife probleme, weil ich sie sozusagen, weiß nicht wie ich es besser ausdrücken kann : doppelt abfragen muss. Das geht auch alles und klapt und ich komm dann in ein definition wo steht :
def zuviel():
print ("Hier endet der lauf")
Ich hab darüber aber noch ne schleife, die nicht richtig endet, deswegen hätte ich unter print gerne sowas wie :
quit, ende,stopp.
Weiß da einer was ?
Ps.: Hab was falsch eingegeben, ich hab das neuste Python 3.1
MFG
Hero2
Code: Alles auswählen
from operator import mul
from functools import partial
double = partial(mul,2)
map(double, (1,2,3))
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@Hero2: Ein Beispiel für `map()` findest Du in den Folien zur ersten Vorlesung auf Seite 42.
Neben ``break`` und ``raise`` kann ``return`` auch manchmal nützlich sein um Schleifen zu verlassen.
Neben ``break`` und ``raise`` kann ``return`` auch manchmal nützlich sein um Schleifen zu verlassen.
@Goswin: Bei lokalen Anwendungen ist das keine Sicherheitslücke. Trotzdem würde ich einen eigenen Parser speziell für arithmetische Ausdrücke implementieren. Python parst mehr als arithmetische Ausdrücke, was für Benutzer verwirrend sein kann, und Python erzeugt nicht immer Fehlermeldungen, die für einen Endbenutzer, der nicht Programmierer ist, akzeptabel sind.
Hallo
ich bins's mal wieder und hab mal wieder ne neue frage :
Ich kann nun ganz gut in phyton programieren, dass was ich aber irgendwie noch gar nicht verstehe ist die Return funktion.
was ist mein Problem : Ich schreib meine Programme immer total verschachtelt. Lösung : Hoffentlich durch euch besseres verständnis der Return funktion.
Unten also mein beispielcode ist nun mal ganz Simpel
Es wird zwar schau aufgerufen, schau wirft mir aber nicht n zurück, obwohl n sogar global ist. Was mache ich falsch ?
Wenn ihr ein besseres, kürzeres beispiel habt für die return funktion, so könnt ihr auch diese nehmen.
MFG
[quote]
ich bins's mal wieder und hab mal wieder ne neue frage :
Ich kann nun ganz gut in phyton programieren, dass was ich aber irgendwie noch gar nicht verstehe ist die Return funktion.
was ist mein Problem : Ich schreib meine Programme immer total verschachtelt. Lösung : Hoffentlich durch euch besseres verständnis der Return funktion.
Unten also mein beispielcode ist nun mal ganz Simpel
Es wird zwar schau aufgerufen, schau wirft mir aber nicht n zurück, obwohl n sogar global ist. Was mache ich falsch ?
Wenn ihr ein besseres, kürzeres beispiel habt für die return funktion, so könnt ihr auch diese nehmen.
MFG
[quote]
Code: Alles auswählen
from random import randrange
def Schau(a,n): # Bekommt ein Zähler und eine Liste
x = randrange(10) # Erzeugt aus 10 zahlen 1 zufällige
if (x in a):
return (n) # gibt den Zähler zurück
else:
a.append(x) # zähler wird erhöt, x wird an die liste gepackt
n = n + 1 # und rekusiv neu aufgerufen
Schau(a,n)
def start():
global n
n = 0
Schau([],n)
print (n)
start ()