[sage] for-schleife innerhalb Liste

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
neu123
User
Beiträge: 3
Registriert: Dienstag 7. November 2017, 16:59

Hallo Leute, ich hoff ich bin hier richtig. Auf der Suche nach einer Lösung bin ich von den Sage-Seiten auf Phyton-Seiten verwiesen worden; entsprechend stelle ich meine Frage hier.

Ich muss in einer Menge die Summe über 2^i mit i={0-10} darstellen, wobei entsprechend die 'Zwischenergebnisse', also 1(=2^0), 5(=2^0+2^1), 15, usw auch gespeichert werden sollen.

1. Ansatz:
A = sum(2^i for i in range(0,11));A

spuckt mir 2047, also das richtige Endergebnis aus. Ich möchte aber die Zwischenergebnisse haben.

2. Ansatz
for i in range(1,12):
print[(sum(2^i for i in range(0,i)))];
Hier bekomme ich jetzt alles ausgegeben, allerdings in einer Spalte.
1
5
15
31
..


Hätte jemand einen Tipp, wie ich die Schleife innerhalb einer Liste dazu bekomme, auch die Zwischenergebnisse auszuspucken?
Danke im voraus.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@neu123: das kann nicht sein, denn 2^i sind keine Zweierpotenzen. Korrekt wäre 2**i, oder hat da Sage seine eigene Syntax. In dieser Reihe kommt auch nicht 5 vor, sondern nur 3 und 7. Ich habe da meine Zweifel, dass Du das überhaupt jemals selbst ausprobiert hast. Zum Problem, Du mußt erst eine Liste konstruieren und erst zum Schluß ausgeben.
neu123
User
Beiträge: 3
Registriert: Dienstag 7. November 2017, 16:59

Ups, keine ahnung wieso ich die Werte falsch eingetragen hab. Die richtige Rechnung steht da :) Ich änders gleich.

[1]
[3]
[7]
[15]
[31]
[63]
[127]
[255]
[511]
[1023]
[2047]

Das ist das, was Sage mir ausspuckt.
Eine Liste ist mein 1. Ansatz. da kriege ich aber nur ein Element raus. Und das '^' kann ich ohne Probleme nutzen.

Nachtrag:
for i in range(1,12):
A=(sum(2^i for i in range(0,i)));A
liefert
1
3
7
15
31
63
127
255
511
1023
2047

Wieder in einer Spalte. Allerdings ist die Aufgabenstellung, dass das ganze in einer Menge angegeben soll. Diese erzeugt man mit dem Befehl 'set'
s1 = set([1..10]) z.B.. Darüber habe ich es aber noch nicht probiert.
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

@neu123: Hilft dir das hier weiter? Ansonsten kann man das auch manuell so schreiben:

Code: Alles auswählen

sage: i = var("i")
sage: sum(2^i, i, 0, 10)
2047
sage: [sum(2^i, i, 0, n) for n in xrange(11)]
[1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047]
@Sirius3: `^` ist in Sage tatsächlich der Potenzoperator.
neu123
User
Beiträge: 3
Registriert: Dienstag 7. November 2017, 16:59

narpfel, vielen lieben Dank, das ist genau das richtige!
Antworten