Deine Denkweise funktioniert so zwar in der Mathematik, aber Programmiersprachen brauchen’s da etwas ausführlicher. ☺
Wenn du einfach so „Xi“ schreibst, dann legt Python einfach nur eine einzige Variable namens „Xi“ an. Dein Index wird nicht verstanden – der geht einfach verloren. Die Variable heißt wirklich wortwörtlich „Xi“. Das heißt, deine Schleife liest ein „Xi“ ein und ein „Yi“, aber beim nächsten Schleifendurchlauf werden diese beiden Werte wieder überschrieben. Du musst hier ganz explizit eine Liste von Werten anfertigen. Zum Beispiel so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #!/usr/bin/env python2
# coding: utf-8
# Anzahl der Isotope
print "Bitte geben Sie die Anzahl der Isotope an!"
iso = raw_input()
iso = int(iso)
# Lege Xi und Yi als leere Listen an. In der Schleife wird in jedem
# Durchlauf ein Element an diese Listen angehängt.
Xi = []
Yi = []
for i in range(1, iso+1):
print "Bitte geben Sie den Anteil des", i, ". Isotops am Element an!"
x = raw_input()
Xi += [float(x)]
print "Bitte geben Sie die Atommasse des", i, ". Isotops an!"
y = raw_input()
Yi += [float(y)]
A = sum(map(lambda a, b: a * b, Xi, Yi))
print "mittlere Atommasse:", A
|
Du siehst da auch, dass du in (zumindest in Python) Variablen neue Werte zuordnen kannst. Ist nicht in allen Programmiersprachen so, hier aber schon. Deswegen brauchst du zum Beispiel kein „iso“ und „Iso“, sondern kannst das „iso“ einfach überschreiben. Oder du wendest das „int()“ direkt auf „raw_input()“ an. Bezüglich „input()“ übrigens mal die Warnung hier lesen.
Das „A“ am Ende bedarf wohl auch noch einer Erklärung. Ich habe das jetzt so verstanden, dass du ursprünglich
A = \sum_{i = 0}^{iso - 1} x_i \cdot y_i
gemeint hast. Das heißt für den ersten Schritt, zwei zusammengehörige Werte aus den Listen „Xi“ und „Yi“ müssen multipliziert und als neuer Wert irgendwo gespeichert werden. Das macht die „map
“-Funktion mit dem „lambda
“-Ausdruck. Um das mal isoliert zu betrachten, so sieht das aus:
| >>> Xi = [1, 2, 3, 4]
>>> Yi = [3, 3, 3, 3]
>>> map(lambda a, b: a * b, Xi, Yi)
[3, 6, 9, 12]
|
„map
“ durchläuft beide Listen und wendet den Ausdruck darauf an. „lambda a, b: a * b
“ sieht also im ersten Fall für „a“ eine 1 (erster Wert aus „Xi“) und für „b“ eine 3. Das wird verrechnet und als 3 in der neuen Liste gespeichert. Danach kommt „2 * 3“, dann „3 * 3“ und so weiter. Bei diesem Vorgang entsteht die neue Liste „[3, 6, 9, 12]
“.
Im letzten Schritt wird auf diese neue Liste dann „sum
“ angewendet.
Hilft dir das so irgendwie weiter?