On vous décrit les charrettes qui composent une caravane, en vous donnant pour chacune, le poids des marchandises qu'elle transporte.
Votre programme doit déterminer quel poids ajouter ou retirer à chaque charrette, pour qu'elles transportent toutes ensuite le même poids, et ce sans modifier le poids total transporté par l'ensemble des charrettes de la caravane.
Entrée
L'entrée commence par un entier nbCharrettes (nbCharrettes <= 3000) : le nombre de charrettes de la caravane.
Les nbCharrettes lignes suivantes décrivent chacune une charrette par un nombre décimal : le poids qu'elle transporte initialement.
Sortie
Vous devez afficher nbCharrettes nombres décimaux sur la sortie : le poids à ajouter à chaque charrette (ce qui revient à en retirer si ce nombre est négatif), dans le même ordre que celui de l'entrée. Il n'y a pas d'arrondis à faire.
Exemple
entrée :
5
40.0
12.0
20.0
5.0
33.0
sortie :
-18.0
10.0
2.0
17.0
-11.0
Commentaires
Dans cet exemple, on modifie toutes les charettes pour qu'elles transporte chacune un poids de 22.0, soit un total de 110 pour la caravane, comme au départ.
Voici mon code et le message d'erreur qui s'affiche :
nbCharettes=int(input())
Caravane=[0]*nbCharettes
PoidsTotal=0
for idCharette in range (nbCharettes):
poidsCharette=float(input())
Caravane[poidsCharette]=Caravane[poidsCharette]+poidsCharette
PoidsTotal=PoidsTotal+poidsCharette
Moyenne=PoidsTotal/nbCharettes
for poidsCharette in range(nbCharettes):
if Caravane[poidsCharette]>Moyenne:
Caravane[poidsCharette]= Moyenne - Caravane[poidsCharette]
if Caravane[poidsCharette]<Moyenne:
Caravane[poidsCharette]= Moyenne - Caravane[poidsCharette]
print(Caravane[poidsCharette])
Traceback (most recent call last):
line 6
Caravane[poidsCharette]=Caravane[poidsCharette]+poidsCharette
TypeError: list indices must be integers, not float
J'imagine que ma liste n'accepte que des nombres entiers? SI quelqu'un peu m'aider sur ce point et éventuellement me dire si je suis sur la bonne voie niveau code?
nbCharettes=int(input())
Caravane=[0]*nbCharettes
PoidsTotal=0
for idCharette in range (nbCharettes):
poidsCharette=float(input())
Caravane[idCharette]=poidsCharette
PoidsTotal+=poidsCharette
Moyenne=PoidsTotal/nbCharettes
for idCharette in range(nbCharettes):
if Caravane[idCharette]>Moyenne:
Caravane[idCharette]= Moyenne - Caravane[idCharette]
if Caravane[idCharette]<Moyenne:
Caravane[idCharette]= Moyenne - Caravane[idCharette]
print(Caravane[idCharette])
Échec
Message de l'évaluateur :
Nombre total de valeurs affichées : 5
Votre valeur numero 1 (40.0000000000) est à une distance supérieure à 10.0 de la reponse attendue.
Erreur dans le résultat.
0 %
Test 2
Succès
Exécuté en 0,05 seconde.
100 %
Test 3
Succès
Exécuté en 0,05 seconde.
100 %
Test 4
Échec
Erreur dans le résultat.
0 %
Du coup, comment limiter le nombre de 0 après la virgule, si l'erreur ne vient que de là lol... ? Merci
L'erreur ne vient pas de nombre de 0 après la virgule, j'avais mal lu la fin de ton code, et il est faux :
Tu veux calculer l'écart qu'il y a entre le poids de ta charrette et ta moyenne,
for idCharette in range(nbCharettes):
Caravane[idCharette] = Caravane[idCharette] - Moyenne #si le poids < moyenne, l'écart sera negatif, sinon positif
Mais dans le début de ton code Caravane[idcharette] c'est le poids de ta charrette et ensuite tu le transforme pour être l'écart entre le poids et la moyenne, c'est pas super, tu devrais plutôt créer une nouvelle liste pour t'y retrouver plus simplement.
Désolé j'ai pas fait gaffe j'ai dis des âneries Pour le coup dans l'exemple que tu donnes tu voit bien que peu importe ta condition tu fait la même chose, donc ta condition sert à rien.
J'ai testé un peu et avec ce code ca fonctionne :
nbCharettes=int(input())
Caravane=[0]*nbCharettes
PoidsTotal=0
for idCharette in range (nbCharettes):
poidsCharette=float(input())
Caravane[idCharette]=poidsCharette
PoidsTotal+=poidsCharette
Moyenne=PoidsTotal/nbCharettes
print(Moyenne)
for idCharette in range(nbCharettes):
Caravane[idCharette]= Moyenne - Caravane[idCharette]
print(Caravane[idCharette])
Ce qui fait que ca marchait pas pour toi c'est que ici :
if Caravane[idCharette]>Moyenne:
Caravane[idCharette]= Moyenne - Caravane[idCharette]
if Caravane[idCharette]<Moyenne:
Caravane[idCharette]= Moyenne - Caravane[idCharette]
Tu changes la valeur du poids ligne 2 pour en faire ton écart, et du coup il est possible que ligne 3 ta condition soit remplie et qu'il rechange l'écart.
nbCharrettes=int(input())
poids_total=0
poids_liste=[]
for i in range (nbCharrettes):
poids=float(input())
poids_total=poids_total+poids
poids_liste.append(poids)
goal_poids=(poids_total/nbCharrettes)
item=0
for i in range (len(poids_liste)):
print(goal_poids-poids_liste[item])
item=item+1
Il semble que le sujet n'a pas été fermé par la modération. Le PO s'est connecté en février. Voici donc mon petit grain de sel: - nbCharettes = int(input()) charettes = [float(input()) for _ in range(nbCharettes)] moyenne = sum(charettes) / nbCharettes print(*[moyenne - c for c in charettes], sep='\n', end='')
Le Tout est souvent plus grand que la somme de ses parties.
Il semble que le sujet n'a pas été fermé par la modération. Le PO s'est connecté en février. Voici donc mon petit grain de sel: - nbCharettes = int(input()) charettes = [float(input()) for _ in range(nbCharettes)] moyenne = sum(charettes) / nbCharettes print(*[moyenne - c for c in charettes], sep='\n', end='')
Mon petit grain de poivre :
dans le print, inutile de créer une liste (un générateur suffit) et le end n'est pas utile (pour passer les tests)
écrire un oneliner, sans bien sûr recalculer à chaque fois la moyenne
tBravo, je viens de sauver une ligne: nbCharettes=len(charettes:=[float(input()) for _ in range(int(input()))]) moyenne=sum(charettes)/nbCharettes print(*[moyenne-c for c in charettes],sep='\n') Mais je ne vois pas comment tout mettre dans une ligne sans réévaluer la moyenne.
Le Tout est souvent plus grand que la somme de ses parties.
tBravo, je viens de sauver une ligne: nbCharettes=len(charettes:=[float(input()) for _ in range(int(input()))]) moyenne=sum(charettes)/nbCharettes print(*[moyenne-c for c in charettes],sep='\n') Mais je ne vois pas comment tout mettre dans une ligne sans réévaluer la moyenne.
ben, tu peux encore mettre des walrus, et nbCharette ne sert qu'une seule fois, donc ...
Après je ne sais pas comment a fait PascalOrtiz, moi j'ai "triché" en chaînant le calcul et le print, car on ne peut pas utiliser les walrus dans les générateurs/compréhension.
Après je ne sais pas comment a fait PascalOrtiz, moi j'ai "triché" en chaînant le calcul et le print, car on ne peut pas utiliser les walrus dans les générateurs/compréhension.
J'ai fait comme ceci :
print(*[[M - c for c in L] for L in [[float(input()) for _ in range(int(input()))]] for M in [sum(L)/len(L)]][0], sep='\n')
Intéressant, merci. J'utilise pas souvent walrus mais il peut simplifier pas mal de choses sans trop obscurcir. Pour france-ioi, il est pas encore supporté.
Je me suis rendu jusque là: moyenne = sum(charettes:=[float(input()) for _ in range(int(input()))]) / len(charettes) print(*[moyenne-c for c in charettes],sep='\n') Mais je fais piètre figure maintenant ... Je vais regarder attentivement vos solutions.
Le Tout est souvent plus grand que la somme de ses parties.
@PascalOrtiz: Amélioration magistrale Remplacer len(L) par n tout simplement. Quand tu me parlais de générateur, faire print(*(...)) au lieu de print(*[...]), c'est ce que tu voulais dire?
Le Tout est souvent plus grand que la somme de ses parties.
Quand tu me parlais de générateur, faire print(*(...)) au lieu de print(*[...]), c'est ce que tu voulais dire?
Absolument. Mais les générateurs ont quand même leurs limites : ils sont jetables. Ainsi, dans ton code, on ne pouvait pas remplacer ta première liste par un générateur.
Boinsoooir, perso je l'ai fait de cette manière et ca a fonctionné pour ceux qui veulent:
nbCharettes = int(input())
i = [0] * nbCharettes
b = 0
c = 0
for loop in range(nbCharettes):
i[loop] = float(input())
b = i[loop] + b
b = b / nbCharettes
for loop in range(nbCharettes):
i[loop] = i[loop] - b
if i[loop] > 0:
c = i[loop]
c = i[loop] - i[loop] - i[loop]
else:
if i[loop] < 0:
c = i[loop]
c = i[loop] - i[loop] - i[loop]
else:
c = 0
i[loop] = c
print(c)
lignes 12 et 16 inutiles, ton bloc condition fait 2 fois la même chose, et revient en fait à tester si i[loop] !=0 (le dernier else correspondant à i[loop]==0)
la ligne 20 ne sert à rien non plus, puisque loop passe loop+1 en revenant au début de la boucle
de plus, si on on se penche sur l'opération réalisée au final, on a c = (i[loop]-b) - (i[loop]-b) - (i[loop]-b) = - (i[loop]-b) = b-i[loop] c'est plus simple, non ?
Bonjour, je voulais savoir ce qui n'allait pas avec mon programme et éviter de juste copier celui des autres. L'exercice est le même. Merci d'avance
Il ne faut pas que ton code soit placé dans une image, fais un copier coller de ton code dans une zone de code (bouton </>).
Sinon, ton erreur vient de ta variable poids, tu n'a pas mémorisé les poids dans une liste donc tu travailles en fait avec la dernière occurrence de cette variable.
@cernunnos! Bonjour, merci de ne pas déterrer d'ancien sujet, créer le votre en postant votre code avec l'outil d'intégration de code du forum soit le bouton code </> de la barre d'outil du forum.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Découverte Python Doc Tkinter Les chaînes de caractères
Le Tout est souvent plus grand que la somme de ses parties.
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.
Python c'est bon, mangez-en.
Découverte Python Doc Tkinter Les chaînes de caractères
Python c'est bon, mangez-en.
Découverte Python Doc Tkinter Les chaînes de caractères
Le Tout est souvent plus grand que la somme de ses parties.
Découverte Python Doc Tkinter Les chaînes de caractères
Le Tout est souvent plus grand que la somme de ses parties.
Découverte Python Doc Tkinter Les chaînes de caractères
PB68
Le Tout est souvent plus grand que la somme de ses parties.
Découverte Python Doc Tkinter Les chaînes de caractères