python - 总是与 20 点平局,二十一点
问题描述
该程序应该让用户抽两张牌,然后是计算机选择。我想要这样,如果这张牌最终是一张面牌,它将值设置为 10,而 Aces 设置为 1 或 11 的用户输入。目前它将绘制 2 张牌,无论结果如何,计算机和用户都会得到平分20分。
import random
import easygui
card_total = 0
ace_value = 0
#List of cards
cards = {2,3,4,5,6,7,8,9,10,12,13,14,15}
card1, card2 = random.sample(cards,2)
#list of suits
suits = ['Clubs', 'Hearts', 'Spades', 'Diamonds']
suit1, suit2 = random.sample(suits, 2)
#converts number to face card name
if card1 == 12:
card1 = 'Jack'
if card1 == 13:
card1 = 'Queen'
if card1 == 14:
card1 = 'King'
if card1 == 15:
card1 = 'Ace'
if card2 == 12:
card2 = 'Jack'
if card2 == 13:
card2 = 'Queen'
if card2 == 14:
card2 = 'King'
if card2 == 15:
card2 = 'Ace'
#displays cards
first_card = ("your first card is the {} of {}") .format(card1,suit1)
second_card = ("your second card is the {} of {}") .format(card2,suit2)
print (first_card)
print (second_card)
#If draw is a face card set card value to ten
if card1 == 'Jack' or 'Queen' or 'King':
card1 = 10
if card2 == 'Jack' or 'Queen' or 'King':
card2 = 10
#If draw is an ace allow user to select value of ace
if card1 == 'Ace':
ace_value = easygui.buttonbox('Do you want your ace value to be 1 or 11?','Blackjack',(1,11))
card1 = ace_value
if card2 == 'Ace':
ace_value = easygui.buttonbox('Do you want your ace value to be 1 or 11?','Blackjack',(1,11))
card2 = ace_value
card_total = card1 + card2
#-------------------------------------------------------------------------
comp_list = [1,11]
comp_cards = {2,3,4,5,6,7,8,9,10,12,13,14,15}
comp_card1, comp_card2 = random.sample(comp_cards,2)
#converts number to face card name
if comp_card1 == 12:
comp_card1 = 'Jack'
if comp_card1 == 13:
comp_card1 = 'Queen'
if comp_card1 == 14:
comp_card1 = 'King'
if comp_card1 == 15:
comp_card1 = 'Ace'
if comp_card2 == 12:
comp_card2 = 'Jack'
if comp_card2 == 13:
comp_card2 = 'Queen'
if comp_card2 == 14:
comp_card2 = 'King'
if comp_card2 == 15:
comp_card2 = 'Ace'
if comp_card1 == 'Jack' or 'Queen' or 'King':
comp_card1 = 10
if comp_card2 == 'Jack' or 'Queen' or 'King':
comp_card2 = 10
#If draw is an ace computer randomly selects value
if comp_card1 == 'Ace':
comp_ace_value = random.choice(comp_list)
comp_card1 = comp_ace_value
if comp_card2 == 'Ace':
comp_ace_value = random.choice(comp_list)
comp_card2 = comp_ace_value
comp_select = comp_card1 + comp_card2
#-------------------------------------------------------------------------
print("##############################")
print("Your total is {}") .format(card_total)
print("Dealer total is {}") .format(comp_select)
#-------------------------------------------------------------------------
#Now begin Processing of game rules
if card_total > 21:
print("You're bust! GAME OVER")
exit()
if comp_select > 21:
print("Dealer has gone over! You Win!")
exit()
if card_total > comp_select and card_total <= 21:
print("You have beaten the dealer! You Win!")
if card_total < comp_select and comp_select <= 21:
print("You have been beaten!")
if card_total == comp_select:
print("Tie game!")
解决方案
您的问题出在这一行:
if comp_card1 == 'Jack' or 'Queen' or 'King':
这不是or
操作员的工作方式。您需要重复操作:
if comp_card1 == 'Jack' or comp_card1 == 'Queen' or comp_card1 == 'King':
或者更好的是,使用in
运算符:
if comp_card1 in ('Jack', 'Queen', 'King'):
推荐阅读
- sql - 限制 ROW_NUMBER 对非重复值进行排序
- python - 将信息从一条路线传递到另一条路线:Flask ignoring redirect requests
- java - 在 Pivotal Cloud Foundry 上为 SpringBoot 应用程序外部化 Vault 令牌/后端配置
- javascript - 换页显示相同背景时获取当前类
- r - 为什么我的 ARIMA 模型可以工作 (2,0,3),但不能在一阶差分 (2,1,3) 中工作?
- javascript - 如何在 javascript 数组概念中添加 html 锚标记
- javascript - 如何在Angular中将子组件的@inputs和@outputs隐式暴露给祖父母?
- android - 如何在 Android 中使用 RecyclerView 和 AutoCompleteTextView
- php - 无法访问私有财产
- spring - 使用 Vaadin Flow 时如何获取 Springs 默认的 Whitelabel 错误页面