web-dev-qa-db-fra.com

Fonction aléatoire Python

J'ai des problèmes avec la fonction d'importation aléatoire de Python. Il semble que import random et from random import random importent des choses différentes. J'utilise actuellement Python 2.7.3

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> random()

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
    random()
NameError: name 'random' is not defined
>>> random.randint(1,5)

Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
random.randint(1,5)
NameError: name 'random' is not defined
>>> import random
>>> random()

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
random()

TypeError: 'module' object is not callable
>>> random.randint(1,5)
2
>>> from random import random
>>> random()
0.28242411635200193
>>> random.randint(1,5)

Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
random.randint(1,5)
AttributeError: 'builtin_function_or_method' object has no attribute 'randint'
>>> 
9
donsavage

import random importe le random module , qui contient diverses tâches relatives à la génération de nombres aléatoires. Parmi ceux-ci, la fonction random () function , qui génère des nombres aléatoires compris entre 0 et 1.

Pour importer de cette manière, vous devez utiliser la syntaxe random.random().

La fonction aléatoire peut également être importée du module séparément: 

from random import random

Cela vous permet d'appeler simplement random() directement.

24
jam

Le module random contient une fonction nommée random(); vous devez donc savoir si vous avez importé le module dans votre espace de noms ou si vous avez importé des fonctions du module.

import random importera le module aléatoire alors que from random import random importera spécifiquement la fonction aléatoire à partir du module.

Vous pourrez donc effectuer l’une des opérations suivantes:

import random
a = random.random()
b = random.randint(1, 5)
# you can call any function from the random module using random.<function>

ou...

from random import random, randint   # add any other functions you need here
a = random()
b = randint(1, 5)
# those function names from the import statement are added to your namespace
15
Andrew Clark

Le problème est qu’il ya deux choses appelées aléatoires ici: l’une est le module lui-même et l’autre est une fonction dans ce module. Vous ne pouvez pas avoir deux choses avec le même nom dans votre espace de noms, vous devez donc choisir l'une ou l'autre.

9
Mark Ransom
import random 

inclut le module dans l’espace de noms sous le nom 'random'.

from random import random

inclut la fonction 'aléatoire' de l'espace de noms 'aléatoire' dans l'espace de noms global.

Ainsi, dans le premier exemple, vous appelez random.random et dans le second, aléatoirement. Les deux accéderaient à la même fonction.

De même,

from random import randint

importerait randint dans l’espace de noms global, vous pourrez donc simplement appeler randint au lieu de random.randint.

5
argentage

Eh bien, oui, ils importent des choses différentes. import random importe le module random, from random import random importe la fonction random à partir du module random. C’est en fait un bon exemple de la raison pour laquelle lors de la conception d’une API en Python, il est souvent préférable d’éviter de nommer les modules et leurs membres de la même manière.

3
Silas Ray

Le module 'random' est un paquet de la bibliothèque standard Python, ainsi qu'une fonction définie dans ce paquet.

Utiliser 'import random' permet d'importer le package, que vous pouvez ensuite utiliser avec la fonction de ce package: 'random.random ()'. Vous pouvez également utiliser toute autre fonction du paquetage «aléatoire».

Vous pouvez également demander à python d'importer spécifiquement uniquement la fonction aléatoire du paquet random: 'from random import random'. Ensuite, vous ne pouvez utiliser que la fonction 'random ()', et vous ne devez pas spécifier le paquet dont il provient. Cependant, vous ne pouvez utiliser aucune autre fonction du paquetage aléatoire, car elles n'ont pas été importées si vous utilisez 'from random random random'.

1
Adrien Plisson

Vous devez importer la fonction aléatoire fonction à partir du module aléatoireavant de pouvoir l'utiliser. 

In [1]: from random import random

In [2]: random()
Out[2]: 0.5607917948041573
0
Death

Si vous utilisez PyDev ou un autre IDE intelligent, assurez-vous qu'il n'a pas importé le module automatiquement, ce qui annule votre importation. Cela peut être particulièrement déroutant ici, lorsque le nom du module est égal à un nom de fonction, car l'erreur renvoyée n'est pas une NameError. Dans mon cas j'ai ajouté

import random

et plus tard utilisé:

r = random.radom()

mais j'ai:

AttributeError: 'builtin_function_or_method' object has no attribute 'random'

Ce n’est qu’après une recherche que PyDev a ajouté automatiquement la ligne.

from random import random

jusqu’à la fin de mes importations, j’appelais donc l’attribut random de la méthode random. La solution consiste à supprimer l’importation automatique ou à l’utiliser et d’appeler directement la méthode random().

0
comodoro

Si vous utilisez from random import random, vous devez appeler randint () comme suit: randint(1,5). Si vous utilisez import random, vous l’appelez ainsi: random.randint(1,5).

0
RobH