Seite 1 von 1

Erstes "Projekt" eines Neulings

Verfasst: Samstag 15. Januar 2022, 14:57
von Kotelettklopfer
Moin zusammen,

ich habe heute mein erstes, in meinen Augen, vorzeigbares Projekt begonnen.
Aufgegriffen habe ich die Idee eines Übersetzers, den ich dann nach eigenen Vorstellungen umgesetzt habe.
Da ich nur Java Basics besitze und mit Python gerade anfange (beides wird neben Job und Familie im Selbststudium gelernt), wollte ich hier mal nachhören ob das bisschen Code so korrekt umgesetzt wäre.

Meine nächsten Ziele sind:

- Mehr Sprachen
- Dynamische Erkennung der Eingabesprache
- GUI

Verwendet wurde hier die Google API

Code: Alles auswählen

from googletrans import Translator

translator = Translator()

print("Bitte eine Sprache wählen (de)")
print("Please choose an language (en)")
print("veuillez choisir une langue (fr)")
lang_in = input("")
print("")

if lang_in == "de":
    print("Welcher Text soll übersetzt werden?")
    text = input("")
    print("")
if lang_in == "en":
    print("Which text should be translated?")
    text = input("")
    print("")
if lang_in == "fr":
    print("Quel texte traduire?")
    text = input("")
    print("")


print("In welcher Sprache soll die Übersetzung erfolgen? (de)")
print("In which language should the translation be done? (en)")
print("Dans quelle langue la traduction doit-elle être effectuée? (fr)")
lang_out = input("")
print("")

Result = translator.translate(text, lang_out).text

print(Result)




Ich würde mich über Input freuen und hoffe auf viele interessante Konversationen hier im Forum.

VG

Re: Erstes "Projekt" eines Neulings

Verfasst: Samstag 15. Januar 2022, 15:44
von rogerb
@Kotelettklopfer,

schon okay für den Anfang.
Als nächstes solltest du lernen wie man Funktionen verwendet. Dann kann man die Benutzereingabe und die Übersetzung und Ausgabe in einzelne Funktionen aufteilen.
Außerdem währe es gut, wenn das Ganze in einer Schleife läuft, damit man das Programm nicht für jede Übersetzung neu starten muss.

Leere print() und input() Funktionen brauchen keine Anführungsstriche.
Man kann aber auch einen Text an die input() Funktion übergeben, dann spart man sich die vorherige Ausgabe durch print().
Lokale Variablen kann man groß schreiben, wenn man der Konvention folgen will, sollte man sie aber klein schreiben.
Falls der Benutzer ein nicht unterstütze Sprache eingibt, sollte es eine entsprechende Fehlermeldung geben.
Dafür müsste die Eingabe dann erneut möglich sein um den Fehler zu korrigieren.

Die aktuelle Version von googletrans scheint auch einen Fehler zu haben.
https://github.com/ssut/py-googletrans/issues/319

Ich bekomme den gleichen Fehler der hier auch beschrieben ist.

Re: Erstes "Projekt" eines Neulings

Verfasst: Samstag 15. Januar 2022, 16:49
von Kotelettklopfer
Danke für deine ausführliche Rückmeldung.

Außerdem währe es gut, wenn das Ganze in einer Schleife läuft, damit man das Programm nicht für jede Übersetzung neu starten muss. --> Das wollte ich noch umsetzen, das immer neustarten war nervig

Leere print() und input() Funktionen brauchen keine Anführungsstriche. --> Gute Info

Man kann aber auch einen Text an die input() Funktion übergeben, dann spart man sich die vorherige Ausgabe durch print(). --> Das wusste ich, aber wollte, dass die User EIingabe in der nächsten Zeile erscheint. Gebe ich dem Input Text mit dann würde der User ja sofort dahinter schreiben. Geht bestimmt anders umzusetzen

Lokale Variablen kann man groß schreiben, wenn man der Konvention folgen will, sollte man sie aber klein schreiben. --> Ja Konventionen muss ich noch anschauen. Result war hier aber tatsächlich ein Fehler

Falls der Benutzer ein nicht unterstütze Sprache eingibt, sollte es eine entsprechende Fehlermeldung geben. --> Stimmt, stand auch auf der Agenda

Die aktuelle Version von googletrans scheint auch einen Fehler zu haben.
https://github.com/ssut/py-googletrans/issues/319 ---> Hatte ich auch, bin dann eine Version runter gegangen

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 11:36
von Kotelettklopfer
Wäre dies die richtige Lösung für die For Schleife bei Falscheingabe der Sprache ?
Mein Test verlief positiv, was nicht heißen muss, dass die Umsetzung passt.

Code: Alles auswählen

from googletrans import Translator

translator = Translator()

lang_exist = False

while lang_exist == False:
    
    print("Bitte eine Sprache wählen (de)")
    print("Please choose an language (en)")
    print("veuillez choisir une langue (fr)")
    lang_in = input("")
    print("")
    
    if (lang_in == "de" or lang_in == "en" or lang_in == "fr"):  
        lang_exist = True
    else:
        print("Unbekannte Sprache | Unknown language | Langue inconnue")

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 12:02
von Sirius3
@Kotelettklopfer: Flags braucht man eigentlich nie für while-Schleifen, weil man die einfach per `break` verlassen kann. Die lange if-Bedingung kann man mit `in` deutlich übersichtlicher schreiben. Benutze keine Abkürzungen. Was ist lang und was ist in?

Code: Alles auswählen

while True:    
    print("Bitte eine Sprache wählen (de)")
    print("Please choose an language (en)")
    print("veuillez choisir une langue (fr)")
    input_language = input("")
    print("")
    
    if input_language in ["de", "en", "fr"]:
        break
    else:
        print("Unbekannte Sprache | Unknown language | Langue inconnue")
Dann schreibt man das ganze als Funktion:

Code: Alles auswählen

def choose_language():
    while True:    
        print("Bitte eine Sprache wählen (de)")
        print("Please choose an language (en)")
        print("veuillez choisir une langue (fr)")
        input_language = input("")
        print("")
        
        if input_language in ["de", "en", "fr"]:
            return input_language
        print("Unbekannte Sprache | Unknown language | Langue inconnue")


input_language = choose_language()

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 12:18
von Kotelettklopfer
@Sirius3:

In deiner Version gibt es ja keine Variable mit True / False. Verstehe ich richtig, dass der Zustand der While Schleife sich ändert jenachdem ob if oder else "erfüllt" ist?
If -> Zustand True -> While wird verlassen
Else -> Zustand False -> Schleife läuft erneut

Wenn ja, müsste es dann nciht lauten while False ? Solange if nicht erfüllt ist wiederhole diese Schleife ?

Bitte eventuelle dumme Fragen zu entschuldigen. Bin noch recht Neu in der Programmier Materie :-)

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 12:27
von __deets__
While False bricht doch sofort ab. Das while läuft bis die Bedingung falsch ist. Sie also hart auf falsch zu ziehen lässt es keinmal laufen.

Und wenn die Eingabe erfolgreich ist, dann wird die Funktion mit Return verlassen. Das beendet auch die Schleife.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 12:32
von Kotelettklopfer
Das ist genau was ich gerade nicht ganz verstehe.
Warum bricht er bei while False direkt ab? Bedeutet doch vereinfacht gesagt "Solange Falsch" -> Solang die Eingabe Falsch ist, wiederhole die Schleife.



2. Woher nimmt er in Sirius Version die Info ob etwas Wahr oder Unwahr ist?

Hier stehe ich vollkommen auf dem Schlauch



Edit: Sehe auch jetzt, dass input_language eine Liste ist.Vielleicht hat es damit etwas zu tun.
Werde nochmal meine Bücher weiter durchackern.

Bin nur ein Freund davon beim lernen eigene Projekte zu probieren.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 13:11
von __deets__
Nein. Python weiß nix von “Eingabe falsch“. Es kennt nur „while etwas-ist-wahr“. Das war es. Das DU das wahre etwas gedanklich als „Eingabe falsch“ definierst, ändert Pythons Verhalten nicht.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 13:15
von __blackjack__
@Kotelettklopfer: ``while False:`` sagt solange die Bedingung wahr ist führe folgendes aus. Und die Bedingung ist hart und bedingungslos *unwahr* und niemals wahr, also wird der Schleifenkörper auch niemals ausgeführt. Von einer Eingabe sehe ich in der Bedingung ``False`` nichts und Python auch nicht. Für die Entscheidung Schleifenkörper ausführen oder nicht ist nur die Bedingung nach dem ``while`` entscheidend, nicht was *in* der Schleife steht, denn die Bedingung ist ja gerade dazu da zu entscheiden ob das überhaupt ausgeführt wird. Man kann ja nicht sagen führe folgendes aus wenn das beim Ausführen dieses oder jenes macht, und wenn es das nicht macht, dann steig in die Zeitmaschine und tu so als wäre das nie ausgeführt worden. Womit man dann wieder nicht wüsste ob man es denn ausführen sollte oder nicht. 🤪

Ad 2.) `False` ist unwahr. Per Definition. Immer.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 13:46
von Kotelettklopfer
Ich kenne schon den Unterschied zwischen True und False.
Mir als blutigem Anfänger wird aber der Hintergrund nicht klar warum es so funktioniert wie es da oben steht.
Schaue mir mal weitere Beispiele an, vielleicht komme ich dann dahinter.

Danke Euch trotzdem !!

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 13:49
von Kotelettklopfer
__blackjack__ hat geschrieben: Montag 17. Januar 2022, 13:15 @Kotelettklopfer: ``while False:`` sagt solange die Bedingung wahr ist führe folgendes aus. Und die Bedingung ist hart und bedingungslos *unwahr* und niemals wahr, also wird der Schleifenkörper auch niemals ausgeführt. Von einer Eingabe sehe ich in der Bedingung ``False`` nichts und Python auch nicht. Für die Entscheidung Schleifenkörper ausführen oder nicht ist nur die Bedingung nach dem ``while`` entscheidend, nicht was *in* der Schleife steht, denn die Bedingung ist ja gerade dazu da zu entscheiden ob das überhaupt ausgeführt wird. Man kann ja nicht sagen führe folgendes aus wenn das beim
Bedeutet man würde also niemals while False schreiben ?
Ne Schleife die niemals ausgeführt wird kann ich ja ganz einfach weglassen oder?

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 13:59
von __deets__
Ja.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 14:14
von Kebap
While heißt Während.
Während die folgende Bedingung wahr ist, wiederhole den folgenden Block.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 14:59
von Kotelettklopfer
Eine andere Version von while in Python wäre aber

Code: Alles auswählen


j = 10

while j >=1
	print(j)
	j +=1  

oder arbeitet man immer mit endlosschleifen die dann per break gestoppt werden?

Gibt es das inkrementieren per ++ in Python nicht?

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 15:23
von Sirius3
Ich schrieb, dass man normalerweise keine while-Schleifen mit Flags benutzt. Für andere Bedingungen können while-Schleifen durchaus Sinn machen.
Das was Du schreibst, ist aber wieder äquivalent zu einer while-True-Schleife, weil j immer größer als 1 ist, egal wie oft Du j um 1 erhöhst.

Nein, es gibt kein ++ zum Inkrementieren in Python. Das ist `+= 1`.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 15:37
von Kotelettklopfer
Sorry, war die Aufregung :-)

Natürlich sollte es j -=1 heißen.

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 16:47
von __blackjack__
@Kotelettklopfer: Einen ``++``-Operator gibt es in Python nicht.

In dem Beispiel ist die Bedingung ja auch immer Wahr, also würde man da ``True`` schreiben, statt das so umständlich auszudrücken das der Leser erst selbst nachdenken und feststellen muss, dass das immer `True` ergibt.

Und das ist eigentlich eine ``for``-Schleife:

Code: Alles auswählen

from itertools import count

for j in count(10):
    print(j)

Re: Erstes "Projekt" eines Neulings

Verfasst: Montag 17. Januar 2022, 16:50
von __blackjack__
Ups da war ich etwas zu spät, das mit dem ``-=`` hatte ich da noch nicht gelesen. Bleibt trotzdem eine ``for``-Schleife:

Code: Alles auswählen

for j in reversed(range(1, 11)):
    print(j)