2015-10-18 3 views
0

Медленно работая на симулятор блэкджека с кли. Я только начал с него, поэтому я не слишком глубоко в него, но я уже получаю нечетные результаты: иногда, когда я запускаю код ниже, он дает мне нормальный вывод (например, 4 of Clubs, 9 of Spades), но иногда он дает мне вывод, например c of Diamonds или i of Clubs. Поскольку у меня нет ничего, установленного в c или i, определенных в функции Card, я не могу понять, почему это даст мне такой вид вывода. Кто-нибудь может мне это объяснить?Получение нечетного вывода от блэкджека sim

import random 

def Card(): 
    cardValue = random.randint(2,10) 
    suits = ["Clubs", "Diamonds", "Hearts", "Spades"] 
    special = ['Ace', 'King', 'Queen', 'Jack'] 
    special = random.choice(special) 
    suit = random.choice(suits) 
    special = random.choice(special) 
    randO = random.randint(1,52) 
    if randO > 16: 
     print(cardValue,'of',suit) 
    else: 
     if special == 'Ace': 
      cardValue = 11 
      print(special,'of',suit) 
     else: 
      cardValue = 10 
      print(special,'of',suit) 

Card() 
Card() 
+2

Это нехороший способ провести случайную выборку. Он не корректирует карты, которые уже удалены пчелами из колоды. Вы должны сделать колоду из 52 карточек, возможно (ранг, костюм), а также извлечь (и удалить) случайные карточки из колоды. В противном случае вы рано или поздно окажетесь с Ace of Spades в двух разных руках или что-то в этом роде. – saulspatz

+0

Спасибо за отзыв, очень оцененный - я действительно столкнулся с проблемой Ace of Spades * 2. – n1c9

+0

Вы также можете random.shuffle в списке, возвращаемом диапазоном (1, 53), а затем берете карты в порядке, так как колода «перетасована». –

ответ

1

Вы слишком часто используете special.

special = ['Ace', 'King', 'Queen', 'Jack'] 

Прямо сейчас, особый список.

special = random.choice(special) 

Теперь это либо «Туз», либо «Царь», или «Королева» или «Джек».

suit = random.choice(suits) 
special = random.choice(special) 

И теперь, когда вы выполняете эту строку еще раз, это означает «выбрать случайный характер от того, что слово special есть».

Дайте special лучшее имя - не используйте его для обозначения как списка, так и слова - и вам не нужно звонить random.choice(special) дважды.

+0

Удивительный! Это исправило это. Спасибо, @DSM! – n1c9

Смежные вопросы