Как исправить логическую ошибку при загрузке / записи файла numpy python - PullRequest
1 голос
/ 14 апреля 2019

Я недавно начал создавать ролевую игру, консольную игру.

Я сделал этот код:

# 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

Что я делаю не так? Спасибо!

1 Ответ

1 голос
/ 17 апреля 2019

Как сказал hpaulj, не используйте голые except.Я переписал это как:

except Exception as e:
    print(e)

(я знаю, ловить только исключения - тоже плохо):

MAXLIFE = SAVE[:, 0]

не из матрицы, а из среднего 1D массива:

np.savetxt('Savedata.dat', [MAXLIFE, LIFE, MAXEN, EN, MAXOX, OX, OPOS, POS, CHAPTER])

Вы должны заменить все эти строки строкамикак это:

MAXLIFE = SAVE[0]

(также обратите внимание, что SAVE - это пустой массив, а не файл, поэтому SAVE.close() вернет ошибку. Вы должны удалить эту строку)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...