Я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "battleships.py", line 120, in <module>
lines[num - 1][let - 1] = symbol2
TypeError: 'str' object does not support item assignment
Я все еще довольно нубистский на python и думал, что поставлю линкоры go просто как часть моего учебного процесса. Я понимаю, что у меня проблемы с назначением строкового объекта в моем списке, но у меня есть более ранняя версия моего кода, в которой та же концепция кода работает плавно, поэтому я в растерянности. Я пробовал разные вещи, конвертируя переменные в строки тут и там, но мой проект вырос над моей головой, и мне нужна помощь, чтобы найти проблему.
Вот мой код:
1 import random
2
3
4
5 def crtboard(size,symbol):
6 x, y = size, size
7 board = [[symbol for i in range(x)] for ii in range(y)]
8 return board
9
10 def crtships(board,boardsize):
11
12 shipcount2 = 0
13 shipcount3 = 0
14 shipcount4 = 0
15 shipcount5 = 0
16 symbol1 = '*'
17
18 while shipcount2 < ship2:
19 randint = random.randint(0,1)
20 randlet = random.randint(0,boardsize - 1)
21 randnum = random.randint(0,boardsize - 1)
22 if randint == 0 and randnum < (boardsize - 1) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet][randnum + 1] != symbol1:
23 board[randlet][randnum] = symbol1
24 board[randlet][randnum + 1] = symbol1
25 shipcount2 += 1
26 if randint == 1 and randlet < (boardsize - 1) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet + 1][randnum] != symbol1:
27 board[randlet][randnum] = symbol1
28 board[randlet + 1][randnum] = symbol1
29 shipcount2 += 1
30
31 while shipcount3 < ship3:
32 randint = random.randint(0,1)
33 randlet = random.randint(0,boardsize - 1)
34 randnum = random.randint(0,boardsize - 1)
35 if randint == 0 and randnum < (boardsize - 2) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet][randnum + 1] != symbol1 and board[randlet][randnum + 2] != symbol1:
36 board[randlet][randnum] = symbol1
37 board[randlet][randnum + 1] = symbol1
38 board[randlet][randnum + 2] = symbol1
39 shipcount3 += 1
40 if randint == 1 and randlet < (boardsize - 2) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet + 1][randnum] != symbol1 and board[randlet + 2][randnum] != symbol1:
41 board[randlet][randnum] = symbol1
42 board[randlet + 1][randnum] = symbol1
43 board[randlet + 2][randnum] = symbol1
44 shipcount3 += 1
45
46 while shipcount4 < ship4:
47 randint = random.randint(0,1)
48 randlet = random.randint(0,boardsize - 1)
49 randnum = random.randint(0,boardsize - 1)
50 if randint == 0 and randnum < (boardsize - 3) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet][randnum + 1] != symbol1 and board[randlet][randnum + 2] != symbol1 and board[randlet][randnum + 3] != symbol1:
51 board[randlet][randnum] = symbol1
52 board[randlet][randnum + 1] = symbol1
53 board[randlet][randnum + 2] = symbol1
54 board[randlet][randnum + 3] = symbol1
55 shipcount4 += 1
56 if randint == 1 and randlet < (boardsize - 3) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet + 1][randnum] != symbol1 and board[randlet + 2][randnum] != symbol1 and board[randlet + 3][randnum] != symbol1:
57 board[randlet][randnum] = symbol1
58 board[randlet + 1][randnum] = symbol1
59 board[randlet + 2][randnum] = symbol1
60 board[randlet + 3][randnum] = symbol1
61 shipcount4 += 1
62
63 while shipcount5 < ship5:
64 randint = random.randint(0,1)
65 randlet = random.randint(0,boardsize - 1)
66 randnum = random.randint(0,boardsize - 1)
67 if randint == 0 and randnum < (boardsize - 4) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet][randnum + 1] != symbol1 and board[randlet][randnum + 2] != symbol1 and board[randlet][randnum + 3] != symbol1 and board[randlet][randnum + 4] != symbol1:
68 board[randlet][randnum] = symbol1
69 board[randlet][randnum + 1] = symbol1
70 board[randlet][randnum + 2] = symbol1
71 board[randlet][randnum + 3] = symbol1
72 board[randlet][randnum + 4] = symbol1
73 shipcount5 += 1
74 if randint == 1 and randlet < (boardsize - 4) and board[randlet][randnum] != symbol1 and board[randlet][randnum] != symbol1 and board[randlet + 1][randnum] != symbol1 and board[randlet + 2][randnum] != symbol1 and board[randlet + 3][randnum] != symbol1 and board[randlet + 4][randnum] != symbol1:
75 board[randlet][randnum] = symbol1
76 board[randlet + 1][randnum] = symbol1
77 board[randlet + 2][randnum] = symbol1
78 board[randlet + 3][randnum] = symbol1
79 board[randlet + 4][randnum] = symbol1
80 shipcount5 += 1
81
82
83 ##################################################### MAIN ######################################################
84
85 boardsize2 = 9
86 symbol4 = 'W'
87 seeboardpc = crtboard(boardsize2,symbol4)
88 seeboardu = crtboard(boardsize2,symbol4)
89 noseeboardpc = crtboard(boardsize2,symbol4)
90 noseeboardu = crtboard(boardsize2,symbol4)
91 symbol1 = '*'
92 symbol2 = 'S'
93 symbol3 = 'H'
94
95 ship2 = input("How many 2x1 ships do want?:")
96 ship3 = input("How many 3x1 ships do want?:")
97 ship4 = input("How many 4x1 ships do want?:")
98 ship5 = input("How many 5x1 ships do want?:")
99 tal = 1
100 letterB = 'A'
101 listA = []
102 zz = 0
103 while zz < boardsize2:
104 listA.append(letterB)
105 letterB = (chr(ord(letterB)+1))
106 zz += 1
107
108 crtships(noseeboardu,boardsize2)
109 crtships(noseeboardpc,boardsize2)
110
111
112 for line in noseeboardu:
113 print('%d' % tal +'%s\n' % str(line))
114 tal += 1
115
116 for lines in noseeboardu:
117 while '*' in lines:
118 let = input("Shoot column example A: ")
119 num = input("Shoot row example 2: ")
120 lines[num - 1][let - 1] = symbol2
121 print('0' + str(listA))
122 tal = 1
123 for lines in noseeboardu:
124 print('%d' % tal +'%s\n' % str(line))
125 tal += 1
126
127 print('game over')