2017-08-07 71 views
0

我已經寫了一段代碼,用於21卡招功課:如何在不添加任何值的情況下定義列表?

def random_list(): 
     suits = ["D","S","C","h"] 
     cardnumbers = ["A",2,3,4,5,6,7,8,9,"J","Q","K"] 
     point1 = point = m = 0 
     List1 = [] 
     List2 = [] 
     List3 = [] 
     listnames = [List1], [List2], [List3] 
     while point < 3: 
       y = listnames[m] 
       m = m + 1 
       while point1 < 7: 
         randomsuite = random.randint(0,3) 
         randomnumber = random.randint(0,11) 
         x = cardnumbers[randomnumber],suits[randomsuite]; 
         y.append(x) 
         point1 = point1 + 1 
       point = point + 1 
       point1 = 0 
     return listnames 

此打印:

list1 = [[], (6, 'h'), (4, 'S'), (4, 'D'), (7, 'h'), ('A', 'D'), ('Q', 'D'), (9, 'C')] 
list2 = [[], ('J', 'C'), ('A', 'h'), ('K', 'S'), (7, 'D'), (9, 'h'), (7, 'C'), ('A', 'h')] 
list3 = [[], (6, 'C'), (4, 'h'), (5, 'D'), ('J', 'D'), (2, 'S'), (4, 'h'), (8, 'S')] 

每個表的第一值是「[]」,這是破壞代碼的其餘部分。我試圖從列表中刪除值,但它有這個錯誤***'元組'對象沒有屬性'刪除'*** 謝謝

+4

你想'listnames = [列表1,列表2,項目list3]' - 一個3元素列表,而不是三個1元組元素列表。 – jasonharper

+0

非常感謝你 –

+0

順便說一句,「套裝」的單數是「套裝」,而不是「套房」。你爲什麼使用while循環而不是'for循環? –

回答

0

你非常接近:只需要把三個列表到listnames

import random 
def random_list(): 
     suits = ["D","S","C","h"] 
     cardnumbers = ["A",2,3,4,5,6,7,8,9,"J","Q","K"] 
     point1 = point = m = 0 
     List1 = [] 
     List2 = [] 
     List3 = [] 
     listnames = [List1, List2, List3] 
     while point < 3: 
       y = listnames[m] 
       m = m + 1 
       while point1 < 7: 
         randomsuite = random.randint(0,3) 
         randomnumber = random.randint(0,11) 
         x = cardnumbers[randomnumber],suits[randomsuite]; 
         y.append(x) 
         point1 = point1 + 1 
       point = point + 1 
       point1 = 0 
     return listnames 

list1, list2, list3 = random_list() 
print "list1: ", list1 
print "list2: ", list2 
print "list3: ", list3 

list1: [('A', 'S'), ('Q', 'C'), (2, 'S'), ('K', 'D'), (7, 'h'), (4, 'C'), ('A', 'S')] 
list2: [(5, 'D'), (6, 'h'), ('J', 'h'), (8, 'h'), ('J', 'S'), ('A', 'D'), (2, 'h')] 
list3: [(7, 'S'), (7, 'C'), (8, 'D'), ('A', 'C'), (5, 'h'), (2, 'D'), (9, 'S')] 
+0

謝謝我現在已經完成了 –

0

你應該構建listnames作爲一個列表包括List1List2List3所以這樣listsnames = [List1, List2, List3]

但是(不知道你爲什麼要製作一個三元素元組列表)如果你真的想做出一個三元組元組列表,你可以在最後刪除[]。如果[]總是在一開始那麼就做一個清理你返回listnames

def random_list(): 
     suits = ["D","S","C","h"] 
     cardnumbers = ["A",2,3,4,5,6,7,8,9,"J","Q","K"] 
     point1 = point = m = 0 
     List1 = [] 
     List2 = [] 
     List3 = [] 
     listnames = [List1], [List2], [List3] 
     while point < 3: 
       y = listnames[m] 
       m = m + 1 
       while point1 < 7: 
         randomsuite = random.randint(0,3) 
         randomnumber = random.randint(0,11) 
         x = cardnumbers[randomnumber],suits[randomsuite]; 
         y.append(x) 
         point1 = point1 + 1 
       point = point + 1 
       point1 = 0 
     for x in range(0, len(listnames)): #clean up here 
      listnames[x].pop(0) 
     return listnames 

打印之前:

print(random_list()[0]) 
print(random_list()[1]) 
print(random_list()[2]) 

結果

[(9, 'D'), (8, 'C'), ('J', 'h'), (9, 'h'), (2, 'D'), (3, 'C'), (3, 'S')] 
[(3, 'S'), (2, 'h'), (2, 'S'), (2, 'D'), (4, 'D'), (9, 'D'), ('Q', 'C')] 
[('Q', 'C'), ('K', 'S'), (4, 'h'), (3, 'D'), ('Q', 'S'), (6, 'C'), ('J', 'S')] 
0

這個循環是一個問題:

while point1 < 7: 
    randomsuite = random.randint(0,3) 
    randomnumber = random.randint(0,11) 
    x = cardnumbers[randomnumber],suits[randomsuite]; 
    y.append(x) 
    point1 = point1 + 1 

因爲它可以讓你兩次交易同一張牌(在友好的遊戲中並不好)。你可以在你的list2輸出中看到這個,其中('A', 'h')出現兩次。讓我們來解決這個問題,和你原來的問題,並在此過程簡化代碼:

from random import choice 

def random_list(deals_per_list=3, cards_per_deal=7): 
    suits = ["D", "S", "C", "H"] 
    cardnumbers = ["A", 2, 3, 4, 5, 6, 7, 8, 9, "J", "Q", "K"] 

    list_of_deals = [] 
    for _ in range(deals_per_list): 
      list_of_deals.append([]) 

    for deal in list_of_deals: 
     while len(deal) < cards_per_deal: 
      card = (choice(suits), choice(cardnumbers)) 
      if card not in deal: 
       deal.append(card) 

    return list_of_deals 

deals = random_list() 

for n, deal in enumerate(deals, start=1): 
    print("deal{}".format(n), deal) 
+0

我已經修復了,但不是以相同的方式。我使用了不同的功能來創建一個完整的套牌,然後隨機選取並刪除另一個套牌,以避免同一張牌獲得兩次。謝謝 –

相關問題