嗯......我的部分代码工作时间很糟糕,但是我重新安排了一些事情,它突然开始正常工作了。不确定我做了什么,说实话,所以我想这将成为这个问题的主题。我正在构建一个简单的基于文本的纸牌游戏,它使用从两个.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
要点:
答案 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)