python - 如何修复 numpy python 文件加载/写入中的逻辑错误
问题描述
我最近开始创建一个基于控制台的角色扮演游戏。
我做了这个代码:
# MAIN GAME LOOP
while True:
if MMS == 'A': # already definied
print('Loading Story mode...')
print('[LOADING] Importing numpy')
try:
import numpy as np
except ImportError:
print('Error 01 // Cilent side')
print('ImportError')
while True:
A = 1
print('[LOADING] Trying load save...')
try:
SAVE = np.loadtxt('Savedata.dat')
MAXLIFE = SAVE[:, 0] # all of thesse already definied
LIFE = SAVE[:, 1]
MAXEN = SAVE[:, 2]
EN = SAVE[:, 3]
MAXOX = SAVE[:, 4]
OX = SAVE[:, 5]
OPOS = SAVE[:, 6]
POS = SAVE[:, 7]
CHAPTER = SAVE[:, 8]
SAVE.close()
except:
sleep(4)
print('[LOADING] No save file found or incorrect save.')
print('[LOADING] Creating a new save.')
MAXLIFE = 150
LIFE = 110
MAXEN = 150
EN = 150
MAXOX = 150
OX = 85
OPOS = 10
POS = 10
CHAPTER = 1
np.savetxt('Savedata.dat', [MAXLIFE, LIFE, MAXEN, EN, MAXOX, OX, OPOS, POS, CHAPTER])
我除了如果没有保存,它会使用默认值创建一个新的保存。如果有存档,游戏会加载它。但是,它会产生这个无限的输出:
[LOADING] No save file found or incorrect save.
[LOADING] Creating a new save.
Loading Story mode...
[LOADING] Importing numpy
[LOADING] Trying load save...
[LOADING] No save file found or incorrect save.
[LOADING] Creating a new save.
Loading Story mode...
...
无限循环没问题,但它没有检测到它之前的保存。
那在 Savedata.dat
1.000000000000000000e+00
1.000000000000000000e+00
1.000000000000000000e+00
1.000000000000000000e+00
1.000000000000000000e+00
1.000000000000000000e+00
1.000000000000000000e+00
1.000000000000000000e+00
1.000000000000000000e+00
我做错了什么?谢谢!
解决方案
正如 hpaulj 所说,不要使用 bare except
。我将其重写为:
except Exception as e:
print(e)
(我知道,只捕获异常也很糟糕)它打印了我这个:
Traceback (most recent call last):
File "wakagame.py", line 21, in <module>
MAXLIFE = SAVE[:, 0] # all of thesse already definied
IndexError: too many indices for array
问题是您正在尝试选择列:
MAXLIFE = SAVE[:, 0]
不是来自矩阵,而是来自平均一维数组:
np.savetxt('Savedata.dat', [MAXLIFE, LIFE, MAXEN, EN, MAXOX, OX, OPOS, POS, CHAPTER])
您应该将所有这些行替换为以下行:
MAXLIFE = SAVE[0]
(另请注意,SAVE 是一个 numpy 数组,而不是文件,因此SAVE.close()
会返回错误。您应该删除此行)
推荐阅读
- postgresql - 如何在另一台计算机上打开现有的 PostgreSQL 数据库?
- google-chrome-extension - 对 dev 和 prod chrome 扩展使用不同的图标
- arrays - 如何将 atoi 和 strtok 与多维数组一起使用?
- swift - Swift - 数组到字典
- android - 使用 FCM 发送单独的推送通知
- r - 如何向圆环图添加额外的数据标签
- node.js - 尝试从 nodejs.org 在 Windows 10 上安装 node.js(v15.3.0) 时出错
- python - pytesseract 无法识别图像中的数字,
- haskell - 强制在堆栈中进行静态编译
- spotfire - 锁定两个可视化之间的配色方案