Python 我需要在函数中使用变量的帮助

Python 我需要在函数中使用变量的帮助,python,function,if-statement,return,global-variables,Python,Function,If Statement,Return,Global Variables,在函数中,变量没有按照我希望的方式定义,我遇到了麻烦。我收到错误消息“全局名称color1未定义”,即使我从一个函数返回color1,在该函数中我给它一个定义的值。 这是我的密码: import random card = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28

在函数中,变量没有按照我希望的方式定义,我遇到了麻烦。我收到错误消息“全局名称color1未定义”,即使我从一个函数返回color1,在该函数中我给它一个定义的值。 这是我的密码:

    import random   

card = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52']
def computer_card1():
    return random.choice(card)

def computer_card2():
    return random.choice(card)

def player_color():
        color_in = input('Purple, Black or Red? ').strip().lower()
        return color_in
def cards():
    if computer_card1() == 1:
        color1 = black
        value1 = 2
    if computer_card1() == 2:
        color1 = black
        value1 = 3
    if computer_card1() == 3:
        color1 = black
        value1 = 4
    if computer_card1() == 4:
        color1 = black
        value1 = 5
    if computer_card1() == 5:
        color1 = black
        value1 = 6
    if computer_card1() == 6:
        color1 = black
        value1 = 7
    if computer_card1() == 7:
        color1 = black
        value1 = 8
    if computer_card1() == 8:
        color1 = black
        value1 = 9
    if computer_card1() == 9:
        color1 = black
        value1 = 10
    if computer_card1() == 10:
        color1 = black
        value1 = 11
    if computer_card1() == 11:
        color1 = black
        value1 = 12
    if computer_card1() == 12:
        color1 = black
        value1 = 13
    if computer_card1() == 13:
        color1 = black
        value1 = 0
    if computer_card1() == 14:
        color1 = black
        value1 = 2
    if computer_card1() == 15:
        color1 = black
        value1 = 3
    if computer_card1() == 16:
        color1 = black
        value1 = 4
    if computer_card1() == 17:
        color1 = black
        value1 = 5
    if computer_card1() == 18:
        color1 = black
        value1 = 6
    if computer_card1() == 19:
        color1 = black
        value1 = 7
    if computer_card1() == 20:
        color1 = black
        value1 = 8
    if computer_card1() == 21:
        color1 = black
        value1 = 9
    if computer_card1() == 22:
        color1 = black
        value1 = 10
    if computer_card1() == 23:
        color1 = black
        value1 = 11
    if computer_card1() == 24:
        color1 = black
        value1 = 12
    if computer_card1() == 25:
        color1 = black
        value1 = 13
    if computer_card1() == 26:
        color1 = black
        value1 = 0
    if computer_card1() == 27:
        color1 = red
        value1 = 2
    if computer_card1() == 28:
        color1 = red
        value1 = 3
    if computer_card1() == 29:
        color1 = red
        value1 = 4
    if computer_card1() == 30:
        color1 = red
        value1 = 5
    if computer_card1() == 31:
        color1 = red
        value1 = 6
    if computer_card1() == 32:
        color1 = red
        value1 = 7
    if computer_card1() == 33:
        color1 = red
        value1 = 8
    if computer_card1() == 34:
        color1 = red
        value1 = 9
    if computer_card1() == 35:
        color1 = red
        value1 = 10
    if computer_card1() == 36:
        color1 = red
        value1 = 11
    if computer_card1() == 37:
        color1 = red
        value1 = 12
    if computer_card1() == 38:
        color1 = red
        value1 = 13
    if computer_card1() == 39:
        color1 = red
        value1 = 0
    if computer_card1() == 40:
        color1 = red
        value1 = 2
    if computer_card1() == 41:
        color1 = red
        value1 = 2
    if computer_card1() == 42:
        color1 = red
        value1 = 3
    if computer_card1() == 43:
        color1 = red
        value1 = 4
    if computer_card1() == 44:
        color1 = red
        value1 = 5
    if computer_card1() == 45:
        color1 = red
        value1 = 6
    if computer_card1() == 46:
        color1 = red
        value1 = 7
    if computer_card1() == 47:
        color1 = red
        value1 = 8
    if computer_card1() == 48:
        color1 = red
        value1 = 9
    if computer_card1() == 49:
        color1 = red
        value1 = 10
    if computer_card1() == 50:
        color1 = red
        value1 = 11
    if computer_card1() == 51:
        color1 = red
        value1 = 12
    if computer_card1() == 52:
        color1 = red
        value1 = 13
    if computer_card2() == 1:
        color2 = black
        value2 = 2
    if computer_card2() == 2:
        color2 = black
        value2 = 2
    if computer_card2() == 3:
        color2 = black
        value2 = 4
    if computer_card2() == 4:
        color2 = black
        value2 = 5
    if computer_card2() == 5:
        color2 = black
        value2 = 6
    if computer_card2() == 6:
        color2 = black
        value2 = 7
    if computer_card2() == 7:
        color2 = black
        value2 = 8
    if computer_card2() == 8:
        color2 = black
        value2 = 9
    if computer_card2() == 9:
        color2 = black
        value2 = 10
    if computer_card2() == 10:
        color2 = black
        value2 = 11
    if computer_card2() == 11:
        color2 = black
        value2 = 12
    if computer_card2() == 12:
        color2 = black
        value2 = 13
    if computer_card2() == 13:
        color2 = black
        value2 = 0
    if computer_card2() == 14:
        color2 = black
        value2 = 2
    if computer_card2() == 15:
        color2 = black
        value2 = 3
    if computer_card2() == 16:
        color2 = black
        value2 = 4
    if computer_card2() == 17:
        color2 = black
        value2 = 5
    if computer_card2() == 18:
        color2 = black
        value2 = 6
    if computer_card2() == 19:
        color2 = black
        value2 = 7
    if computer_card2() == 20:
        color2 = black
        value2 = 8
    if computer_card2() == 21:
        color2 = black
        value2 = 9
    if computer_card2() == 22:
        color2 = black
        value2 = 10
    if computer_card2() == 23:
        color2 = black
        value2 = 11
    if computer_card2() == 24:
        color2 = black
        value2 = 12
    if computer_card2() == 25:
        color2 = black
        value2 = 13
    if computer_card2() == 26:
        color2 = black
        value2 = 0
    if computer_card2() == 27:
        color2 = red
        value2 = 2
    if computer_card2() == 28:
        color2 = red
        value2 = 3
    if computer_card2() == 29:
        color2 = red
        value2 = 4
    if computer_card2() == 30:
        color2 = red
        value2 = 5
    if computer_card2() == 31:
        color2 = red
        value2 = 6
    if computer_card2() == 32:
        color2 = red
        value2 = 7
    if computer_card2() == 33:
        color2 = red
        value2 = 8
    if computer_card2() == 34:
        color2 = red
        value2 = 9
    if computer_card2() == 35:
        color2 = red
        value2 = 10
    if computer_card2() == 36:
        color2 = red
        value2 = 11
    if computer_card2() == 37:
        color2 = red
        value2 = 12
    if computer_card2() == 38:
        color2 = red
        value2 = 13
    if computer_card2() == 39:
        color2 = red
        value2 = 0
    if computer_card2() == 40:
        color2 = red
        value2 = 2
    if computer_card2() == 41:
        color2 = red
        value2 = 2
    if computer_card2() == 42:
        color2 = red
        value2 = 3
    if computer_card2() == 43:
        color2 = red
        value2 = 4
    if computer_card2() == 44:
        color2 = red
        value2 = 5
    if computer_card2() == 45:
        color2 = red
        value2 = 6
    if computer_card2() == 46:
        color2 = red
        value2 = 7
    if computer_card2() == 47:
        color2 = red
        value2 = 8
    if computer_card2() == 48:
        color2 = red
        value2 = 9
    if computer_card2() == 49:
        color2 = red
        value2 = 10
    if computer_card2() == 50:
        color2 = red
        value2 = 11
    if computer_card2() == 51:
        color2 = red
        value2 = 12
    if computer_card2() == 52:
        color2 = red
        value2 = 13
    return color1
    return color2
    return value1
    return value2

def main():
    card1 = computer_card1()
    card2 = computer_card2()
    pcolor = player_color()
    print ( "The cards where:",card1,",",card2,",",pcolor )
    if color1 == color2:
        color = color1
    else:
        color = 'purple'
    if color == pcolor:
        print ('Win')
    else:
        print ('Lose')
请注意,在这种用法中,实际挑选两张卡片并进行比较会做大量不必要的工作;您可以更直接地使用

winner = random.choice(["red", "black", "purple", "purple"])

天哪!你仍然误解了很多事情年轻的学徒…:)

可变范围 让我们从一开始。让我解释一下

当您编写以下代码时

def myfunction():
a=5
打印(a)#好的
b=a#这条线路故障
您将得到一个失败,因为
a
local
myfunction
,也就是说它只存在于该函数中,最后一条语句引用了python不知道的变量。这是一个很好的特性,因为如果没有作用域,您必须非常小心,不要在程序的任何部分使用相同的变量名,否则可能会发生冲突。如果在一个小程序中很无聊,那么在更大的程序中就必须这样做(想想firefox的1020万行代码)

返回
关键字
return
关键字不会将变量放在全局范围内(变量随时可用的某些边界)。相反,它将结束当前函数,并将一些值传递给调用方。函数结尾的第一条语句,随后的
return
永远不会到达。从调用方捕获返回值的过程如下:

def afunction():
    a = 5
    return a

b = afunction()
print(b) # will print `5`
def somefunction():
    a = 7
    b = "hello"
    return a, b, "worlds"

sev, hel, wo = somefunction()
print(hel, sev, wo) # will print `hello 7 worlds`
Python提供了一种方便的方法,可以以元组的形式从函数返回多个值。人们这样使用它:

def afunction():
    a = 5
    return a

b = afunction()
print(b) # will print `5`
def somefunction():
    a = 7
    b = "hello"
    return a, b, "worlds"

sev, hel, wo = somefunction()
print(hel, sev, wo) # will print `hello 7 worlds`
Python的禅宗和所有这些东西 最后一个主题是,一个好的程序有简单的算法,复杂性在于数据。Python有一套出色的工具,专门用于表达和操作复杂的数据集,和用于描述复杂数据、对它们进行分组并建立关系。使用它们,您将大大简化代码,因此要尽快学会使用它们

下面是一些精彩的文章:

  • 尤其是

我被你的if语句蒙蔽了双眼。您只需替换那些if语句。模可能有用。另外,查找作用域。变量color1/color2不存在于函数
之外。i、 例如,您的错误正好告诉您出了什么问题。我对python不太熟悉,如何确切地使用模来代替if语句?这里使用模而不是过多的ifs更多地是关于编程而不是python。有某种复发,对吗?想想什么时候会产生不同的值。虽然我看到你有时跳过1,有时跳过11,有时跳过3等等。但我看不出它们之间的联系:p它们是卡片,这些值是针对特定的卡片的。例如,1是一张黑色的2卡,2是一张黑色的3卡,3是一张黑色的4卡,10是一张黑色的皇后卡。这更有意义吗?