J'ai le code suivant:
l = ['-1.2', '0.0', '1']
x = 100.0
for i in l:
if i < x:
x = i
print x
Le code devrait trouver la valeur la plus basse de ma liste (-1.2), mais au lieu d’imprimer «x», la valeur est toujours 100.0 Où mon code va-t-il mal tourner?
Vous ne comparez pas des nombres entiers, vous comparez des chaînes. Les chaînes comparent lexicographiquement (sens par caractère) au lieu de (comme vous semblez vouloir) convertir la valeur en float. Faites en sorte que votre liste conserve des nombres (flottants ou entiers, selon ce que vous voulez), ou convertissez les chaînes en flottants ou en entiers dans votre boucle, avant de les comparer.
Vous pouvez également être intéressé par la fonction intégrée min
, qui fait déjà ce que fait votre boucle actuelle (sans la conversion, c’est-à-dire).
Il semble que vous souhaitiez convertir la liste en une liste de nombres
>>> foo = ['-1.2', '0.0', '1']
>>> bar = map(float, foo)
>>> bar
[-1.2, 0.0, 1.0]
>>> min(bar)
-1.2
ou si vous voulez vraiment utiliser les chaînes, vous voulez utiliser l'argument min
de key
>>> foo = ['-1.2', '0.0', '1']
>>> min(foo, key=float)
'-1.2'
Python a une fonction min
intégrée pour vous aider à trouver le plus petit.
Cependant, vous devez convertir vos éléments de liste en nombres avant de pouvoir trouver le nombre entier le plus bas (quoi, n'est-ce pas flottant?)
min(float(i) for i in l)
l
est une liste de chaînes. Lorsque vous placez des chiffres entre guillemets simples, vous créez des chaînes, qui ne sont qu'une séquence de caractères. Pour que votre code fonctionne correctement, vous devez procéder comme suit:
l = [-1.2, 0.0, 1] # no quotation marks
x = 100.0
for i in l:
if i < x:
x = i
print x
Si vous devez utiliser une liste de chaînes, vous pouvez laisser Python essayer de créer un nombre à partir de chaque chaîne. Ceci est similaire à la réponse de Justin , sauf qu'elle comprend correctement les nombres à virgule flottante (décimale).
l = ['-1.2', '0.0', '1']
x = 100.0
for i in l:
inum = float(i)
if inum < x:
x = inum
print x
J'espère que c'est ce code que vous écrivez pour apprendre soit Python, soit la programmation en général. Si c'est le cas, génial. Toutefois, s'il s'agit d'un code de production, envisagez d'utiliser les fonctions intégrées de Python.
l = ['-1.2', '0.0', '1']
lnums = map(float, l) # turn strings to numbers
x = min(lnums) # find minimum value
print x
Convertissez la variable en float avant de faire la comparaison:
if float(i) < float(x):
Le problème est que vous comparez des chaînes à des flottants, ce qui ne fonctionnera pas.
number_list = [99.5,1.2,-0.3]
number_list.sort()
print number_list[0]
list1 = [10,-4,5,2,33,4,7,8,2,3,5,8,99,-34]
print(list1)
max_v=list1[0]
min_v=list1[0]
for x in list1:
if x>max_v:
max_v=x
print('X is {0} and max is {1}'.format(x,max_v))
for x in list1:
if x<min_v:
min_v=x
print('X is {0} and min is {1}'.format(x,min_v))
print('Max values is ' + str(max_v))
print('Min values is ' + str(min_v))
Vous devez commencer quelque part, le code correct devrait être:
Le code pour renvoyer la valeur minimale
l = [ '0.0', '1','-1.2']
x = l[0]
for i in l:
if i < x:
x = i
print x
Mais encore une fois, il est bon d’utiliser directement des entiers au lieu d’utiliser des guillemets ''
Par ici !
l = [ 0.0, 1,-1.2]
x = l[0]
for i in l:
if i < x:
x = i
print x
l = [-1.2, 0.0, 1]
x = 100.0
for i in l:
if i < x:
x = i
print (x)
C’est la réponse, j’en avais besoin comme devoir, j’ai pris votre code et j’ai supprimé le "" autour des chiffres, puis ça a marché, j’espère que cela a aidé
Ou aucune conversion de float en spécifiant simplement des floats dans la liste.
l = [-1.2, 0.0, 1]
x = min(l)
ou
l = min([-1.2, 0.0, 1])
Vous avez des chaînes dans la liste et vous les comparez au nombre 100.0.
'''Les fonctions'''
import math
#functions
def min3(x1,x2,x3):
if x1<= x2 and x1<= x3:
return x1
Elif x2<= x1 and x2<= x3:
return x2
Elif x3<= x2 and x3<= x1:
return x3
print(min3(4, 7, 5))
print(min3(4, 5, 5))
print(min3(4, 4, 4))
print(min3(-2, -6, -100))
print(min3("Z", "B", "A"))