Seite 1 von 2

Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 06:45
von BigSanch
Hallo

Ich bin mir nicht ganz sicher wonach ich eigentlich suchen soll, daher hab ich auch nicht richtig vorab gesucht.
Das einzige auf die Schnelle war join(), was aber nicht ganz das ist was ich wohl brauche.

Folgendes:
ich habe zb folgende Variablen :

Code: Alles auswählen

decode = [ZEICHEN FÜR DE]
encode = [ZEICHEN FÜR EN]
Dann hab ich die Variablen aus einer if Abfrage :

Code: Alles auswählen

landcode = getlangfromfunction
{Ausgabe  ist de, en ....}
Wie ist es mir möglich die beiden Variablen so zu kombinieren, dass sie als neue Variable und nicht als Ausgabetext fungieren?
Damit es dann so etwa wäre (als Beispiel) :

Code: Alles auswählen

landcode = getlangfromfunction (=de)
decode = [ZEICHEN FÜR DE]

if landcode == 'de':
	ausgabe = landcode+'code'
Dies ergibt aber als Ausgabe nicht wie gewünscht '[ZEICHEN FÜR DE]', sondern eben einfach nur 'decode' als Text.
Wie erhalte ich nun aber die bereits gesetzte Variable? Nach was genau suche ich da?
Ich hoffe ich hab das nun nicht zu umständlich erklärt.

Danke für Eure Zeit und mfG

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 06:56
von snafu
BigSanch hat geschrieben: Mittwoch 14. Oktober 2020, 06:45

Code: Alles auswählen

landcode = getlangfromfunction (=de)
decode = [ZEICHEN FÜR DE]

if landcode == 'de':
	ausgabe = landcode+'code'
Dies ergibt aber als Ausgabe nicht wie gewünscht '[ZEICHEN FÜR DE]', sondern eben einfach nur 'decode' als Text.
Na klar. An "landcode" wurde "de" zugewiesen, wenn die if-Bedingung zutrifft und der Block betreten wird. Daher:
landcode + "code" -> "de" + "code" -> "decode"

Wieso sollte Python da auf [ZEICHEN FÜR DE] kommen und was soll das überhaupt sein?

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 07:13
von BigSanch
snafu hat geschrieben: Mittwoch 14. Oktober 2020, 06:56 Na klar. An "landcode" wurde "de" zugewiesen. Daher:
landcode + "code" -> "de" + "code" -> "decode"
Weiß ich, hab ich ja auch so geschrieben, beantwortet also meine Frage nicht :-)
snafu hat geschrieben: Mittwoch 14. Oktober 2020, 06:56Wieso sollte Python da auf [ZEICHEN FÜR DE] kommen ...
Das war hier meine Frage :-)
snafu hat geschrieben: Mittwoch 14. Oktober 2020, 06:56... und was soll das überhaupt sein?
Naja grundsätzlich ist das doch Wurst, was da dann steht oder nicht, es geht grundsätzlich um die Funktion die Variablen so zu kombinieren, dass eben das richtige angezeigt wird.
Aber um es etwas zu definieren geht es bei landcode und Zeichen für DE wahrscheinlich um Sprach und Ländercodes ;-)

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 07:31
von snafu
Hier ein zweiter Versuch, da es im ersten Anlauf offensichtlich nicht bei dir angekommen ist: Python kann nicht magisch raten, was du eigentlich willst, sondern Python führt aus, was du hingeschrieben hast. Im übrigen nennt sich der Vorgang, von dem du sprichst, nicht kombinieren, sondern konkatenieren, aber das nur am Rande. Also nochmal: Woher kommt [ZEICHEN FÜR DE]? Soll das ein Ländercode sein? Geht es da um das Ergebnis einer Übersetzung oder um die Dekodierung eines Zeichensatzes, nur eben pro Zeichen betrachtet? Wenn du konstruktive Hilfe brauchst, dann solltest du schon mehr Hintergrund-Infos liefern. Wir können schlecht raten, was du schon alles weißt bzw als Voraussetzung für die Aufgabe mitnimmst...
BigSanch hat geschrieben: Mittwoch 14. Oktober 2020, 07:13 Aber um es etwas zu definieren geht es bei landcode und Zeichen für DE wahrscheinlich um Sprach und Ländercodes ;-)
Na, aber das ist doch de bzw de_DE, also genau korrekt, so wie es geliefert wird. Wo liegt dann dein Problem? Was willst du wirklich als Ausgabe?

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 08:00
von tonikae
Na etwas unklar drückst du dich schon aus, aber ich versuche es trotzdem mal:

Code: Alles auswählen

decode="deutsch"
encode="english"

langcode="de"

abc=("Language:"+encode, "Sprache: "+decode)[langcode=="de"]

print(abc)
Das nennt sich "ternärer Operator" und ist eigentlich nichts anderes wie
eine Kompaktversion von IF...ELSE(für True/False)

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 08:02
von sparrow
@BigSanch: Was ist denn das für eine nervig lange Signatur?

Das Problem ist, dass du hier irgendwelchen Pseudo-Code zeigst, der syntaktisch leider überhaupt gar keinen Hinweis liefert, was du überhaupt vor hast. Was soll denn [ZEICHEN FÜR DE] sei? Eine Liste? Ein einziges Zeichen? Und was ist für ein Typ mit welchem Inhalt ist die Rückgabe von getlangcode?
Das musst du, am besten mit einem Beispiel zeigen - und was du als Ergebnis erwartest. Und das nicht "beschreiben".

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 08:24
von BigSanch
EDITIERT UND GELÖSCHT - Da ich das zu spät gesehen habe, dass bereits eine neue Antwort dabei ist.
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 08:00 Na etwas unklar drückst du dich schon aus, aber ich versuche es trotzdem mal:

Code: Alles auswählen

decode="deutsch"
encode="english"

langcode="de"

abc=("Language:"+encode, "Sprache: "+decode)[langcode=="de"]

print(abc)
Ich wollte grad eben schreiben, dass wir Verständigungsprobleme am frühen morgen haben :-)
Ich danke Dir für deine Antwort, das war exact das was ich gesucht habe.

sparrow hat geschrieben: Mittwoch 14. Oktober 2020, 08:02 @BigSanch: Was ist denn das für eine nervig lange Signatur?

Das Problem ist, dass du hier irgendwelchen Pseudo-Code zeigst, der syntaktisch leider überhaupt gar keinen Hinweis liefert, was du überhaupt vor hast. Was soll denn [ZEICHEN FÜR DE] sei? Eine Liste? Ein einziges Zeichen? Und was ist für ein Typ mit welchem Inhalt ist die Rückgabe von getlangcode?
Das musst du, am besten mit einem Beispiel zeigen - und was du als Ergebnis erwartest. Und das nicht "beschreiben".
Naja dann eben falsch ausgedrückt, es sollte kein PseudeoCode sein sondern eben der vorhande Code, diesen in Klammern [] zu packen, was auch für Listen gilt, war etwas unpraktisch .-)
Dabhte aber als "Zeichen für de" klar nur ein Zeichen für de in Frage kommt .-)

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 08:33
von sparrow
Du beschreibst schon wieder. Und das ist in meinen Augen völlig wirr.

Ich kann echt nur raten, was du willst. Du willst dynamisch Variablennamen zusammensetzen. Und das macht man nicht. Dafür gibt es Wörterbücher.

Edit: Wenn du denkst, dass das was du da gezeigt bekommen hast, die Lösung ist, dann suchst du definitiv ein dict.

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 08:36
von BigSanch
Sry hab ich Editiert:
viewtopic.php?f=1&t=49883#p374628

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 09:08
von Sirius3
Was Du willst, ist eine Zuordnung von einem Wert (Ländercode) zu einem [ZEICHEN]. Diese Zuordnung beschreibt man in der Programmierung als Wörterbuch:

Code: Alles auswählen

language_to_code = {
    "DE": "Zeichen_DE",
    "EN": "Zeichen_EN",
}
language = 'DE'
print(language_to_code[language])

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 09:31
von BigSanch
@Sirius3
Danke, das ist genial. Danke.
Mit dem anderen Code von @tonikae war trotzdem auch hilfreich und lehrreich, aber in meinem Fall ist ein Wörterbuch wohl das effektivste.

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 10:02
von __blackjack__
@BigSanch: Der Code von tonikae ist aber unpythonisch, denn das ist *nicht* der ternäre Operator sondern ein Hack. Den man nicht anwendet, weil Python tatsächlich einen ternären Operator hat, den man dann auch verwenden sollte:

Code: Alles auswählen

abc = "Sprache: " + decode if language_code == "de" else "Language: " + encode
Wobei man bei dieser Art von Entscheidungen auch immer bedenken sollte, dass das nicht wirklich eine Entscheidung zwischen "de" und irgend etwas anderem ist, sondern zwischen "de" und "en", das heisst falls `language_code` einen unerwarteten Wert hat, wird der wie "en" behandelt. Das kann so gewollt sein, es kann aber auch sein, dass man nicht möchte, dass dieser Fall einfach so unbemerkt durchrutschen kann.

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 14:07
von DeaD_EyE
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 08:00

Code: Alles auswählen

decode="deutsch"
encode="english"

langcode="de"

abc = ("Language:" + encode, "Sprache: " + decode)[langcode=="de"]

print(abc)
Da habe ich erst mal 5 Minuten für gebraucht um das zu verstehen.
Die Subskription in den eckigen Klammern ist entweder True oder False.
True == 1
False == 0

Also wird, wenn langcode == "de" wahr ist, wird Index 1 genommen, ansonsten Index 0.
Das ist aber kein ternärer Operator, sondern ein übler Hack.


Einfach den richtigen Datentypen wählen und schon hat man kein Problem mehr.
Das dict wäre auch meine erste Wahl gewesen.

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 20:07
von tonikae
DeaD_EyE hat geschrieben: Mittwoch 14. Oktober 2020, 14:07
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 08:00

Code: Alles auswählen

decode="deutsch"
encode="english"

langcode="de"

abc = ("Language:" + encode, "Sprache: " + decode)[langcode=="de"]

print(abc)
Da habe ich erst mal 5 Minuten für gebraucht um das zu verstehen.
Die Subskription in den eckigen Klammern ist entweder True oder False.
True == 1
False == 0

Also wird, wenn langcode == "de" wahr ist, wird Index 1 genommen, ansonsten Index 0.
Das ist aber kein ternärer Operator, sondern ein übler Hack.


Einfach den richtigen Datentypen wählen und schon hat man kein Problem mehr.
Das dict wäre auch meine erste Wahl gewesen.
Du schreibst schlicht und einfach Unfug.
Das ist ein ganz regulärer tenärer Operator
Das kann man sogar in Büchern nachlesen
und sogar noch weiter ausbauen. Das läßt sich
sogar in einen Print-Befehl einklinken.

Code: Alles auswählen

print((1/0, 2)[condition])
#ZeroDivisionError is raised
Guckst du hier...da steht alles
https://book.pythontips.com/en/latest/t ... ators.html

Der einzige Unterschied ist nur die Schreibweise.
In richtigen Programmiersprachen werden tenäre Operatoren mit dem "?" und ":"-Zeichen gehandhabt
Das Ablaufschema ist aber identisch.

-->--(?)---[Bedingung]---[True]--(:)--[False]

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 20:19
von Sirius3
Was unterscheidet richtige von falschen Programmiersprachen?
Nicht alles, was irgendwer ins Internet schreibt ist auch richtig. Ich verrate mal ein Geheimnis: da kann jeder alles mögliche schreiben.

Ein richtiger ternärer Operator schreibt man mit r und wertet nur den Ausdruck aus, der auch gebraucht wird.
Aber es gibt tatsächlich einen alternativen ternären Operator in Python, nur ist das halt etwas anderes als eine Liste.

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 20:24
von /me
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 20:07 Du schreibst schlicht und einfach Unfug.
Das ist ein ganz regulärer tenärer Operator
Das kann man sogar in Büchern nachlesen
[...]
https://book.pythontips.com/en/latest/t ... ators.html
Deine Variante steht da als "obscure and not widely used example", aber definitiv nicht als der ternäre Operator von Python. Was der ternäre Operator ist kannst du in der offiziellen Dokumentation nachlesen: Conditional expressions
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 20:07 In richtigen Programmiersprachen werden tenäre Operatoren mit dem "?" und ":"-Zeichen gehandhabt
Offensichtlich nicht.

Ich schätze frische Ideen sehr. Angesichts der unhaltbaren Aussagen, die du tätigst, verlasse ich mich dann aber doch lieber auf die Expertise von Leuten die Python seit über 10 und teilweise auch seit über 20 Jahren aktiv einsetzen.

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 21:01
von bb1898
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 20:07 Du schreibst schlicht und einfach Unfug.
Das ist ein ganz regulärer tenärer Operator
Das kann man sogar in Büchern nachlesen
und sogar noch weiter ausbauen. Das läßt sich
sogar in einen Print-Befehl einklinken.

Code: Alles auswählen

print((1/0, 2)[condition])
#ZeroDivisionError is raised
Guckst du hier...da steht alles
https://book.pythontips.com/en/latest/t ... ators.html
Und genau an dieser Stelle geht es los mit der Erklärung des richtigen ternären Operators in Python. Die von Dir anscheinend bevorzugte Variante wird dann eingeleitet mit: "Another more obscure and not widely used example involves tuples." Sie wird, so weit ich es bei schnellem Durchlesen beurteilen kann, korrekt kritisiert. Was mir in dem Abschnitt dann allerdings zu kurz kommt, sind die Probleme, die man sich mit der zuletzt beschriebenen Variante "Shorthand Ternary" einhandeln kann (das alte Verfahren "value = result or default" statt "value = result if result else default").

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 21:38
von __blackjack__
@tonikae: „In richtigen Programmiersprachen” ist ein bisschen anmassend. Als wenn nur Programmiersprachen mit C-ähnlicher Syntax ”richtige” Programmiersprachen wären. Ausserdem ist die Bezeichnung „ternärer operator“ in C & Co auch nur deswegen richtig für das um was es hier geht, weil es dort nur diesen einen Operator mit drei Operanden gibt. „Bedingungsoperator“ wäre ein passenderer Name. Denn man kann sich ja auch ternäre Operatoren vorstellen die etwas völlig anderes machen. SQL kennt beispielsweise den ternären Operator ``<value> BETWEEN <a> AND <b>`` der testet ob ein gegebener Wert in einem bestimmten Bereich liegt.

In Python würde ich das auch eher bedingten Ausdruck nennen, denn ein Operator ist es letztlich ja nicht wirklich.

In VisualBasic .NET und in Io schreibt man das als ``if(<condition>, <true_case>, <false_case>)``. In VB.NET ist das Syntax, in Io eine normale Methode. In Haskell und CoffeeScript ist es ``if <condition> then <true_case> else <false_case>``. In Haskell dürfen die Fälle wie in VB.NET nur einfache Ausdrücke sein, in CoffeeScript dagegen auch mehrere Anweisungen. Letzteres sieht in Lisp/Scheme & Co so aus ``(if <condition> <true_case> <false_case>)`` und ist auch sowohl Ausdruck mit einem Ergebnis als auch das Mittel für bedingte Ausführung von Anweisungen wegen des Effektes statt des Ergebnisses. Auch alles ”richtige” Programmiersprachen.

Re: Variablen kombinieren

Verfasst: Mittwoch 14. Oktober 2020, 22:59
von __deets__
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 20:07 Du schreibst schlicht und einfach Unfug.
Das ist ein ganz regulärer tenärer Operator
Das kann man sogar in Büchern nachlesen
und sogar noch weiter ausbauen. Das läßt sich
sogar in einen Print-Befehl einklinken.
Andern Unfug vorwerfen, aber selbst kräftig solchen verzapfen.

Denn natürlich ist das kein normaler ternärer Operator, sondern eine Hilfskonstruktion Zaus Zeiten, in den Python den noch nicht hatte. Mit einem bedeutenden semantischen Unterschied - er kürzt nämlich nicht ab. Mit deinem Konstrukt werden IMMER beide Zweige ausgewertet, und bei sowas hier

Code: Alles auswählen

(teuer(), teurer())[a == b]
zahlst du den Preis. Von wegen “der einzige Unterschied ist die Schreibweise”

Was übrigens auch in dem von dir zitierten Buch als Negativbeispiel steht. So weit wars dann mit dem Textverständnis nicht her.

Re: Variablen kombinieren

Verfasst: Donnerstag 15. Oktober 2020, 15:26
von DeaD_EyE
tonikae hat geschrieben: Mittwoch 14. Oktober 2020, 20:07 Du schreibst schlicht und einfach Unfug.
Das ist ein ganz regulärer tenärer Operator
Das kann man sogar in Büchern nachlesen
und sogar noch weiter ausbauen. Das läßt sich
sogar in einen Print-Befehl einklinken.
In Lehrbüchern steht viel Mist drin. Ein gutes Beispiel hast du uns präsentiert.

Ich halte mich an die Dokumentation von Python: https://docs.python.org/3/reference/exp ... xpressions
Dort wird auf PEP308 verwiesen: https://www.python.org/dev/peps/pep-0308/

Zeig mir die Stelle, wo deine Vorgehensweise als "ternary operator" beschrieben wird.