gpt4 book ai didi

python - 避免使用 global 不会让 Python 编程新手感到困惑?

转载 作者:太空狗 更新时间:2023-10-29 17:42:50 25 4
gpt4 key购买 nike

我已经教 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 概念开始,从长远来看,他们会从中受益更多。

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

一个不相关但更好的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com