だから、私はドワーフ要塞のような小さなゲームを作っています...しかし今は画面をランダムに変更するだけで作業しています。私は文字列に割り当てられておらず、gは別の文字列に割り当てられています。事前に定義すると正常に動作しますが、変更すると...
これは本来あるべきことであり、通常は(動的に変更することなく)出力します。
# # # # # #
# ^ # # ^ #
# # ^ # # #
# # # # # #
# # # # # #
# # # ^ # #
(カラーで出力します)
しかし、配列を動的に変更しようとすると、失敗します。コードは次のとおりです。
import os
import time
import random
clear = lambda: os.system('clear')
g = '\033[32m' + '# '
t = '\033[31m' + '^ '
l = [g, g, g, g, g, g,
g, t, g, g, t, g,
g, g, t, g, g, g,
g, g, g, g, g, g,
g, g, g, g, g, g,
g, g, g, t, g, g]
def level():
i = 0
while i < 50:
print l[0] + l[1] + l[2] + l[3] + l[4] + l[5]
print l[6] + l[7] + l[8] + l[9] + l[10] + l[11]
print l[12] + l[13] + l[14] + l[15] + l[16] + l[17]
print l[18] + l[19] + l[20] + l[21] + l[22] + l[23]
print l[24] + l[25] + l[26] + l[27] + l[28] + l[29]
print l[30] + l[31] + l[32] + l[33] + l[34] + l[35]
time.sleep(0.2)
i += 1
for b in l:
ch = round(random.random())
if ch:
l[b] = t
else:
l[b] = g
clear()
level()
そして、ここにエラーがあります:
Traceback (most recent call last):
File "DF.py", line 33, in <module>
level()
File "DF.py", line 29, in level
l[b] = t
TypeError: list indices must be integers, not str
どうすればこれを修正できますか?また、この質問に関係のないヒントや提案も大歓迎です。Pythonの初心者なので、プロのヒントが必要です:P
また、配列を投げて印刷することなく、これをすべて正しい形式で印刷する方法があると確信しています。おそらくループのあるものがありますが、私が標準を実行するだけの場合
for i in l:
print l[i]
動作しません。6x6で印刷されません。1x36で印刷されます:Pだから、この小さなゲームで私を助けてください!