昶昹8290 2024-07-07 07:41 采纳率: 100%
浏览 2
已结题

关于Python未定义问题

img

img

在下在学习过程中遇到一些问题,恳请各位解答
如图:
PlayA在上一个定义函数中已经出现,在下一个定义函数中继续使用PlayA时报错PlayA未定义
猜想:虽然PlayA 出现在了上一个定义函数中,但是真正运行程序的时候无法判断该定义函数即Player_Character是否被调用,因此无法确定PlayA是否被定义,综上PlayA未被定义。请问我的猜想正确吗?
解决:
将两个定义函数合并
弊端:
下次再次要运用PlayA时,又要将相应函数合并,否则又会出现相同的情况
变量

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-07 07:41
    关注

    引自免费微信小程序:皆我百晓生

    你的猜想大体上是正确的。在Python中,如果一个变量在一个函数内部被定义(例如PlayA在Player_Character函数内部被定义),那么这个变量只在该函数内部是可见的。当你尝试在函数外部或者另一个函数中访问这个变量时,Python会报错说这个变量未定义。这就是你遇到的问题。

    解决这个问题的一种方式是使用全局变量。全局变量是在程序的任何位置都可以访问的变量。这样,你就可以在任何一个函数中访问和修改全局变量。但是,过度使用全局变量可能会导致代码难以理解和维护。因此,只有在确实需要的时候才去使用全局变量。以下是如何定义和使用全局变量的示例:

    # 定义全局变量
    Character = ['角色1', '角色2', '角色3']
    PlayA = None
    PlayB = None
    
    def Player_Character():
        global PlayA  # 使用全局变量PlayA
        global PlayB  # 使用全局变量PlayB
        print('SB:随机')
        choice = input('请选择你的角色\nA:1\nB:2\nC:3')
        if choice == 'SB':  # 注意这里应该是两个等号用于比较,而不是一个等号用于赋值
            PlayA = Character[random.randrange(0, len(Character))]  # 这里也应该修正为random.randrange的用法
            print('您选择的角色为:', PlayA)
        else:
            PlayA = Character[choice]  # 注意这里应该将输入转化为整数,因为列表索引必须是整数
            print('您选择的角色为:', PlayA)
        # 同理处理对手角色的选择
        # ...
        return PlayA, PlayB  # 返回两个角色的信息,方便在其他地方使用
    
    def Info(x, y):
        print('您角色的相关属性为:', Character_Info[x])  # 这里假设有一个Character_Info的字典存储角色属性信息
        print('敌对电脑的相头属性为:', Character_Info[y])  # 这里假设'相头'是属性名的一部分,可能需要修正为正确的属性名或字典键名
    
    # 运行函数并获取角色信息
    PlayA, PlayB = Player_Character()  # 获取角色信息后,可以在其他地方使用PlayA和PlayB了
    Info(PlayA, PlayB)  # 使用角色信息调用Info函数
    

    这样,你在任何地方都可以访问和修改PlayA和PlayB的值,而无需将它们定义为全局变量。不过要注意避免过度使用全局变量,因为它可能导致代码难以理解和维护。尽可能通过函数参数和返回值来传递信息,只在确实需要的时候才使用全局变量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 已采纳回答 7月7日
  • 创建了问题 7月7日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3