Autor Thema: Python 2.7 / 3.x Hilfe und Diskusion  (Gelesen 4346 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Python 2.7 / 3.x Hilfe und Diskusion
« am: 04. Mai 2016, 08:51:25 »
Brauche mal hilfe von Menschen die schon länger mit Python 3.5.1 arbeiten und mir hilfe geben können.

Das erste ist wie kann ich meine Abfrage so bauen das ich für meinen Fehlenden Zahlenwert nicht immer eine 0 eingeben muss? Bis jetzt muss ich immer if(R="0") eingeben, aber ich will das es einfach if(R="") ist um einfach Enter drücken zu können.

Dann suche ich noch ein leichtes Deutsches Tutorial um zu lernen wie ich einfach Grafische Dinge wie normale Programme mit Tkinter und oder auch Geometrie bearbeiten kann bis hin zu meinen eigenen Fraktalen?

mfg  010010

Offline SpiritOfTux

  • Held Mitglied
  • *****
  • Beiträge: 1223
  • Dankeschön: 183 mal
    • https://twitter.com/SpiritOfTux
  • Desktop: KDE Plasma, Deepin
  • Grafikkarte: NVIDIA [GeForce GTX 1060] [GeForce GTX 560 Ti] [GeForce GT 635M]
  • Grafikkartentreiber: On: NB intel/nvidia, HTPC nvidia, PowerWorkStation nvidia
  • Kernel: 4.14.y LTS, 4.9.y LTS,
  • Prozessor: Notebook: Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
  • Skill: Fortgeschritten
  • Zweig: stable 17.1.y on PowerWorkStation, NB, HTPC, Desktop:s: Testing or Unstable only VM
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #1 am: 04. Mai 2016, 09:48:13 »
moin 010010 oder sollte man sagen Hallo CallbyCall - User

Sei so gut und ergänze dein Benutzerprofil, es hilft auch anderen beim Support

Danke
Vielen Dank, dass du diesen Artikel bei uns gelesen hast!  Wir würden uns sehr freuen, wenn du diesen ebenfalls im folgenden Abschnitt bewerten würdest.(Danke sagen) 
Nach hilfreichen Antworten suchen: Manjaro Forum | Manjaro Wiki | Arch Wiki | Arch WiKi on NB/PC : sudo pacman -S arch-wiki-man https://github.com/greg-js/arch-wiki-man#readme

Offline gosia

  • Held Mitglied
  • *****
  • Beiträge: 1470
  • Dankeschön: 282 mal
  • Desktop: Openbox + xfce
  • Grafikkarte: Intel HD 4000
  • Grafikkartentreiber: i915 (free)
  • Kernel: 4.19 Artix
  • Prozessor: Intel Core i5-3210M
  • Skill: Durchschnitt
  • Zweig: stable
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #2 am: 04. Mai 2016, 12:12:33 »
Hallo 010010,
Das erste ist wie kann ich meine Abfrage so bauen das ich für meinen Fehlenden Zahlenwert nicht immer eine 0 eingeben muss? Bis jetzt muss ich immer if(R="0") eingeben, aber ich will das es einfach if(R="") ist um einfach Enter drücken zu können.
Ich verstehe nicht ganz, was Du möchtest. Geht es darum, zu verhindern, daß bei Eingaben nur Return gedrückt wird (ohne eine Wert anzugeben)?
Da könnte eine Ausnahmebehandlung weiterhelfen:
http://www.python-kurs.eu/python3_ausnahmebehandlung.php
Dann suche ich noch ein leichtes Deutsches Tutorial um zu lernen wie ich einfach Grafische Dinge wie normale Programme mit Tkinter und oder auch Geometrie bearbeiten kann bis hin zu meinen eigenen Fraktalen?
Mein Lieblingstutorial ist das hier:
http://www.python-kurs.eu/python_tkinter.php
Übrigens finde ich die übrigen Tutorials auf dieser Seite auch als sehr hilfreich, besonders wenn man wie ich, auch deutschsprachige Seiten bevorzugt.

Viele Grüße und herzlich willkommen hier im Forum
gosia
"funktioniert nicht" ist keine brauchbare Fehlermeldung

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #3 am: 05. Mai 2016, 09:53:15 »
SpiritofTux ich habe jetzt mal etwas geändert, aber ich weiß nicht ob es jetzt besser ist.

if U1==0:
   U1=U2*N1/N2
   print(U1)

gosia
So sieht das bei mir im berechnen aus und es geht auch leider nicht anders. Mit [  U1!="":  ] macht der das auch nicht und viele andere möglichkeiten gehen auch nicht. Hab alle möglichen Zeichen für lehres Feld verwendet, aber der will nur die 0 als Leer im Zahlenwert benutzen. Als eingabe benutze ich ja  eval(input("U1="))  damit ich sehe welchen Wert ich eingeben, aber wenn ich das normale input() nehme ist es ja dierekt als String deklariert und unbrauchbar für die Elektrotechnik.

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #4 am: 05. Mai 2016, 09:53:48 »
Ach ja und danke für die Links.   ;)

Offline gosia

  • Held Mitglied
  • *****
  • Beiträge: 1470
  • Dankeschön: 282 mal
  • Desktop: Openbox + xfce
  • Grafikkarte: Intel HD 4000
  • Grafikkartentreiber: i915 (free)
  • Kernel: 4.19 Artix
  • Prozessor: Intel Core i5-3210M
  • Skill: Durchschnitt
  • Zweig: stable
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #5 am: 05. Mai 2016, 16:59:24 »
Hallo 010010,
Hm, so richtig habe ich das Problem noch nicht begriffen, denn was ist denn schlecht an deinem Ausdruck?
if U1==0:
   U1=U2*N1/N2
   print(U1)
Als eingabe benutze ich ja  eval(input("U1="))  damit ich sehe welchen Wert ich eingeben, aber wenn ich das normale input() nehme ist es ja dierekt als String deklariert und unbrauchbar für die Elektrotechnik.
eval ist ja etwas gefährlich, aber wenn nur Du das benutzt, mag das gehen.
Und was die Eingabe betrifft, so würde ich sowas ähnliches benutzen:
#!/usr/bin/env python3

def num(s):
    try:
        return int(s)
    except ValueError:
        return 0

U1 = num(input("Eingabe U: "))
print(U1)
Wenn da ein leere String eingegeben wurde (oder bei unsinnigen Eingaben mit alpha-Zeichen) kriegst Du trotzdem 0 heraus. Statt return 0 kannst Du auch was für dich passenderes nehmen.
Die Funktion lässt sich auch zur Zahleneingabe verallgemeinern, wenn Du input mit rein nimmst:
#!/usr/bin/env python3

def num(text):
    try:
        return int(input(text))
    except ValueError:
        return 0

U1 = num("Eingabe U1: ")
print(U1)
U2 = num("Eingabe U2: ")
print(U2)
Das ist jetzt nur für Integer-Eingaben, für dich wäre es sicher sinnvoller, statt dem int ein float zu nehmen.
Keine Ahnung, ob das mehr deinen Wünschen entspricht.
Aber wenn Du tkinter benutzt erübrigt sich das ganze wahrscheinlich sowieso, weil Du dann Eingabefelder mit Default-Werten belegen kannst. Da genügt dann manchmal tatsächlich nur die Enter-Taste :)
http://www.python-kurs.eu/tkinter_entry_widgets.php

Ansonsten ist für solche Sachen das fastnumbers-Modul sehr nützlich
https://github.com/SethMMorton/fastnumbers

Viele Grüße gosia
"funktioniert nicht" ist keine brauchbare Fehlermeldung

Offline gosia

  • Held Mitglied
  • *****
  • Beiträge: 1470
  • Dankeschön: 282 mal
  • Desktop: Openbox + xfce
  • Grafikkarte: Intel HD 4000
  • Grafikkartentreiber: i915 (free)
  • Kernel: 4.19 Artix
  • Prozessor: Intel Core i5-3210M
  • Skill: Durchschnitt
  • Zweig: stable
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #6 am: 05. Mai 2016, 22:59:05 »
Hallo 010010,
mir war etwas langweilig ;) und da habe ich meine kleine Funktion etwas "verfeinert":
#!/usr/bin/env python3

def num(text, fun, default=0):
    try:
        return fun(input(text))
    except ValueError:
        return default

U1 = num("Eingabe U1 (float, default 0): ", float)
print(U1)
U2 = num("Eingabe U2 (integer, default -1): ", int, -1)
print(U2)
U3 = num("Eingabe U3 (integer, default 0): ", int)
print(U3)
Du kannst jetzt also angeben, ob eine Integer- oder float-Zahl gewünscht wird und einen eventuellen Default-Wert angeben.
Wenn man also nichts eingibt (nur Return), würde das so aussehen:
Eingabe U1 (float, default 0):
0
Eingabe U2 (integer, default -1):
-1
Eingabe U3 (integer, default 0):
0
Ist mehr eine Spielerei, aber hat Spaß gemacht :)

Viele Grüße gosia
"funktioniert nicht" ist keine brauchbare Fehlermeldung

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #7 am: 06. Mai 2016, 09:13:50 »
Hui das ist viel Text für nur ein mal eine Zahl eintippen. Doch damit geht es anscheint auch ohne das ich etwas eingeben muss nur halt Enter drücken. Aber das ist jetzt sehr viel Text für meine kleine Schätzungformel für Trafoberechnung. Doch anscheint gibt es noch keine kompaktere Lösung bei Python dafür. Bei C# war das immer nur if (R=="") und schon hat der gesehen da steht nicht. und nahm das dann als ergebnis. Da hatte ich ja auch von anfang an eine Grafische Obefläche die man mit der Maus gezogemn hatte. Da bestand mein Design nur aus drei Textboxen und einem Button für die Berechnung von R=U/I. Da konnte ich dann einfach zwei Ergebnisse in zwei Textboxen eintippen und das dritte ergebnis kam dann automatisch dabei raus. Das geht bei Python lreider nicht so gut. Benutze ja bis jetzt auch nur das Terminal und sitze beim Design noch an einfachen Geometrischen Formen drann.


Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #8 am: 06. Mai 2016, 09:18:37 »
## Trafo-Spannung

print("Bitte geben Sie für den Fehlenden Wert 0 ein!")

U1 = eval(input("U1="))
U2 = eval(input("U2="))
N1 = eval(input("N1="))
N2 = eval(input("N2="))

if U1==0:
U1=U2*N1/N2
print(U1)

if U2==0:
U2=U1*N2/N1
print(U2)

if N1==0:
N1=U1*N2/U2
print(N1)

if N2==0:
N2=U2*N1/U1
print(N2)

So sieht das halt bis jetzt aus. Muss jetzt halt lernen ein richtiges Desig zu bauen und kann das dann da noch mal einfügen und für die Textboxen benutzen und baue noch einen Button darunter. Ich mache das immer mit so wenig Code wie es nur geht und versuche es sehr einfach zu gestalten.

Offline gosia

  • Held Mitglied
  • *****
  • Beiträge: 1470
  • Dankeschön: 282 mal
  • Desktop: Openbox + xfce
  • Grafikkarte: Intel HD 4000
  • Grafikkartentreiber: i915 (free)
  • Kernel: 4.19 Artix
  • Prozessor: Intel Core i5-3210M
  • Skill: Durchschnitt
  • Zweig: stable
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #9 am: 06. Mai 2016, 11:29:40 »
Hallo 010010,
Hui das ist viel Text für nur ein mal eine Zahl eintippen. Doch damit geht es anscheint auch ohne das ich etwas eingeben muss nur halt Enter drücken. Aber das ist jetzt sehr viel Text für meine kleine Schätzungformel für Trafoberechnung.
Naja, war halt eine Spielerei :) oder besser gesagt, eine Fingerübung, um mein Python wieder etwas aufzufrischen. Und eine 5-zeilige Funktion ist ja nun so viel auch nicht, ist eben eine Art Fehlerbehandlung mit dabei. Und ja, Du brauchst nur Enter zu drücken ;)
Da bestand mein Design nur aus drei Textboxen und einem Button für die Berechnung von R=U/I. Da konnte ich dann einfach zwei Ergebnisse in zwei Textboxen eintippen und das dritte ergebnis kam dann automatisch dabei raus. Das geht bei Python lreider nicht so gut.
Wenn Du Tkinter gelernt hast, bekommst Du dann für Python genau so ein praktisches Formular.

Viele Grüße gosia

PS. Jetzt habe ich endlich verstanden, was Du möchtest. Das ist wahrscheinlich mit einer grafischen Oberfläche am besten zu lösen, wo Du auswählst, welcher Wert berechnet werden soll.
"funktioniert nicht" ist keine brauchbare Fehlermeldung

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #10 am: 11. Mai 2016, 17:06:16 »
So ich habe ein kleines Problem das ich seit Tagen nicht lösen kann.
gosia du scheints mir da weiter helfen zu können. Ich habe etwas gefunden das ich nicht wieder finde. Habe ein Fenster mit zwei Textboxen in dem einen will ich etwas rein schreiben und in dem darunter, also txt02 soll dann das ergebnis raus kommen nach dem ich den Button B1 gedrückt hab. Nur geht das irgent wie nicht so wie ich das will.
Den Code muss ich nachliefern, da ich im Laden gerade sitze. Finde die beschreibung auch nicht wieder. Kannst du mir da eine Vorlage geben wie das geht? Muss doch mal weiter kommen und mich nicht nur auf das zocken konzentrieren. :D 

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #11 am: 11. Mai 2016, 22:17:01 »
## Button mit befehlt

from tkinter import *

win = Tk()
win.title("Quadrat")
win.geometry("256x196")

txt01 = Entry(win)
txt01.pack()

def ber():


B1 = Button(text="Berechnen", command=ber)
B1.pack()

mainloop()

So sieht mein Code bis jetzt aus, aber wie ich das in die def rein tippe verstehe ich nicht. Muss mich da mal mehr mit befassen.

Offline gosia

  • Held Mitglied
  • *****
  • Beiträge: 1470
  • Dankeschön: 282 mal
  • Desktop: Openbox + xfce
  • Grafikkarte: Intel HD 4000
  • Grafikkartentreiber: i915 (free)
  • Kernel: 4.19 Artix
  • Prozessor: Intel Core i5-3210M
  • Skill: Durchschnitt
  • Zweig: stable
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #12 am: 11. Mai 2016, 22:59:20 »
Hallo 010010,
Eigentlich solltest Du das mit dem Link http://www.python-kurs.eu/tkinter_entry_widgets.php den ich dir schon oben gegeben habe, einigermassen hinbekommen. Nimm zuerst das Beispiel mit den zwei Feldern für Vor- und Nachname, da siehst Du schon wie Du Strings eingeben und auslesen kannst (get). Statt Namen nun Zahlen (Strings umwandeln in float), berechnen und das Ergebnis in einem dritten Feld ausgeben.
Sieh dir auch den Kreditrechner an, versuche ihn zu verstehen. Dann kannst Du alles rausstreichen, was Du nicht brauchst, deine eigene Formel einsetzen, so im Prinzip.
Das Auslesen eines Eingabefeldes sieht ja meist so aus:
wert1 = float(entries['Wert 1'].get())die Berechnung und Ausgabe:
resultat=wert1+wert2
entry.insert(0, str(resultat))

Viele Grüße gosia
"funktioniert nicht" ist keine brauchbare Fehlermeldung

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #13 am: 12. Mai 2016, 08:21:30 »
So es hat so geklappt. Ich habe halt schon wieder vergessen das der immer als String deklariert und ich das erst ändern muss. Bin von C# immer noch etwas anderes gewont. Da musste man die Variablem immer erst Festlegen, aber dafür konnte man die Formel dann genau so aufschreiben wie auf einem Blatt Papier.  L1.configure(text=(x**2))   Jetzt hab ich die Rechnung im Label stehen wo es ausgegeben werden soll.
 
Danke noch mal. :)

Offline 010010

  • Neuling
  • *
  • Beiträge: 20
  • Skill: Anfänger
Re: Python 2.7 / 3.x Hilfe und Diskusion
« Antwort #14 am: 03. Juni 2016, 10:47:00 »
So mal wieder ein ähnliches Problem. Das ich gelöst haben möchte, aber irgentwie es nicht hinbekomme.

Erst einmal der Code damit man weiß worum es geht. Ist wieder mal nur das Ohmsche Gesetzt.
## Widerstand

from tkinter import *
import math

win = Tk()
win.title("Wirkwiderstand")
win.geometry("300x200")

a = Label(win, text="R=U/I")
a.pack()

LabelU = Label(text="U=")
LabelU.pack()

U = Entry(win)
U.pack()

LabelI = Label(text="I=")
LabelI.pack()

I = Entry(win)
I.pack()

LabelR = Label(text="R=")
LabelR.pack()

R = Entry(win)
R.pack()

def ber():
if R=="":
u=float(U.get())
i=float(I.get())
x.configure(text=(u/i))
elif U=="":
r=float(R.get())
i=float(I.get())
x.configure(text=(r*i))
elif I=="":
r=float(R.get())
u=float(U.get())
x.configure(text=(u/r))

B1 = Button(text="Berechnen", command=ber)
B1.pack()

x = Label(text="Ergebnsistelle!")
x.pack()

win.mainloop()

Man sieht schon es ist nicht fertig, aber die Ausgabe unten mit dem Label Ergebnis ist nur noch ein überbleibsel.

Ich will es so haben wie im Terminal wo ich in zwei Textboxen etwas rein schreibe und mit der Abfrage automatisch die dritte Textbox dann für das Egebnis benutzt wird. Nur hab ich jetzt 2 Sachen versucht die Abfragen ein zu bauen und es macht bei beiden Versionen nichts mehr. Schreib ich die def in die Abfrage passiert nichts. Ich bekomme ein Error und so wie ich es jetzt habe kam noch was als Ich nur ein if drin hatte. Nur jetzt muss der es ja aussuchen und der Code wird so nicht mehr richtig gelesen. Will halt einmal R=U/I, U=R*I und I=U/R ausrechnen können ohne großartig selber etwas machen zu müssen.

Sobald ich den Schritt gelöst hab kann ich dann weiter machen und nur noch die ganzen Programme abtppen um die am Ende von einem ersten Fenster aus über einzelne Button zu starten.

Danke jetzt schonmal für die hilfe!