Zwei einstellige Variablen zu einer zweistelligen fassen

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
mr_matthew
User
Beiträge: 6
Registriert: Samstag 8. Dezember 2018, 14:20

Hallo.

Gibt es eine Möglichkeit zwei einstellige Variablen zu einer zweistelligen zusammenzufassen? Ich möchte zuerst eine zweistellige Zahl haben, bei der ich dann die Stellen vertauschen kann.
Hier mal ein Beispielcode:

Code: Alles auswählen

from random import *
x = randint(1, 9)
y = x+2
z = xy
Das xy soll später meine neue Zahl sein.
Ich kenne durchaus die Möglickeit mit

Code: Alles auswählen

z = x, y
, allerdings habe ich dann ja immer noch zwei separate Zahlen.

Vielen Dank!
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du nur deine x aufschreiben solltest, welche Zahlen waeren das denn (fuer die Zahlen von 0-99)?
mr_matthew
User
Beiträge: 6
Registriert: Samstag 8. Dezember 2018, 14:20

Tut mir leid ich verstehe deine Frage nicht so ganz.
Ich möchte aus jeweils einer einstelligen Zahl eine zweistellige machen, bei der ich beliebig die Stellen ändern kann.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich verstehe schon, was du willst. Ich will, dass du dir Gedanken machst, was eine Ziffer an einer Stelle stehend eigentlich bedeutet. Wir reden ja hier ueber das Dezimalsystem. Oder Zehnersystem. Da stecken die Worte 10 und System drin.....
mr_matthew
User
Beiträge: 6
Registriert: Samstag 8. Dezember 2018, 14:20

Achso.
Also nur die Zahl x wäre, in dem von dir genannten, Bereich eine Zahl zwischen 0 und 9.
Y ist dann diese Zahl x plus 2. Allerdings habe ich mir noch keine Gedanken gemacht, was passiert wenn x 8 oder 9 ist.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso plus zwei? Mal. Und 10.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ich möchte zuerst eine zweistellige Zahl haben, bei der ich dann die Stellen vertauschen kann.
Was heißt denn "...bei der ich dann die Stellen vertauschen kann?"

Was hast du eigentlich vor bzw. was ist der Hintergrund der Frage? Vielleicht gibt es eine andere / bessere Lösung als deinen jetzigen Ansatz.

Gruß, noisefloor
mr_matthew
User
Beiträge: 6
Registriert: Samstag 8. Dezember 2018, 14:20

Also Hintergrund ist folgender: Im Mathe Unterricht haben wir kürzlich alte Zahlenrätsel wiederholt. Eines davon hatte ich gelöst und dachte mir im Nachhinein, dass das auch mit Python zu lösen ist. Aufgabenstellung ist folgende:
Bei einer zweistelligen Zahl unterscheiden sich die Ziffern um 2. Vertauscht man die Ziffern, so entsteht eine um 18 größere Zahl. Wie heißt die Zahl?
Wie bereits gesagt hab die Aufgabe bereits gelöst. Die Ausgangszahl ist die 24.
Mein Ansatz war dem Programm alle Verhältnisse zu vermitteln (deshalb x = (1, 9) und y = x+2). Ich wollte die Zahl in eben beide Bestandteile zerlegen, die ich dann später umdrehen kann, um die um 18 größere Zahl 42 zu erhalten.
Dazu ist halt vonnöten die Variabel x, die bei Erfolg 2 ist, und die Variabel y, die dann 4 wäre, zur dritten Variabel also 24 zu fassen. Gleiches gilt für 4 und 2 für 42.

Hoffe das hilft weiter
MfG
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@mr_matthew: Dir ist klar, dass für jede Zahl gilt, die man nach der Regel im ersten Satz erzeugt? 13 - 31, 24 - 42, 35 - 53, 46 - 64, 57 - 75, 68 - 86, 79 - 97.

Wie hast Du denn das Rätsel von Hand gelöst?
mr_matthew
User
Beiträge: 6
Registriert: Samstag 8. Dezember 2018, 14:20

Ich muss ehrlich antworten: Das war mir nicht klar. Per Hand habe ich das Rätsel durch einfaches Raten gelöst. Ich hab einmal geraten und bin dabei sofort auf 24 - 42 gekommen.
Das heißt mein Programm funktioniert.
Vorhin war ich so auf meine Lösung eingeschossen, dass ich die anderen Outputs meines Programm gar nicht erst überprüft habe.
Oh man.
Nun ja weiterhin hätte ich der Optik zu liebe im Output statt (2, 4) und (4, 2) lieber 24 und 42.
Frage: Wie setze ich das um?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Das kann man einfach durch Stringformatierung lösen. Wie sieht denn das Programm jetzt aus?
mr_matthew
User
Beiträge: 6
Registriert: Samstag 8. Dezember 2018, 14:20

Sirius3 hat geschrieben: Samstag 8. Dezember 2018, 20:03 Wie sieht denn das Programm jetzt aus?

Code: Alles auswählen

from random import *

for i in range (1):
    x = randint(1, 7)
    y = x+2
    z = x,y
    nz = y,x

print(x)
print(y)
print(z)
print(nz)
Legt keinen Wert auf Schönheit, funktioniert aber.
Vorheriges Problem habe ich grad live beim Antworten gelöst. Hatte x = randint(1, 9) was aber bei den Ziffern 8 und 9 mit der zweistelligen Zahl nicht mehr hinhaut. Wie oben zu sehen hab ichs angepasst.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das ist aber nicht wirklich eine Lösung... Weil: du prüfst gar nicht auf die Bedingung das xy+18 = yx ist.

Wenn man einen ganz stumpfen Brute-Force Ansatz nimmt, dann iteriert man einfach über den in Frage kommenden Zahlenraum. Was bei 10-99 ja ein vertretbarer Aufwand ist:

Code: Alles auswählen

for zahl in range(10, 100):
    zehner, einer = divmod(zahl, 10)
    if zehner+2 == einer:
        gedreht = einer*10+zehner
        if gedreht-zahl==18:
            print('Das Zahlenpaar {} - {} erfüllt die Bedingung'.format(zahl, gedreht))
Gruß, noisefloor
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

mr_matthew hat geschrieben: Samstag 8. Dezember 2018, 19:33 Also Hintergrund ist folgender: Im Mathe Unterricht haben wir kürzlich alte Zahlenrätsel wiederholt. Eines davon hatte ich gelöst und dachte mir im Nachhinein, dass das auch mit Python zu lösen ist.
Um das "Verdrehen" zweistelliger Zahlen rechnerisch zu lösen, brauchst du die normale Division, die Abrunden-Funktion (floor/Gaußklammer) und den Divisionsrest (Modulo). Die von noisefloor gezeigte Funktion "divmod" vereint dies praktischerweise; statt der ersten beiden kann man in Python auch den Operator '//' für Ganzzahldivision verwenden. Die Gaußklammer und insb. Modulo sind vermutlich nicht direkt Schulstoff, zumindest aber indirekt vermutlich schon bekannt (z.B. vom schriftlichen Dividieren). Insb. Modulo ist für Programmierer sehr nützlich; falls du das noch nicht kennst, schau es dir vielleicht mal näher an.
Antworten