Python 当前列表、字符串和整数有问题

Python 当前列表、字符串和整数有问题,python,Python,我试图通过编写纸牌游戏21的一个版本来挑战自己,但我在字符串和整数方面遇到了问题。我的柜台也不工作,这是我无法理解的 我试着把一切都定义为一个整数 定义 我试图随机得到两张卡片,让程序告诉我我离21岁有多远,我是否已经破产。 cardnum1和cardnum2似乎没有正确添加 我收到错误消息: TypeError: can only concatenate str (not "int") to str 正如我在评论中所解释的,您错误地检查了列表包含,并且在if语句中设置了错

我试图通过编写纸牌游戏21的一个版本来挑战自己,但我在字符串和整数方面遇到了问题。我的柜台也不工作,这是我无法理解的

我试着把一切都定义为一个整数

定义 我试图随机得到两张卡片,让程序告诉我我离21岁有多远,我是否已经破产。 cardnum1和cardnum2似乎没有正确添加

我收到错误消息:

TypeError: can only concatenate str (not "int") to str

正如我在评论中所解释的,您错误地检查了列表包含,并且在if语句中设置了错误的变量。这是您的代码修复:

import random
cardnum1 = " "
cardnum2 = " "

print("the dealer shuffles the cards and deals the first hand")
list = ["2", "3", "4", "5", "6", "7", "8",
        "9", "10", "Jack", "Queen", "King", "Ace"]
# 1st card
card1 = random.choice(list)
print("your first card is ", card1)

# numbers
if card1 in ["2", "3", "4", "5", "6", "7", "8", "9", "10"]:
    cardnum1 = int(card1)


elif card1 == "Jack":
    cardnum1 = int(10)


elif card1 == "Queen":
    cardnum1 = int(10)


elif card1 == "King":
    cardnum1 = int(10)


elif card1 == "Ace":
    cardnum1 = input("do you want your Ace to be a 1 or a 11?")


card2 = random.choice(list)
print("your second card is ", card2)

# numbers 1 - 10
if card2 in ["2", "3", "4", "5", "6", "7", "8", "9", "10"]:
    cardnum2 = int(card2)

# special cards
elif card2 == "Jack":
    cardnum2 = int(10)


elif card2 == "Queen":
    cardnum2 = int(10)


elif card2 == "King":
    cardnum2 = int(10)


elif card2 == "Ace":
    cardnum2 = input("do you want your Ace to be a 1 or a 11?")

print("your cards combined are ", cardnum1 + cardnum2)

提到的错误是由于在某些情况下,这些变量中的一个是字符串,另一个是整数

实际上你有几个错误的地方:

list是python中内置的,不要将单词list用作变量。 如果card1==[2,3,4,5,6,7,8,9,10]是错误的。要检查变量是否在列表中,请在[2,3,4,5,6,7,8,9,10]中执行:if card1。请注意in而不是==。 如果cardnum1为,则card1=intcardnum1没有意义。您可能已将它们切换为:cardnum1=intcard1。 cardnum1=int10没有错,但是10已经是一个整数了。int是冗余的,完全不需要。 cardnum2=Input您希望您的Ace是1还是11?我想这里您希望用户键入1或11。如果您使用的是python3,输入总是返回字符串,因此必须将其转换为整数:cardnum2=intInput您希望Ace是1还是11?。如果您使用python2,则可以。
您应该使用dict为一张卡分配数字,您可以使用random.choices选择两张卡

为了方便地将它们放在一句话中,您可以在Python3.6+中使用.format或f-strings

print(f"Your cards combined are {card1} {card2}")

虽然其他人给出了您的程序的工作版本,并指出了您的版本存在的问题,但让我为您提供一个简单的替代方法:

import random

deck = ['Ace', 2, 3, 4, 5, 6, 7, 8, 9, 'Jack', 'Queen', 'King']

card1 = random.choice(deck)
card2 = random.choice(deck)

def card_value(card):
    if card == 'Ace':
        chosen_value = input("do you want your Ace to be a 1 or a 11?")
        return int(chosen_value)
    elif card in ['Jack', 'Queen', 'King']:
        return 10
    else:
        # Return the integer as it is
        return card

print("Your first card is", card1)
print("Your first card is", card2)

print("Your cards combined are ", card_value(card1) + card_value(card2))
此版本与您的版本之间唯一的主要区别是,我使用card_value helper方法将卡的值导出为整数。如果卡片值已经是一个整数,它将按原样返回

附言:

欢迎来到编程世界,你这么早就开始挑战自己,这真是太酷了。不要担心对你的问题投反对票;这是常有的事。但你可以通过有条不紊地解决问题来避免:

首先用简单的英语或伪代码写下一个算法 编码并测试算法的每个阶段 编写检查预期输出与实际输出的测试 一开始,你可能会发现投入时间和学习如何像程序员一样思考比深入研究任何一种语言都有好处。查看以下链接了解我的意思:


您可能应该使用dict将卡片与数字关联起来,而list是一个保留字。使用卡片代替,这样你就不会替换单词列表。检查列表中是否有数字的方式是不正确的。您正在检查card1是否等于整个列表。应该是列表中的if card1。此外,在这两种if条件下,您都设置了错误的变量。他们应该交换大量详细的回答谢谢,我对这一切都比较陌生,所以谢谢你告诉我这件事:
print(f"Your cards combined are {card1} {card2}")
import random

deck = ['Ace', 2, 3, 4, 5, 6, 7, 8, 9, 'Jack', 'Queen', 'King']

card1 = random.choice(deck)
card2 = random.choice(deck)

def card_value(card):
    if card == 'Ace':
        chosen_value = input("do you want your Ace to be a 1 or a 11?")
        return int(chosen_value)
    elif card in ['Jack', 'Queen', 'King']:
        return 10
    else:
        # Return the integer as it is
        return card

print("Your first card is", card1)
print("Your first card is", card2)

print("Your cards combined are ", card_value(card1) + card_value(card2))