我已经教 8 至 9 年级学生基本的计算机编程两周了,昨天我试图向他们展示如何用 Python 制作真正简单的文本冒险游戏。

场景是函数(例如 dragons_cave() ),它由一些打印语句组成,然后调用 input() ,询问玩家下一步要去哪里,然后传递给 globals() 以找到适当的函数,然后调用。我知道这并不理想(从什么时候庞大的函数链会开始成为问题?)但是,在我的脑海中,这对他们来说似乎是最简单的,而只涉及一点点挥手。

我的问题是全局状态——例如。玩家在一个场景中得到一把 key ,然后才能在另一个场景中解锁大门。当我有像字符串或 bool 值这样的全局不可变变量时,Python 要我在函数的开头使用 global 关键字。

global hasKey
hasKey = True

我对此很满意,但我有一种模糊的感觉(从 Stackoverflow 以及 Internet 上的其他地方获得),即 global 不受欢迎并且总是有一个更好的对应物。我可以拥有一个全局字典或将所有内容都包含在一个类中,但我不确定我是否可以向我的 child (他们仍在思考变量的含义)清楚地捍卫这些选项。

无论我使用什么,我都希望能够直接向我的 child 解释为什么我们这样做,为什么这样做是必要的。 global 似乎同时具有这两个属性,但它不好吗?

最佳答案

我会鼓励他们开始学习面向对象

class Location:
     name="a place"
     description = "A dark place.  there are exits to the North and East"
     exits = "North","East"
     def __str__(self):
         return "%s\n%s"%(self.name,self.description)


class Player:
     current_location = "Home"
     inventory = ["Blue Key","Magic Thumbtacks"]
     health = 100
     name = "Unknown"
     def __init__(self,name):
         self.name = name

player = Player("Player 1")
loc = Location()
print loc
x = input("Input:")

老实说,游戏是一个困难的概念(甚至是文字冒险)。但我会直接从面向对象的概念开始他们,从长远来看,他们将从中受益更多。

当然,这个例子非常小,并且遗漏了很多实现细节。

一个不相关但更好的 OO 示例是:
class Animal:
     voice = '...'
     def speak(self):
         return "A %s Says '%s'"%(self.__class__.__name__, self.voice)

class Dog(Animal):
     voice = "Bark, Bark"

class Duck(Animal):
     voice = "Quack, Quack"

print Dog().speak()
print Duck().speak()

关于python - 避免使用 global 而不会混淆 Python 中的新编程学生?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17765560/

10-16 05:58