Как напечатать два вертикальных списка рядом друг с другом - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь кодировать игру Connect 4. Если вы не знаете правил, посмотрите, это относительно простая игра.Я сделал каждый ряд в список.Тем не менее, он печатает каждый ряд под другим.Я хочу, чтобы он печатал каждую строку рядом с другой.

#Variables that determine how close up or if the slot is full for each column
ZeroTime = 0
OneTime = 0
TwoTime = 0
ThreeTime = 0
FourTime = 0
FiveTime = 0
SixTime = 0

#Makes the List for Each Row
ListZero = ["0",".", ".", ".", ".", ".", ".", "."]
ListOne = ["1",".", ".", ".", ".", ".", ".", "."]
ListTwo = ["2",".", ".", ".", ".", ".", ".", "."]
ListThree = ["3",".", ".", ".", ".", ".", ".", "."]
ListFour = ["4",".", ".", ".", ".", ".", ".", "."]
ListFive = ["5",".", ".", ".", ".", ".", ".", "."]
ListSix = ["6",".", ".", ".", ".", ".", ".", "."]

#Asks The Players For Their Usernames
namo = str(input("Player O what is your name: "))
namx = str(input("Player X what is your name: "))
print (namo + " is using O and " + namx + " is using X")

#Prints Current Board
print ("""
The current board is:

0 1 2 3 4 5 6
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
""")

#Asks the O player for which column they are going to choose
ot = str(input(namo + ", you're O! Enter which column you choose:"))

#Adds the slot
#For Slot 0
if ot == "0":
  ListZero [7 - ZeroTime] = "O"
  print (ListZero [0 + ZeroTime])
  ZeroTime = ZeroTime + 1
if ot == "1":
  ListOne [7 - ZeroTime] = "O"
  print (ListZero [0 + ZeroTime])
  ZeroTime = ZeroTime + 1
if ot == "2":
  ListTwo [7 - ZeroTime] = "O"
  print (ListZero [0 + ZeroTime])
  ZeroTime = ZeroTime + 1
if ot == "3":
  ListThree [7 - ZeroTime] = "O"
  print (ListZero [0 + ZeroTime])
  ZeroTime = ZeroTime + 1
if ot == "4":
  ListFour [7 - ZeroTime] = "O"
  print (ListZero [0 + ZeroTime])
  ZeroTime = ZeroTime + 1

else:
  print ("""We Hit an Error!
  Sorry, we don't have a slot for that. The code only allows these 
slots: 
  0, 1, 2, 3, 4, 5, 6.
 Your turn has been skipped. """) #Added turn has been skipped, I can 
fix that later but we're in the prototype right now

#Prints the Board After That
print ("""
The current board is:
""")

#I was confused on printing lists with the [] and '' so I googled 
online, the base code for this was found online. However, I added 
ListZero, ListOne, etc.
print(*ListZero, sep='\n')
print(*ListOne, sep='\n')
print(*ListTwo, sep='\n')
print(*ListThree, sep='\n')
print(*ListFour, sep='\n')
print(*ListFive, sep='\n')
print(*ListSix, sep='\n')

Ответы [ 4 ]

0 голосов
/ 15 декабря 2018

Поскольку это четвертое соединение, я бы предложил использовать numpy, чтобы вы также могли получить диагонали:

import numpy as np
a = np.full((7, 6), '.')
print(a)
print('')

Приведенный выше код генерирует матрицу и распечатывает ее.Здесь код ниже заполняет некоторые ячейки и показывает, как получить диагонали, см. https://docs.scipy.org/doc/numpy/reference/generated/numpy.diagonal.html

a[0][0] = 'T'
a[6][0] = 'B'
a[5][0] = 'S'
a[4][0] = 'L'
a[6][1] = 'R'
a[5][1] = 'X'
a[6][5] = 'K'
a[3][3] = 'E'
a[0][5] = 'Z'
a[2][5] = 'M'
a[1][0] = 'N'


for i in range(6):
  print(a.diagonal(i,0,1))

for i in range(5):
  print(a.diagonal(-i-1,0,1))
0 голосов
/ 15 декабря 2018

Вместо того, чтобы печатать списки последовательно, вы можете сначала перебирать позиции элементов списков, а затем перебирать списки:

mylists = [ListZero, ListOne, ListTwo, ListThree, ListFour, ListFive, ListSix]

for i in range(8):
    for alist in mylists:
        print(alist[i], end=' ')
    print()

Однако решение Винет более элегантно.

0 голосов
/ 15 декабря 2018

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

import numpy 
a = numpy.array([[YOUR LISTS],[YOUR LISTS],...])
print(a.T)
0 голосов
/ 15 декабря 2018

Вот небольшой фрагмент о том, как вы можете напечатать два списка вертикально рядом друг с другом.Может быть, вы можете расширить это на свой код.zip может принимать любое количество объектов, поддерживающих итерацию.

one = ['a', 'b', 'c']
two = [1, 2, 3]
three = ['q', 'w', 'e']

for x, y, z in zip(one,two, three):
    print(x, y, z)

Выходы:

a 1 q
b 2 w
c 3 e

Это соответствует вашему коду ..

ListZero = ["0",".", ".", ".", ".", ".", ".", "."]
ListOne = ["1",".", ".", ".", ".", ".", ".", "."]
ListTwo = ["2",".", ".", ".", ".", ".", ".", "."]
ListThree = ["3",".", ".", ".", ".", ".", ".", "."]
ListFour = ["4",".", ".", ".", ".", ".", ".", "."]
ListFive = ["5",".", ".", ".", ".", ".", ".", "."]
ListSix = ["6",".", ".", ".", ".", ".", ".", "."]


for a,b,c,d,e,f,g in zip(ListZero, ListOne, ListTwo, ListThree, ListFour, ListFive, ListSix):
    print(a,b,c,d,e,f)

Выходы:

0 1 2 3 4 5
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .

Надеюсь, это помогло.

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