2014-02-12 5 views
0

다음은 필자가 작성한 프로그램의 코드 일부입니다. 꼭 기본입니다.Python 3.3에서 코드를 실행할 때 나타나는 임의의 오류 겉으로보기에

pc1 = random.choice(cards) 
cca1 = random.choice(cards) 
while (pc1 == cca1): 
    cca1 = random.choice(cards) 
ccb1 = random.choice(cards) 
while (pc1 == ccb1) or (cca1 == ccb1): 
    ccb1 = random.choice(cards) 

pc1, cca1ccb1은 사용의 용이성을위한 단축 변수의 이름입니다. 이 코드 부분이하는 일은 카드라는 사전에서 3 개의 항목을 가져 오는 것입니다. while 함수를 사용하여 선택한 카드가 동일하지 않도록합니다. 그들은 항상 달라질 것입니다. 단지입니다

Traceback (most recent call last): 
    File "C:\Python33\Programs\Poker\1.0.py", line 231, in <module> 
    ccc2 = random.choice(cards) 
    File "C:\Python33\lib\random.py", line 252, in choice 
    return seq[i] 
KeyError: 0 

(ccc2) 위의 오류가있는 변수 :

나는 (52)의 내 사전에서 9 개 고유의 변수를 가질 때까지 계속하고, 때때로 다음과 같은 오류가 발생을 제외하고 잘 작동 이전에 표시된 코드의 계속, 그리고 매번 오류가 발생할 것으로 추정되는 변수가 있습니다.

때로는 오류가 발생하기도하고 (때로는 프로그램이 제대로 실행되고 다른 오류가 발생하는 경우도 있음) 문제가 발생한 행은 모든 모양과 함께 변경됩니다. 코드가 비효율적이라고 이해하지만이 오류를 막으려 고합니다. 개선 방법에 대한 유용한 아이디어 나 힌트가 될 것입니다.

다시 한번; 그것의 가정하지만 무의식적으로 겉보기 임의의 원인 사이트의 임의의 시간에 언급 된 오류를 반환합니다.

미리 감사드립니다.

답변

5

방법은 random.choice 작품은 시퀀스가 ​​아니라 매핑을 위해 설계되었습니다. 그것은 인덱스를 선택하기 때문에 때로는 유효한 키가 아닌 cards[0]을 시도합니다. 오류가 임의로 나타나는 이유는 물론 값이 random에 따라 달라지기 때문입니다!

random.choice(list(cards)) 

더 일반적으로 코드를 개선하기 위해이 randomsample이 포함되어 있습니다 :

명시 적 시퀀스에서 선택하여이 문제를 해결할 수

rcards = random.sample(list(cards), 3) # pick three random cards 

참고 그 두 경우 모두, 우리 사전에서 을 무작위로 선택하십시오.

+0

대단히 감사합니다. 내 코드를 .keys() 제안과 함께 편집했으며 지금은 제대로 작동하는 것 같습니다. 또한 코드 개선을위한 권장 사항을 살펴볼 것입니다. 도움을 주셔서 감사합니다! – Russman

+0

헤이 존, 일찍 도와 줘서 고마워. 연습 해보고 제안 사항을 잊어 버렸다는 걸 깨닫고 열쇠가 아닌 사전 항목에서 값을 가져오고 싶다. 이것이 가능한가요, 어떻게 할 수 있습니까? – Russman

+0

키가 있으면 평소와 같이 값을 얻습니다 :'val = cards [key]'. 또는'cards.values ​​()'에서 무작위로/sample을 선택하십시오. – jonrsharpe