Seite 1 von 1
Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 14:30
von mr_matthew
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:
Das xy soll später meine neue Zahl sein.
Ich kenne durchaus die Möglickeit mit
, allerdings habe ich dann ja immer noch zwei separate Zahlen.
Vielen Dank!
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 14:47
von __deets__
Wenn du nur deine x aufschreiben solltest, welche Zahlen waeren das denn (fuer die Zahlen von 0-99)?
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 14:56
von mr_matthew
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.
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 15:07
von __deets__
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.....
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 15:27
von mr_matthew
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.
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 15:59
von __deets__
Wieso plus zwei? Mal. Und 10.
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 19:02
von noisefloor
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
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 19:33
von mr_matthew
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
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 19:40
von Sirius3
@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?
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 19:54
von mr_matthew
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?
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 20:03
von Sirius3
Das kann man einfach durch Stringformatierung lösen. Wie sieht denn das Programm jetzt aus?
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 20:27
von mr_matthew
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.
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 20:40
von noisefloor
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
Re: Zwei einstellige Variablen zu einer zweistelligen fassen
Verfasst: Samstag 8. Dezember 2018, 23:29
von nezzcarth
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.