Форум сайта python.su
0
#! coding: utf-8 import random # Это колода карт cardList = [ {'5 pik':5}, {'6 pik':6}, {'7 pik':7}, {'8 pik':8}, {'9 pik':9}, {'10 pik':10}, {'Valet pik':11}, {'Dama pik':12}, {'King pik':13}, {'Tuz pik':14} ] # Карты юзера 1 userCards = [] while len(userCards) < 5: # Берем 5 карт из колоды x = random.randint(0,9) y = cardList[x] userCards.append(y) # Пытаемся делать карты юзера 2, но скрипт крашится #userCards2 = cardList.remove(userCards) #print userCards2 print('Карты пользователя:') print userCards print print('Карты в колоде:') print cardList
Отредактировано pit_toner (Апрель 15, 2012 18:06:54)
Офлайн
0
userCards2 = cardList del userCards
тоже крашится, что я не так дела?
Офлайн
173
pit_tonerБез удаления карт из cardList можно вот так:
но не могу понять как сделать карты для юзера 2.
userCards2 = [card for card in cardList if card not in userCards]
userCards = random.sample(cardList, 5)
Отредактировано reclosedev (Апрель 15, 2012 14:55:23)
Офлайн
0
Вы совершенно правы, карту нужно удалять! Как это можно лучше сделать? Я так понимаю и choice и sample карты в списке оставляют. Функция del что то не работает со словарем или я ее не так использую.
Офлайн
0
Сейчас проверил, что метод choice не подходит, т.к. он возвращает не уникальный элемент списка, и может раздать юзеру 2 одинаковые карты из колоды))
Офлайн
0
Может подойдет.
import random CL = [{'5p':5},{'6p':6},{'6p':6},{'7p':7},{'8p':8},{'9p':9},{'10p':10},{'11p':11},{'12p':12}] k = len(CL)-1 usercard = [] j = len(usercard) while j < 5: usercard.append(CL.pop(random.randint(0,k))) j +=1 k = len(CL)-1 usercard2 = CL print (usercard) print (usercard2)
Офлайн
0
Just_for_fun неа reclosedev предложил просто идеальный вариант раздела карт из колоды. Проблема в другом. Изначально. Я сделал карты как словарь, а колоду ввиде списка. Думал сравнивать первые карты в списке карт у юзеров по их ключу, и так расчитывать кто какую карту побил, но похоже Питон не дает возможности сравнить разные значения из разных словарей по ключу. Это так? Прийдется делать каждую карту как отдельную переменную и присваивать ей значение.
Офлайн
0
Вот новая версия кода:
#! coding: utf-8 import random # Карты piki_5 = 5 piki_6 = 6 piki_7 = 7 piki_8 = 8 piki_9 = 9 piki_10 = 10 piki_Valet = 11 piki_Dama = 12 piki_King = 13 piki_Tuz = 14 # Колода карт cardList = [ piki_5, piki_6, piki_7, piki_8, piki_9, piki_10, piki_Valet, piki_Dama, piki_King, piki_Tuz ] # Карты юзера 1 userCards1 = random.sample(cardList, 5) # Карты юзера 2 userCards2 = [card for card in cardList if card not in userCards1] x = random.randint(0,4) if userCards1[x] > userCards2[x]: print 'win user 1' if userCards1[x] < userCards2[x]: print 'win user 2' if userCards1[x] == userCards2[x]: print 'equal' print print('Карты пользователя 1:') print userCards1 print print('Карты пользователя 2:') print userCards2 print print('Карты в колоде:') print cardList print(' Число х:') print x
Отредактировано pit_toner (Апрель 15, 2012 18:48:26)
Офлайн
173
pit_toner, учитывая то, что нужно удалять карты из колоды, код у Just_for_fun как раз правильный.
pit_tonerА вот здесь не очень понятно, что пытаетесь сделать.
Думал сравнивать первые карты в списке карт у юзеров по их ключу, и так расчитывать кто какую карту побил, но похоже Питон не дает возможности сравнить разные значения из разных словарей по ключу. Это так? Придется делать каждую карту как отдельную переменную и присваивать ей значение.
[('5 pik', 5), ('6 pik', 6), ...]
[{'name': '5 pik', 'points': 5}, {'name': '6 pik', 'points':6}...]
if userCards1[0][1] > userCards1[0][1]: ...
Офлайн
0
Ну удаление карт из колоды вроде как здесь не принципиально, главное чтобы одинаковые карты не достались, а также были у каждого разные. Про кортеж оч.интересный вариант.
Офлайн