簡體   English   中英

定義 function 給出 Python 中給定范圍內的隨機值

[英]Define function which gives random values in a given range in Python

我正在 python 中進行二十一點游戲,沒有graphicspygame ,但我需要它,所以如果他們使用hit選項,它應該給他們一張完全其他價值的卡。 我看過在 python 中,是否有一個變量每次都是不同的隨機數? ,以及許多其他網站。 我沒有關於如何做到這一點的信息。 代碼:D

suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs')
ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace')
values = {'Two':2, 'Three':3, 'Four':4, 'Five':5, 'Six':6, 'Seven':7, 'Eight':8, 'Nine':9, 'Ten':10, 'Jack':10,'Queen':10, 'King':10, 'Ace':11}

###Printing Random
s = lambda: secure_choice.choice(suits)
r = lambda: secure_choice.choice(ranks)
ds = secure_choice.choice(suits)
dr = secure_choice.choice(ranks)
v = values.get(r)
dv = values.get(dr)


def pullCard():
    print(f"You pulled a {r} of {s} the value is {v}")
    print(f"The dealer pulled a {dr} of {ds} the value is {dv}")



def dealerOnly():
    print('You standed')



pullCard()

Answer = str(input('Do you want to Hit or Stand?')).lower()
if Answer == 'stand':
    dealerOnly()
elif Answer == 'hit':
    pullCard()

我認為可行的方法:


def ReValueCard():
    s = secure_choice.choice(suits)
    r = secure_choice.choice(ranks)

我認為您正在尋找的答案是這樣做並更改需要匹配的變量。 為此使用內置的 python 導入random數,並使用定義的命令random.randint找到您的隨機卡

import random

oldcard = 7
# the old card would be updated with every last old card
while randomcard == oldcard:
    randomcard = random.randint(2, 11)
else:
    print(randomcard)

希望這會有所幫助!

如果您只需要它每次都是隨機卡,而不是不同的隨機卡,您可以這樣做:

import random

randomcard = random.randint(2, 11)

print(randomcard)

如果你也想要一套隨機套裝,只需對 1-4 應用random.randint命令,然后將每個套裝定義為什么套裝

:D

使用諸如random.randint / random.choice / random.randrange之類的東西生成單獨的隨機數存在避免重復的問題(畢竟你不想從一副牌中處理五個 A)。 最簡單的解決方案是實際制作一個包含所有值的牌組,將其洗牌,然后按順序處理,就像在現實世界中一樣。

要制作你的套牌,你只需要花色和等級的product

import itertools
import random

suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs')
ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace')

deck = list(itertools.product(suits, ranks))

然后你用相當明顯的名字random.shuffle

random.shuffle(deck)  # Shuffles in place

現在,要從套牌中發牌,只需按需彈出卡片:

randomcard = deck.pop()

如果他們選擇再次擊中,只需再次調用deck.pop()即可獲得一張隨機但不重復的卡片。 如果您想從多副牌中發牌以使算牌更加困難,只需在洗牌前將您的牌相乘:

deck = list(itertools.product(suits, ranks)) * 5  # Deal from five decks, not 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM