类文件夹:

在游戏.py:http://pastebin.com/P7Degwna

(我没有足够的声誉发布两个以上的链接。以下断开的链接是为了完整性,但我认为它们的代码完全正确)

在魔法.py:http://pastebin.com/wpwSCDe7在

在库存.py:http://pastebin.com/8kFXJne1在

我正在努力成为一个更好的程序员,并一直遵循一个简单的战斗系统教程。目前正在实施敌方作战战术。在

我正在尝试这样的程序,如果一个敌人选择治疗,并且有超过50%的剩余,他们会重新选择一个咒语。

每当发生这种情况时,我从代码中得到以下错误Traceback (most recent call last):

File "C:/Users/Kyle/PycharmProjects/battle/main.py", line 160, in

choose_attack, spell, magic_dmg = enemy.choose_enemy_spell()

TypeError: 'NoneType' object is not iterable

以下是在此之前输出到终端的转储:

^{pr2}$

我可以看到我的玩家轮到他们了,然后敌人选择了治疗咒语,因为有太多的生命,所以选择了另一个咒语,然后我得到了非类型错误。在

当另一个不是库拉索加的咒语第一次被选中时,这个代码工作得很好。在

相关代码部分:

这是我的主程序#Create Black Magic

fire = Spell("Fire", 25, 600, "black") #create object fire from class Spell

thunder = Spell("Thunder", 25, 600, "black")

blizzard = Spell("Blizzard", 25, 600, "black")

meteor = Spell("Meteor", 40, 1200, "black")

quake = Spell("Quake", 32, 900, "black")

#Create White Magic

cure = Spell("Cure", 25, 620, "white")

cura = Spell("cura", 32, 1500, "white")

curaga = Spell("Curaga", 50, 6000, "white")

#Create lists of magic and items associated with players

player_magic = [fire, thunder, blizzard, meteor, cure, cura] #Create list of magic spell objects for object player

player_items = [{"item": potion, "quantity": 15}, {"item": hipotion, "quantity": 5}, {"item": superpotion, "quantity": 5},

{"item": elixer, "quantity": 5}, {"item": hielixer, "quantity": 2}, {"item": grenade, "quantity": 5},] #Create list of item objects for object player

#Creat lists of magic and items associated with enemies

enemy_spells = [fire, meteor, curaga]

eneny_items = []

#Istantiate Player objects

player1 = Person("Zelda", 3260, 132, 300, 34, player_magic, player_items)

#Inistantiating object player using class Person

player2 = Person("Link ", 4160, 188, 311, 34, player_magic, player_items)

player3 = Person("Sheik", 3089, 174, 288, 34, player_magic, player_items)

#Instantiate Enemy objects

enemy1 = Person("Vaati", 1250, 130, 560, 325, enemy_spells, [])

enemy2 = Person("Ganon", 18200, 701, 535, 25, enemy_spells, [])

#Instantiating object enemy using class Person

enemy3 = Person("Vaati", 1250, 130, 560, 325, enemy_spells, [])

# Enemy chose to use magic

if enemy_choice == 1:

choose_attack, spell, magic_dmg = enemy.choose_enemy_spell()

enemy.reduce_mp(spell.cost)

if spell.type == "white": # Check type of spell of object spell to determine how to handle the chosen spell.

enemy.heal(magic_dmg) # White typer means heal

print(bcolours.OKBLUE + "\n" + spell.name, " heals", enemy.name + str(magic_dmg),

"HP." + bcolours.ENDC)

elif spell.type == "black": # black type means do damage

target = random.randrange(0, 3)

players[target].take_damage(magic_dmg)

print(bcolours.OKBLUE + "\n" + enemy.name.replace(" ", "") + "'s " + spell.name, "deals",

str(magic_dmg), "points of damage to " + players[target].name + bcolours.ENDC)

if players[target].get_hp() == 0:

print(players[target].name + " has died.")

del players[target]

这来自一个包含类的文件

#Determine the spell the enemy chooses to use

def choose_enemy_spell(self):

print("Begin method")

choose_attack = 0

magic_choice = random.randrange(0, len(self.magic))

spell = self.magic[magic_choice]

magic_dmg = spell.generate_damage()

print(spell.name, "INSIDE CLASS")

pct = (self.hp / self.maxhp)*100 #percentage of health remaining

if self.mp < 25:

print("This probably isnt happening")

choose_attack = 1

return choose_attack, spell, magic_dmg

if (spell.type == "white" and pct > 50) or self.mp < spell.cost:

print("This is happening.")

self.choose_enemy_spell()

else:

print(magic_dmg, "INSIDE CLASS INSIDE METHOD INSIDE FINAL ELSE")

return choose_attack, spell, magic_dmg

python nonetype iterable_无法解决“NoneType”对象不是iterable类型相关推荐

  1. python (第八章)补充-可迭代对象(补充高阶函数,以及常用的高阶函数)

    文章目录 可迭代对象 迭代器 什么是迭代器 什么是生成器 生成器的作用 生成器的注意事项 总结: 高阶函数 什么是高阶函数? map()函数 filter()函数 reduce()函数 参考 可迭代对 ...

  2. python中迭代器和可迭代对象的区别_Python 可迭代对象迭代器生成器的区别

    生成器是一种特殊的迭代器,生成器自动实现了"迭代器协议"(即__iter__和next方法),不需要再手动实现两方法. 首先从字面意思来解释Iterable和Iterator的区别 ...

  3. Python教学课程分享9-面向对象编程

    面向对象程序设计的思想主要是针对大型软件设计而提出的,它的一个关键性观念是将数据以及对数据的操作封装在一起,组成一个相互依存.不可分割的整体,即不同对象之间通过消息机制来通信或者同步.对于相同类型对象 ...

  4. python入门经典以解决计算问题为导向_Python入门经典 以解决计算问题为导向的Python编程 待完善...

    1.4.2:python将代码分为两类:表达式和语句 表达式和语句:: 表达式(值和运算符的结合,将产生新值--返回值.如果在python shell中输入表达式将显示返回值.也就是说,如果x的值是2 ...

  5. python错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

  6. python装饰器函数-Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

  7. python中函数type可以测试对象类型_python类型检测最终指南--Typing模块的使用

    正文共:30429 字 预计阅读时间:76分钟 原文链接:https://realpython.com/python-type-checking/ 作者:Geir Arne Hjelle 译者:陈祥安 ...

  8. 怎么解决python遇到问题_新手常见Python错误及异常解决处理方案

    新手常见Python错误及异常解决处理方案,异常,错误,语句,子句,代码 新手常见Python错误及异常解决处理方案 易采站长站,站长之家为您整理了新手常见Python错误及异常解决处理方案的相关内容 ...

  9. python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器

    很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...

  10. 孤荷凌寒自学python第四十一天python的线程同步之Event对象

    孤荷凌寒自学python第四十一天python的线程同步之Event对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 鉴于Lock锁与RLock锁均宣告没有完全完成同步文件操作的问题,于是 ...

最新文章

  1. 第7件事 产品的5个要素
  2. python编程if语法-Python基本语法(if判断)
  3. SourceInsight 4.0 之三 常用宏使用、编辑、修改详解(附最新完善版本的宏)
  4. udp java 检测连接_简单的JAVA UDP连接测试
  5. Maven项目编译工具的使用
  6. FileZilla Server 搭建FTP服务器
  7. python现在时间减去过去时间等于20分钟怎么写_获取当前时间减去10分钟的话SQL语句怎么写...
  8. linux 查看目录下文件个数
  9. jquery选择器小知识点们
  10. 【李宏毅2020 ML/DL】P56 Transformer and its variant | New Architecture
  11. VS2022找不到Microsoft.Expression.Interactions.dll
  12. websocket替代方案_码农手记 | 前后端实时交互方案概述
  13. [转]How do I use variables in Oracle SQL Developer?
  14. 计算机安装xp蓝屏怎么办,联想笔记本装xp系统蓝屏解决方法
  15. 【5G核心网】5GC核心网之网元NSSF
  16. 创业不是 闹着玩的,水很深,
  17. linux中硬盘安装教程图解,硬盘安装Debian 5教程图解
  18. 升级版微生物16s测序报告|解读
  19. HbuilderX 自有证书生成
  20. 网络电话免费打 【推荐】

热门文章

  1. 【过关斩将】面试官的八个举动,暗示你已经通过了面试
  2. 计算机无法正常更新,电脑时间不能自动更新怎么回事?电脑时间校准同步方法介绍...
  3. 向jupyter notebook插入图片并控制大小和对齐方式
  4. pdf裁边app_PDF裁剪怎么使用?
  5. SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 第一篇
  6. Windows 10 让所有程序默认为“以管理员身份运行”并且取消“确认”按钮
  7. SpringBoot+Vue批量下载图片压缩包
  8. mall-accounts.json ES测试数据
  9. Asp中显示%百分比函数FormatPercent的使用
  10. 高效人士的七个管理习惯