Seite 1 von 1
staatsverschuldung in prozent des bip
Verfasst: Freitag 1. März 2013, 23:43
von sophie_marie
Hallo zusammen,
ich habe ein kleines Programm geschrieben, das die Staatsverschuldung im Verhältnis zum BIP berechnet und hätte hier ein, zwei Fragen, ob und wie es vielleicht besser wäre:
Code: Alles auswählen
staatsverschuldung = [10, 21, 29,45, 64, 130, 239, 388, 538, 1019, 1211, 1490, 2021, 2150]
bip = [50, 92, 155, 235, 361, 551, 789, 984, 1307, 1849, 2048, 2224, 2496, 2644]
index = 0
start = 1950
# die Daten beziehen sich jeweils auf 5-Jahres-Zeiträume
for x in staatsverschuldung:
prozent = (float(x)/float(bip[index]))*100
print start, ": ", prozent
index += 1
start += 5
Gibt es eine Möglichkeit, das float zu umgehen oder anders zu setzen (außer, alle Daten mit .0 einzugeben)?
Und vor allem: Gibt es eine Alternative zu meinem "index"?
Die Daten stimmen übrigens und beziehen sich auf Deutschland (wobei die letzten Daten in den Listen für 2012 gelten und nicht, wie ausgegeben, für 2015).
Re: staatsverschuldung in prozent des bip
Verfasst: Samstag 2. März 2013, 00:28
von BlackJack
@sophie_marie: Du könntest einen ``from __future__ import division`` als ersten Import in das Modul setzen. Davor darf ausser Kommentaren und Docstring nichts stehen. Dadurch werden alle Divisionen im Modul mit ``/`` zu Fliesskommadivisionen. Ein `float()`-Aufruf hätte übrigens genügt.
Für `start` könntest Du `enumerate()` ansehen und den Wert dann aus der Zahl berechnen und den Zugriff mit `index` wirst Du mit `itertools.izip()` los. Alternativ zu `enumerate()` könnte man auch `itertools.count()` in der Lösung verwenden.
Re: staatsverschuldung in prozent des bip
Verfasst: Samstag 2. März 2013, 09:30
von snafu
Eine der vielen Möglichkeiten:
Code: Alles auswählen
from __future__ import division
STARTJAHR = 1950
ANSTIEG = 5
schulden = [10, 21, 29,45, 64, 130, 239, 388,
538, 1019, 1211, 1490, 2021, 2150]
bips = [50, 92, 155, 235, 361, 551, 789, 984,
1307, 1849, 2048, 2224, 2496, 2644]
jahre = xrange(STARTJAHR, len(bips) * ANSTIEG + STARTJAHR, ANSTIEG)
for (verschuldung, bip, jahr) in zip(schulden, bips, jahre):
prozent = verschuldung / bip * 100
print jahr, ': ', prozent
Re: staatsverschuldung in prozent des bip
Verfasst: Samstag 2. März 2013, 10:17
von BlackJack
Eine weitere der vielen Möglichkeiten:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
from __future__ import division
from itertools import count, izip
def main():
startjahr = 1950
schrittweite = 5
schulden = [
10, 21, 29,45, 64, 130, 239, 388, 538, 1019, 1211, 1490, 2021, 2150
]
bips = [
50, 92, 155, 235, 361, 551, 789, 984, 1307, 1849, 2048, 2224, 2496,
2644
]
assert len(schulden) == len(bips)
jahre = count(startjahr, schrittweite)
for jahr, jahres_schulden, bip in izip(jahre, schulden, bips):
print '{0}: {1:6.2f}%'.format(jahr, jahres_schulden / bip * 100)
if __name__ == '__main__':
main()
Re: staatsverschuldung in prozent des bip
Verfasst: Samstag 2. März 2013, 10:21
von Sirius3
eine andere ohne future division:
Code: Alles auswählen
from itertools import izip, count
schulden = [10, 21, 29,45, 64, 130, 239, 388,
538, 1019, 1211, 1490, 2021, 2150]
bips = [50, 92, 155, 235, 361, 551, 789, 984,
1307, 1849, 2048, 2224, 2496, 2644]
for jahr, verschuldung, bip in izip(count(1950,5),schulden, bips):
prozent = 100.0 * verschuldung / bip
print '%4d: %4.1f'%(jahr, prozent)
Re: staatsverschuldung in prozent des bip
Verfasst: Samstag 2. März 2013, 10:59
von BlackJack
Und noch eine Alternative mit einer externen Bibliothek (`pandas`), die man vielleicht mal anschauen sollte wenn man öfter mit dem Analysieren von solchen Daten zu tun hat.
Code: Alles auswählen
import pandas as pd
def main():
startjahr = 1950
schrittweite = 5
schulden = [
10, 21, 29,45, 64, 130, 239, 388, 538, 1019, 1211, 1490, 2021, 2150
]
bips = [
50, 92, 155, 235, 361, 551, 789, 984, 1307, 1849, 2048, 2224, 2496,
2644
]
assert len(schulden) == len(bips)
data = pd.DataFrame(
{'schulden': schulden, 'BIP': bips},
pd.DateRange(
pd.datetime(startjahr, 1, 1),
periods=len(schulden),
offset=pd.datetools.YearBegin(schrittweite)
),
dtype=float
)
print data
for year, ratio in (data['schulden'] / data['BIP'] * 100).iteritems():
print '{0:%Y}: {1:6.2f}%'.format(year, ratio)
if __name__ == '__main__':
main()