• [^] # Re: Python

    Posté par . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 3. Dernière modification le 21 juillet 2021 à 00:05.

     # compare the capital of both and select the base for the calculation for the next
     # step (capital of the poorest)
     if people[a] < people[b]:
     base = people[a]
     else:
     base = people[b]

    ou simplement

    base = min(people[a], people[b])

    et je pense que ça peut se passer de commentaire.
    On peut aussi alléger la lecture avec des écritures comme :

    Ce qui donne :

    a -= base * (RATE + DRATE)
    b += base * (RATE + DRATE)

    Et, comme je lis assiduement linuxfr, je change le shebang.

    Enfin comme propose SChauveau pas besoin du random() et pas besoin du +1 pour le nombre d'itérations

    #!/usr/bin/env python3
    from random import randint
    from statistics import mean, median, pstdev
    NB_PEOPLE = 500
    AMOUNT_START = 2000
    NB_LOOP = 5000000
    RATE = 0.2
    DRATE = 0.05
    def pays(customer, seller base):
     # no advantage for the poorest as no poorest
     if seller == customer:
     customer -= base * RATE
     seller += base * RATE
     # poorest receive the money so add DRATE in the transfer
     elif seller > customer:
     customer -= base * (RATE + DRATE)
     seller += base * (RATE + DRATE)
     # poorest pay the money so deduct DRATE in the transfer
     else:
     customer -= base * (RATE - DRATE)
     seller += base * (RATE - DRATE)
     return seller, customer
    people = [AMOUNT_START] * NB_PEOPLE
    for _ in range(0, NB_LOOP):
     # select two random people
     a = randint(0, NB_PEOPLE - 1)
     b = randint(0, NB_PEOPLE - 1)
     base = min(people[a], people[b])
     people[a], people[b] = pays(people[a], people[b], base)
    # final, show the results
    people = sorted([int(p) for p in people])
    print(f"Last tranfert base: {base}.")
    print(f"people: {', '.join(str(p) for p in people)}")
    print(f"avg: {mean(people)} | median: {median(people)} | pstdev: {pstdev(people)}")

    Je me suis permis :

    • d'arrondir les montants à la fin pour la lisibilité
    • de trier les données pour la lisibilité encore
    • d'ajouter un calcul de moyenne, de médiane et d'écart-type

    Perso j'observe une explosion des inégalités avec les itérations (mais ça reste au jugé, je n'ai pas fais des masses d'exécutions). Je me demande s'il s'agissait d'appauvrissement en relatif ou absolue. Ici la planche à billet tourne à fond les ballons (il y a 50 fois plus d'argent qu'à l'état initial), mais la progression des patrimoines entre les riches et les pauvres est très... contrastée ?

    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll