Python赋值运算符、函数定义和变量定义
嗯。。。我在让我的部分代码正常工作时经历了一段糟糕的时光,但我重新安排了事情,它突然开始正常工作。老实说,我不知道我做了什么,所以我想这将是这个问题的主题。我正在构建一个简单的基于文本的纸牌游戏,它使用从两个.txt文件上传的牌组。它的目标是魔术:聚会,但如果人们有创意的话,它可能会与其他人合作。为了提供一个粗略的概述,以下是事情的安排方式:Python赋值运算符、函数定义和变量定义,python,function,python-3.x,assignment-operator,Python,Function,Python 3.x,Assignment Operator,嗯。。。我在让我的部分代码正常工作时经历了一段糟糕的时光,但我重新安排了事情,它突然开始正常工作。老实说,我不知道我做了什么,所以我想这将是这个问题的主题。我正在构建一个简单的基于文本的纸牌游戏,它使用从两个.txt文件上传的牌组。它的目标是魔术:聚会,但如果人们有创意的话,它可能会与其他人合作。为了提供一个粗略的概述,以下是事情的安排方式: import random def shuffle(board1): def game(): #board=[[],[],[],[],[],[
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++背景,最近决定选择You-OLED键盘来解决问题,所以分配操作员(不)按我预期的方式工作,这让我发疯。因此,我还想知道是否有一种方法可以在Python中获得C++ ''= '的功能,因为我从.txt文件上传了这个程序,并且想尽快完成上传()函数(我使用DEKK1=上传(DeNKNAME)(同样适用于DEK2)。.我想在每场比赛结束后使用'deck1'和'deck2'重新填充牌组,但如果我了解'='在python中的工作原理,输入board[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
回溯(最近一次呼叫最后一次):
文件“C:\Users\inventor487\Desktop\simplepy.py”,第444行,在
游戏()
文件“C:\Users\inventor487\Desktop\simplepy.py”,第114行,在游戏中
板[1]=甲板1
UnboundLocalError:赋值前引用的局部变量“board”
总结:
编辑:一个类可以很容易地解决所有这些问题,而且更干净。每个区域都有一个单独的变量等,这会使一切变得更加平滑。谢谢你们的帮助,伙计们。非常感谢。正如你发现的,Python中的<代码>=/COD>运算符不象C++那样复制对象。如果您想创建一个副本来存储在另一个变量中,您必须明确地说明它
board[1] = deck1[:] # the slicing operator copies a subset or the whole list
更通用的方法是使用
您似乎对作用域、局部作用域(在
游戏
中)与全局作用域不同以及Python如何处理边界感到困惑。但是,如果没有更多的信息,我们在这方面帮不了你多少忙。错误是什么?如果你能显示C++代码,它会更容易回答。因此,当您说a=b=c=[]
时,所有这些变量都引用同一个列表对象。当您传递列表/将列表分配给变量/修改列表时,不会产生任何副本。对于您的板,使用列表理解,例如board=[[]对于范围(0,22)中的i]
,这将使它变得更容易。(编辑:不能计数,希望是对的)。有关如何为问题创建好的示例代码的更多帮助,请参阅。
import copy
board[1] = copy.copy(deck1)
board[1] = copy.deepcopy(deck1)