Mon programme génère une chaîne aléatoire avec un nombre aléatoire de lettres de 10 à 20.

def program():
    import random
    import sys
    x=['q','w','e','r']
    y=random.randint(10,20)
    for t in range (0,y):
       w=random.randint(0,3)
       e=x[w]
       sys.stdout.write(e)

Le programme imprimera une chaîne aléatoire comme «wwwweewwqqrrrrwwqqeeqqww». Comment pourrais-je stocker cette chaîne en tant que variable?

1
John Mathew 17 avril 2018 à 23:36

6 réponses

Meilleure réponse

Stockez-le dans une variable au lieu d'écrire:

e=''

for t in range (0,y):
    w=random.randint(0,3)
    e += x[w]

e est une variable vide et à chaque fois que vous y ajoutez la valeur x[w].

Je recommanderais également d'utiliser print() sur sys.stdout.write(e) car vous n'avez pas besoin d'importations supplémentaires, telles que sys, print() est intégré.

Dans ce cas, puis-je suggérer l'utilisation d'un tuple pour x=['q','w','e','r'] car ils sont plus rapides. Donc: x=('q','w','e','r'1)

Mais si vous devez modifier cela plus tard, ce n'est pas une option à votre disposition (car ils sont immuables).

3
Simon 17 avril 2018 à 20:52
def program():
   import random
   x=['q','w','e','r']
   y=random.randint(10,20)
   mystr=''
   for t in range (0,y):
      w=random.randint(0,3)
      e=x[w]
      mystr=mystr+e
2
Anonymous 17 avril 2018 à 20:43

Vous pouvez remplacer votre boucle par une compréhension de liste et utiliser join():

e = ''.join([random.choice(x) for _ in range(0, y)])

Production:

qwewwwereeeqeqww
3
user3483203 17 avril 2018 à 20:49

Si vous le souhaitez, vous pouvez demander à program() de renvoyer la variable de sortie comme suit:

def program():
    import random
    import sys
    x=['q','w','e','r']
    y=random.randint(10,20)
    output = ''
    for t in range (0,y):
        w=random.randint(0,3)
        e=x[w]
        output+=e
    # The print is stored in 'output'

    # Return the output
    return output
result = program()
1
Aaron N. Brock 17 avril 2018 à 20:46

Quelque chose comme (je n'ai pas testé le programme, ça devrait marcher ... les derniers mots célèbres).

# imports at start of file, not in def
import random
import sys

# I would never call a def 'program', kind of generic name, avoid
def my_program():  # camel case, PEP-8
    x=['q','w','e','r']
    z=''  # initialize result as an empty string
    for _ in range (0, random.randint(10,20)):
       z+=x[random.randint(0,3)]  # add a letter to string z
    return z  

"_" est souvent utilisé pour une variable jetable, voir A quoi sert la variable de soulignement unique" _ "en Python? Dans ce cas, le _ n'est utilisé nulle part.

1
MZA 17 avril 2018 à 20:54

Un moyen simple de le faire serait de créer une nouvelle variable de chaîne et d'utiliser simplement l'opérateur += pour concaténer chaque caractère sur une nouvelle chaîne. Votre code pourrait être

 def program():
   import random
   import sys
   x=['q','w','e','r']
   y=random.randint(10,20)
   z = '';
   for t in range (0,y):
      w=random.randint(0,3)
      e=x[w]
      z += e;

Ce code ajoute simplement chaque caractère à une variable de chaîne z dans votre boucle for, et cette valeur de chaîne doit être stockée dans z.

1
bluewind03 17 avril 2018 à 20:49