Заполнение строкового массива в Python - домашний задание для начинающего CS - PullRequest
0 голосов
/ 28 октября 2018

Долго боролся с этим относительно простым вопросом о заполнении крестика.

# List variable ticTacToe should eventually 
# hold [ [ a, b, c ], [ d, e, f ], [ g, h, i ]]
# to represent the Tic Tac to board:
#    a b c
#    d e f
#    g h i

ticTacToe = [ [], [], [] ]

firstRow = input()

secondRow = input()

thirdRow = input()

ticTacToe.append(firstRow)

ticTacToe.append(secondRow)

ticTacToe.append(thirdRow)    

#Output handled for you

for i in range(3) : for j in range(3) : print( "%3s" % ticTacToe[i][j], end="") print()

Вывод предоставлен мне и не может быть заменен.

У меня тут две проблемы.

  1. Я не могу получить строку внутри [] без удаления скобок и начала заново.Если бы я напечатал ticTacToe, я бы получил [[], [], [], 'a,b,c', 'd,e,f', 'g,h,i'] вместо [[a,b,c], [d,e,f], [g,h,i]]

  2. Нежелательные кавычки продолжают появляться.Если first row = a,b,c, когда я добавляю его в ticTacToe, оно отображается как ['a,b,c'] вместо [a,b,c]

Не уверен, где я иду не так, и любая помощь будет оценена.Спасибо.

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Вы можете использовать простой цикл ввода, разделенный пробелами и добавить к списку ticTacToe:

ticTacToe = []
for x in input('Enter rows (each element separated by comma) separated by space: ').split():
    ticTacToe.append(x.split(','))

print(ticTacToe)
#Output handled for you

Пример выполнения :

Enter rows (each element separated by comma) separated by space: a,b,c d,e,f g,h,i
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]


Или все в одной строке:
ticTacToe = [x.split(',') for x in input('Enter rows (each element separated by comma) separated by space: ').split()]
0 голосов
/ 28 октября 2018

Во-первых, в python кавычки указывают строку, поэтому вы должны иметь их там.

Поскольку ticTacToe - это список списков, вы добавляете свои входные данные в самый внешний список.Чтобы добавить к внутренним спискам:

ticTacToe = [ [], [], [] ]

firstRow = input()
secondRow = input()
thirdRow = input()

ticTacToe[0].append(firstRow)
ticTacToe[1].append(secondRow)
ticTacToe[2].append(thirdRow)  

# ticTacToe >>> [['a,b,c'], ['d,e,f'], ['g,h,i']]

Однако, если исходить из выходного кода, может показаться, что это не то, что ваш инструктор хочет, чтобы вы делали.

Вместо этого каждый изсписки должны содержать один символ, а не всю строку символов.

Это будет выглядеть примерно так:

[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

Есть много способов сделать это, но вот один:

ticTacToe = [[], [], []]

firstRow = input()
secondRow = input()
thirdRow = input()

ticTacToe[0] = firstRow.split(",")
ticTacToe[1] = secondRow.split(",")
ticTacToe[2] = thirdRow.split(",") 

Метод split берет строку и преобразует ее в список при условии разделителя, в данном случае ','.Затем он присваивает (не добавляет) внутренние списки.(Примечание: это не сработает, если вы поставите пробел после запятой, но я позволю вам выяснить это)

0 голосов
/ 28 октября 2018

Вы должны прочитать о списках: Списки PyTut

board = [ [], [], [] ]       # a list of 3 other lists

# addd somthing to board:    
board.append("something")    # now its a list of 3 lists and 1 string
print(board)

board = board + ["otherthing"]   # now its a list of 3 lists and 2 strings
print(board)


# modify the list inside board on place 0:
zero_innerlist = board[0]        # get the list at pos 0 of board
print(board)          
zero_innerlist.append("cat")     # put something into that inner list
print(board)
zero_innerlist.append("dog")     # put more into that inner list
print(board)
print(zero_innerlist)            # print "just" the inner list

one_innerlist = board[1]         # modify the 2nd inner list at pos 1
one_innerlist.append("demo")
print(board)

Выходы:

[[], [], [], 'something', 'otherthing']                     # board
[[], [], [], 'something', 'otherthing']                     # board
[['cat'], [], [], 'something', 'otherthing']                # board
[['cat', 'dog'], [], [], 'something', 'otherthing']         # board
['cat', 'dog']                                              # zero_innerlist
[['cat', 'dog'], ['demo'], [], 'something', 'otherthing']   # board

Если вы хотите добавить 3 вещи в каждый из внутренних списковвам нужно 3 добавления к каждому из внутренних списков.


Другое приятное чтение: форматирование строки и f-строки :

Вы используете стиль печати 2.7, для формата 3 и 3.6 и f-строки лучше:

board = [ ["a","b","c"], ["d","e","f"], ["g","h","i"] ]

for i in range(3) :
    for j in range(3) :
        print( f"{board[i][j]:3s}", end="")
    print()

# or 

for row in board:
    for col in row:
        print( f"{col:3s}", end="")
    print()

# or 

for row in board:
    print( f"{row[0]:3s}{row[1]:3s}{row[2]:3s}")

# or 

print( '\n'.join( ( ''.join(f"{col:3s}" for col in row ) for row in board) ))

Вывод (все):

a  b  c  
d  e  f  
g  h  i  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...