3 Stimmen

python query - Funktionsargumente sind vom falschen Typ?

Ich bin ziemlich neu in Python und ich habe Probleme mit der Übergabe eines Arguments in der random.choice Funktion.

Im Grunde versuche ich, eine Schleife zu schreiben, die durch die Auswahl eines zufälligen Buchstabens (die alle Namen von anderen Listen sind) aus der 'a'-Liste beginnen wird, dann geben Sie den ausgewählten Buchstaben in random.choice wieder eine Folge von zufälligen Buchstaben zu erzeugen.

Leider funktioniert der zweite Aufruf von random.choice nicht, er wiederholt einfach den eingegebenen Buchstaben, anstatt auf eine neue Liste zu verweisen. Irgendwelche Ideen, wie man das beheben kann? ich habe ein paar Stunden lang online gesucht, kann aber keine ähnlichen Probleme/Lösungen finden.

import random

a = ['b','c','d']
b = ['a','e']
c = ['a','d','f']
d = ['a','c','e','f','g','h']
e = ['b','d','h']
f = ['c','d','g','i']
g = ['d','f','i']
h = ['d','e','g','i']
i = ['f','h']

x = 0
answer = random.choice(f)
print "answer is %s " % answer

while x < 5:
    answer2 = random.choice(answer) 
    print "answer2 is now %s " % answer2
    x = x + 1

4voto

RichieHindle Punkte 256891

Sie sind in die übliche Anfängerfalle getappt, Variablen und Daten zu verwechseln und zu versuchen, Ihren Code als Daten zu behandeln. Das sollten Sie in der Regel nicht tun - fügen Sie nicht den Namen einer Variablen in eine andere Variable ein und versuchen Sie, auf diese Weise auf sie zuzugreifen.

Halten Sie stattdessen alle Daten in einer Datenstruktur zusammen und verwenden Sie Ihre Variablen, um auf diese Struktur zuzugreifen, etwa so:

import random

DATA = {
    'a': ['b','c','d'],
    'b': ['a','e'],
    'c': ['a','d','f'],
    'd': ['a','c','e','f','g','h'],
    'e': ['b','d','h'],
    'f': ['c','d','g','i'],
    'g': ['d','f','i'],
    'h': ['d','e','g','i'],
    'i': ['f','h'],
}

x = 0
answer = random.choice(DATA['f'])
print "answer is %s " % answer

while x < 5:
    answer2 = random.choice(DATA[answer]) 
    print "answer2 is now %s " % answer2
    x = x + 1

0voto

codecraftnap Punkte 1553

Nun... ein Problem ist, dass du immer Antwort2 aus derselben Liste bekommst, da du keine anderen Aufgaben machst...

-1voto

wks Punkte 1158

Nur mal angenommen x == 'c' . Dann ist der zweite Aufruf von random.choice tatsächlich

answer2 = random.choice('c')

Das ist so, als würde man einen Buchstaben aus einer Liste auswählen, die nur "c" enthält. Das ist NICHT die dem Folgenden entsprechen:

answer2 = random.choice(c)

Sie müssen die Zeichenkette 'c' in eine Liste, auf die die Variable c .

Dieses Mapping kann funktionieren:

values = {
    "a": a, "b": b, "c": c, "d": d, "e": e,
    "f": f, "g": g, "h", h, "i": i, "j": j,
    }

Dann ist values['c'] die Liste, auf die die Variable c

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X