~~Je ne connais pas de fonction intégrée, mais en écrire une comme [this](https://stackoverflow.com/a/477610/623735) ne devrait pas être trop compliqué.
def frange(x, y, jump):
while x < y:
yield x
x += jump~~ \---
Comme le mentionnent les commentaires, cela pourrait produire des résultats imprévisibles, comme par exemple :
>>> list(frange(0, 100, 0.1))[-1]
99.9999999999986
Pour obtenir le résultat attendu, vous pouvez utiliser l'une des autres réponses à cette question, ou comme @Tadhg l'a mentionné, vous pouvez utiliser decimal.Decimal
comme le jump
argument. Veillez à l'initialiser avec une chaîne de caractères plutôt qu'avec un flottant.
>>> import decimal
>>> list(frange(0, 100, decimal.Decimal('0.1')))[-1]
Decimal('99.9')
Ou même :
import decimal
def drange(x, y, jump):
while x < y:
yield float(x)
x += decimal.Decimal(jump)
Et puis :
>>> list(drange(0, 100, '0.1'))[-1]
99.9
[Si vous n'utilisez que des mots positifs jump
et un démarrage et un arrêt entiers ( x
y y
), cela fonctionne bien. Pour une solution plus générale, voir aquí .]
2 votes
Ce ne sont pas des fractions mais des flottants. Et les flottants sont... susceptibles de donner des résultats différents de ceux auxquels vous vous attendez.
8 votes
Une solution rapide serait de traiter les entiers comme des décimales, par exemple :
range(5, 50, 5)
et ensuite diviser chaque nombre par 10.0 votes
@delnan - mis à jour. Je suis prêt à accepter des inexactitudes infimes pour la commodité d'avoir une plage de valeurs flottantes.
2 votes
Duplicata possible de Valeur de l'étape Python decimal range()
0 votes
@NullUserException - ceci est juste un exemple - le vrai code est bien sûr paramétrique :)
0 votes
@Jonathan Rien ne vous empêche d'écrire un wrapper pour
range()
:)0 votes
En fait, je m'attendrais à ce que la gamme supporte les flotteurs. Étant donné la philosophie "Batteries incluses"...
0 votes
Vous trouverez beaucoup plus d'informations sur la surprenante variété de bonnes et de mauvaises réponses à cette question dans la section Valeur de l'étape Python decimal range() question, et le frange(), une fonction de plage avec des incréments de type float (Code ActiveState) auquel il se réfère.
0 votes
Duplicata possible de Comment utiliser une valeur décimale de l'étape range() ?