2013-12-19 3 views
1

현재 저는 파이썬으로 카지노를 만들고 있습니다. 어리석은 짓을하다가 나는별로 문제가되지 않았다. 그러나 혼란. 나는 이것을 잠시 동안 알아 내려고 노력해 왔습니다. 내 출력은 눈에 띄는 패턴을 따르지 않지만 매번 똑같습니다.내 출력에 의해 혼동 됨

import random 
import time 
import string 
import os 
import platform 

def clear(): 
    operSys = platform.system() 
    if operSys.lower() == "Windows": 
     os.system('cls') 
    else: 
     os.system('clear') 

cards = {"Ace of Spades":'1', 
     "Ace of Clubs":'1', 
     "Ace of Diamonds":'1', 
     "Ace of Hearts":'1', 

     "Two of Spades":'2', 
     "Two of Clubs":'2', 
     "Two of Diamonds":'2', 
     "Two of Hearts":'2', 

     "Three of Spades":'3', 
     "Three of Clubs":'3', 
     "Three of Diamonds":'3', 
     "Three of Hearts":'3', 

     "Four of Spades":'4', 
     "Four of Clubs":'4', 
     "Four of Diamonds":'4', 
     "Four of Hearts":'4', 

     "Five of Spades":'5', 
     "Five of Clubs":'5', 
     "Five of Diamonds":'5', 
     "Five of Hearts":'5', 

     "Six of Spades":'6', 
     "Six of Clubs":'6', 
     "Six of Diamonds":'6', 
     "Six of Hearts":'6', 

     "Seven of Spades":'7', 
     "Seven of Clubs":'7', 
     "Seven of Diamonds":'7', 
     "Seven of Hearts":'7', 

     "Eight of Spades":'8', 
     "Eight of Clubs":'8', 
     "Eight of Diamonds":'8', 
     "Eight of Hearts":'8', 

     "Nine of Spades":'9', 
     "Nine of Clubs":'9', 
     "Nine of Diamonds":'9', 
     "Nine of Hearts":'9', 

     "Ten of Spades":'10', 
     "Ten of Clubs":'10', 
     "Ten of Diamonds":'10', 
     "Ten of Hearts":'10', 

     "Jack of Spades":'11', 
     "Jack of Clubs":'11', 
     "Jack of Diamonds":'11', 
     "Jack of Hearts":'11', 

     "Queen of Spades":'12', 
     "Queen of Clubs":'12', 
     "Queen of Diamonds":'12', 
     "Queen of Diamonds":'12', 

     "King of Spades":'13', 
     "King of Clubs":'13', 
     "King of Diamonds":'13', 
     "King of Hearts":'13'} 

for x in cards: 
    print x + ' : ' + cards[x] 

출력 : 파이썬 (대부분의 다른 언어)에

Queen of Clubs : 12 
Ten of Hearts : 10 
Three of Spades : 3 
Nine of Spades : 9 
Ace of Clubs : 1 
King of Spades : 13 
Ace of Spades : 1 
Queen of Diamonds : 12 
Three of Hearts : 3 
Seven of Hearts : 7 
Two of Spades : 2 
Two of Hearts : 2 
Five of Hearts : 5 
Three of Clubs : 3 
Queen of Spades : 12 
Two of Clubs : 2 
Four of Diamonds : 4 
King of Diamonds : 13 
Ace of Diamonds : 1 
Five of Diamonds : 5 
Four of Spades : 4 
Six of Spades : 6 
Ten of Spades : 10 
Eight of Clubs : 8 
Jack of Clubs : 11 
Six of Diamonds : 6 
Two of Diamonds : 2 
Eight of Hearts : 8 
Jack of Hearts : 11 
Nine of Hearts : 9 
King of Hearts : 13 
Ace of Hearts : 1 
Seven of Spades : 7 
Six of Hearts : 6 
Ten of Clubs : 10 
Five of Spades : 5 
Jack of Spades : 11 
Eight of Spades : 8 
Ten of Diamonds : 10 
Four of Clubs : 4 
Eight of Diamonds : 8 
Jack of Diamonds : 11 
Six of Clubs : 6 
King of Clubs : 13 
Three of Diamonds : 3 
Nine of Clubs : 9 
Nine of Diamonds : 9 
Seven of Diamonds : 7 
Four of Hearts : 4 
Five of Clubs : 5 
Seven of Clubs : 7 
+2

이 대답은 설명합니다. http://stackoverflow.com/a/526131/770019 – bnjmn

답변

4

사전 암시 적 순서가 없습니다. 실제로는 정렬되지 않은 키 - 값 쌍을 대상으로하며 키 - 값 쌍의 순서를 유지하려고 시도하지 않습니다. 데이터 구조로서 목표는 다른 특성 (예 : 주문과 같은)을 희생시킨 값을 가능한 한 싸게 검색하는 것입니다.

마찬가지로 주문을 실제로 원한다면 키를 정렬 된 배열에 넣고 사전에서 값을 확인하거나 배열을 사용하여 모든 데이터를 첫 번째 위치에 저장할 수도 있습니다.

0

사전 카드은 귀하의 패턴입니까? 그렇다면 파이썬의 사전이 순서가없는 구조 (출력이 "패턴"과 다를 수 있기 때문에)이 잘못되었습니다.

2

dict 순서는 임의이다. 대신 다음을 시도하십시오.

for k, v in sorted(cards.items()): 
    print(k+':'+v) 

키별로 정렬합니다. 또한 BTW

reversed = [(v,k) for k, v in cards.items()] 
for v,k in sorted(reversed): 
     print(k+':'+v) 

: 항목의 값으로 정렬하는 단계 또는 두 가지 이상 소요 문자열의 .lower() 출력은 '윈도우'와 같은 혼합 된 경우의 문자열과 일치하지 않습니다.

+0

죄송합니다. 오타가 나타났습니다. 이 코드와 코드를 보내 주셔서 감사합니다. –