Mein Programm generiert eine zufällige Zeichenfolge mit einer zufälligen Anzahl von Buchstaben von 10 bis 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)

Das Programm druckt eine zufällige Zeichenfolge wie 'wwwweewwqqrrrwwqqeeqqww'. Wie würde ich diese Zeichenfolge als Variable speichern?

1
John Mathew 17 Apr. 2018 im 23:36

6 Antworten

Beste Antwort

Speichern Sie es in einer Variablen, anstatt zu schreiben:

e=''

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

e ist eine leere Variable und jedes Mal, wenn Sie den Wert x[w] hinzufügen.

Ich würde auch empfehlen, print() über sys.stdout.write(e) zu verwenden, da Sie keine zusätzlichen Importe benötigen - wie sys, print() ist eingebaut.

In diesem Fall kann ich die Verwendung eines Tupels für x=['q','w','e','r'] vorschlagen, da diese schneller sind. Also: x=('q','w','e','r'1)

Wenn Sie dies jedoch später ändern müssen, steht Ihnen diese Option nicht zur Verfügung (da sie unveränderlich sind).

3
Simon 17 Apr. 2018 im 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 Apr. 2018 im 20:43

Sie können Ihre Schleife durch ein Listenverständnis ersetzen und join() verwenden:

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

Ausgabe:

qwewwwereeeqeqww
3
user3483203 17 Apr. 2018 im 20:49

Wenn Sie möchten, können Sie program() die Ausgabevariable wie folgt zurückgeben:

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 Apr. 2018 im 20:46

So etwas wie (habe das Programm nicht getestet, sollte funktionieren ... berühmte letzte Worte).

# 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  

"_" wird häufig für eine Wegwerfvariable verwendet, siehe Was ist der Zweck der einzelnen Unterstrichvariablen" _ "in Python? In diesem Fall wird das _ nirgendwo verwendet.

1
MZA 17 Apr. 2018 im 20:54

Eine einfache Möglichkeit, dies zu tun, besteht darin, eine neue Zeichenfolgenvariable zu erstellen und einfach den Operator += zu verwenden, um jedes Zeichen auf eine neue Zeichenfolge zu verketten. Ihr Code könnte sein

 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;

Dieser Code fügt jedes Zeichen nur einer Zeichenfolgenvariablen z in Ihrer for-Schleife hinzu, und dieser Zeichenfolgenwert sollte in z gespeichert werden.

1
bluewind03 17 Apr. 2018 im 20:49