2011-08-14 3 views
3

저는 파이썬에 익숙하지 않고 random.choice 함수에 인수를 전달하는 데 문제가 있습니다.python 쿼리 - 함수 인수가 잘못된 형식입니까?

기본적으로 나는 임의의 문자 (다른 목록의 모든 이름)를 'a'목록에서 선택하여 시작한 다음, 선택한 문자를 생성하기 위해 random.choice에 다시 입력하는 루프를 작성하려고합니다. 무작위 문자의 연속.

불행히도 random.choice에 대한 두 번째 호출이 작동하지 않고 새로운 목록을 가리키는 대신 입력 된 문자가 계속 반복됩니다. 어떤 생각을 어떻게 해결할 수 있을까요? 몇 시간 동안 온라인에서 봤지만 비슷한 문제/해결책을 찾을 수 없습니다. 어떤 도움을 많이 주시면 감사하겠습니다!

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 

답변

4

변수와 데이터를 혼합하고 코드를 데이터로 처리하려는 일반 초보자의 함정에 빠졌습니다. 일반적으로 그렇게하려고해서는 안됩니다. 변수의 이름을 다른 변수에 넣지 않고 그런 식으로 액세스하려고 시도하지 마십시오. 대신

는, 다음과 같이 그 구조에 액세스하는 데이터 구조에서 함께 모든 데이터를 유지하고, 당신의 변수를 사용

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 
+0

변수와 데이터 사이의 어떤 차이가 참조리스트? 변수 이름은 구문상의 설탕 뒤에 숨겨진 사전의 항목 일뿐입니다. 다운 voting으로 간주되지만, 지나치게 단순화하는 경우에도 귀하의 방법은 여전히 ​​올바른 방법입니다. – agf

+1

두 개의 분리 된 코드를 유지하면 코드를 이해하기 쉽고 의도하지 않은 결과없이 쉽게 변경할 수 있습니다. (모든 프로그래밍은 단지 기계어 일 뿐이므로 구문 적 설탕 뒤에 숨겨져있다. @declanb 코드를 기계어로 직접 작성하지 않아도된다. :-)) – RichieHindle

+0

아니요.하지만 'getattr'을 사용하는 것이 좋은 경우가 있습니다. 사전 키와 객체 속성 이름 사이에는 실제적인 차이가 없다는 생각은 파이썬이 어떻게 작동하는지 이해하는 데 중요합니다. – agf

0

음 ... 하나의 문제는 항상 ANSWER2를 얻고 있다는 것입니다 같은 목록에서 다른 과제를 수행하지 않으므로 ...

-1

그냥 x == 'c'이라고 가정합니다. random.choice에 대한 두 번째 호출은 실제로는

answer2 = random.choice('c') 

입니다. 이것은 'c'만 포함 된 목록에서 문자를 선택하는 것과 같습니다. 이 NOT 다음에 해당입니다 : 당신은 변수 c에 의해 참조리스트로 문자열 'c' 변환해야

answer2 = random.choice(c) 

.

이 매핑은 일 수

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

값 [ 'C'] 가변 c

관련 문제