Python赋值运算符,函数定义和变量定义

时间:2013-07-15 21:18:28

标签: python function python-3.x assignment-operator

嗯......我的部分代码工作时间很糟糕,但是我重新安排了一些事情,它突然开始正常工作了。不确定我做了什么,说实话,所以我想这将成为这个问题的主题。我正在构建一个简单的基于文本的纸牌游戏,它使用从两个.txt文件上传的套牌。它的目标是魔术:聚会,但如果人们对它有创意,可能会与其他人合作。为了提供粗略的概述,以下是事情的安排:

import random

def shuffle(board1):

def game():
    #board=[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
    #performs most of the actions relating to the game
    board[0]=20
    board[10]=20


def gameboard(board2):
    #displays game board

def draw(board3, numcards, player):
    #draws cards

def upload(deckname):
    #uploads cards from file

def life(board4):
    #asks about which player the life total is changing on, by how much, etc.
    #and then does it

def maketoken(board5):
    #creates tokens, counters, etc. based on user input

def move(board5):
    #accepts user input and moves cards from zone to zone

def play(board6):
    #handles casting spells, using abilities, triggered abilities, etc.

#main body of program is below function definitions

board=[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]

deckname1=input("\nWhat is the name of deck 1?")
deckname2=input("\nWhat is the name of deck 2?")

deck1=upload(deckname1)
deck2=uplaod(deckname2)

board[1]=deck1
board[11]=deck2

#this is where a lot of the other variables get set
game()

(注意:为了简洁和漂亮,大多数代码都被移除了,因为我的代码非常难看)

我有一个大学级的C ++背景,最近刚决定拿起你的键盘,所以分配操作员(=)没有按照我期望的方式工作让我疯狂。因此,我也想知道是否有办法在Python中获得C ++'='的功能,因为我从.txt文件上传了decks,并希望在完成后立即使用upload()函数(我使用deck1 = upload(deckname)(对于deck2也一样)。我想在每场比赛后使用'deck1'和'deck2'来重新填充甲板,但是如果我理解'='在python中如何工作,那么进入棋盘[1] ] = deck1表示board [1]将指向deck1的存储区域,更改为board [1]将更改deck1,但我不想要... GRRRR !!!!!! 11)。我确定那里有一个解决方案,因为它让我变得坚果,但我一直无法找到它。感谢!!!

编辑:这是我用这种方式设置的错误:

Traceback (most recent call last):
  File "C:\Users\inventor487\Desktop\simplepy.py", line 444, in <module>
    game()
  File "C:\Users\inventor487\Desktop\simplepy.py", line 114, in game
    board[1]=deck1
UnboundLocalError: local variable 'board' referenced before assignment

要点:

  1. 我是否需要将board传递给game()函数,即使它被设置为全局变量(或者至少我认为是)?当我在game()函数中指定它时,一切似乎都工作正常(注释掉以显示这一点)。 (编辑:没关系......我是个白痴。)
  2. 将棋盘的一部分分配给游戏中的值()使其成为局部变量(例如,我有棋盘[0] = 20)? (编辑:是的,它显然确实......)

2 个答案:

答案 0 :(得分:0)

编辑:一个类很容易解决所有这一切,而且更加干净。为每个区域等设置一个单独的变量可以使一切变得更加顺畅。谢谢你的帮助,不过伙计们。非常感谢。

答案 1 :(得分:0)

正如您所发现的,Python中的=运算符不会像在C ++中那样复制对象。如果你想复制存储在另一个变量中,你必须明确它。

board[1] = deck1[:]  # the slicing operator copies a subset or the whole list

更通用的方法是使用copy module

import copy
board[1] = copy.copy(deck1)
board[1] = copy.deepcopy(deck1)