Присвоение переменной на основе позиции в таблице с переменным количеством позиций

#python

#python

Вопрос:

Я начинаю с python, надеюсь, моя проблема не покажется слишком очевидной, я искал, но не смог найти ответ. (Я обрезал часть текста для ясности)

У меня есть этот текст:

Место 1: AAA (103,18 долларов США) Место 2: BBB (97,50 долларов США) Место 3: CCC (22,57 долларов США) — дилер Место 4: место 5: DDD (104,74 долларов США)

Я могу получить имя и номер для каждого места и знаю, что позиция дилера = 3

Я хотел бы назначить позицию на основе позиции дилера:

SB = DDD BB = AAA Co = BBB B = CCC

моя проблема в том, что позиция дилера не фиксирована, а количество игроков не фиксировано (оно составляет от 2 до 10), и могут быть некоторые пробелы (пустые места)

вот что я сделал (какую работу, поскольку она дает мне строки в правильном порядке, которые я затем могу сопоставить), но я уверен, что есть более элегантный способ сделать это

 Playerorder = [Seat1Name,Seat2Name,Seat3Name,Seat4Name,Seat5Name,Seat6Name,Seat7Name,Seat8Name,Seat9Name,Seat10Name]
Stacksord = [Seat1Stack,Seat2Stack,Seat3Stack,Seat4Stack,Seat5Stack,Seat6Stack,Seat7Stack,Seat8Stack,Seat9Stack,Seat10Stack]
PositionsPossibles = ["SB","BB","UTG","UTG1","UTG2","UTG3","LJ","HJ","CO","B"]
Positions = PositionsPossibles

#Emptycount count the number of empty seats I am deleteing in the string all #the empty seats, and empty positions
 
for i in range(Emptycount):
    del Positions[2]
       
Playerorder[:] = (value for value in Playerorder if value != "EMPTY")
 
Stacksord[:] = (value for value in Stacksord if value != "EMPTY")

 #then i reorder the relevant string based on button position   
PlayerinOrder =[]
for i in range(NumberOfPlayer):
    PlayerinOrder.append(Playerorder[(i DealerSeat)%NumberOfPlayer])
print(PlayerinOrder)

StacksinOrder =[]
for i in range(NumberOfPlayer):
    StacksinOrder.append(Stacksord[(i DealerSeat)%NumberOfPlayer])
print(StacksinOrder)
    
 

Комментарии:

1. ok не понял: PlayerOrder[AAA, BBB, CCC, «ПУСТОЙ», DDD, «ПУСТОЙ», «ПУСТОЙ»,»ПУСТОЙ», «ПУСТОЙ», «ПУСТОЙ»] Порядок стека [103.18,97.5,22.57, «ПУСТОЙ», 104.74, «ПУСТОЙ», «ПУСТОЙ»,»ПУСТО»,»ПУСТО», «ПУСТО»] в принципе, может быть до 10 игроков, и мы не знаем, на каком месте они будут сидеть. поэтому я тестирую плеер от 1 до 10, чтобы получить данные и поставить «ПУСТОЙ», если я не нахожу его. Что меня сбило с толку, если количество игроков и позиция никогда не фиксируются.

Ответ №1:

В вашем примере кода по-прежнему отсутствует много содержимого переменных. Я не смог скопировать / вставить его в скрипт для тестирования, поэтому я попытаюсь угадать, с чего вы начинаете и чего ожидаете.

Я предполагаю, что вы хотите, чтобы позиции содержали ['BB','CO','B','SB'] так, чтобы коды позиций совпадали с порядком воспроизведения ['AAA','BBB','CCC','DDD'] .

Чтобы достичь этого с помощью простого кода, вам понадобится список кодов позиций, организованный таким образом, чтобы значения с отрицательным и положительным индексами соответствовали игрокам, сидящим слева и справа от дилера.

Вот пример:

 DealerSeat = 2
relative   = ["B","SB","HJ","...","BB","CO"] # positions relative to dealer seat
positions  = [relative[i] for i,_ in enumerate(Playerorder,-DealerSeat)]

print(positions)   # ['BB',  'CO',  'B',   'SB']
print(Playerorder) # ['AAA', 'BBB', 'CCC', 'DDD']
 

В relative списке индексы -1, -2 … соответствуют игрокам слева от дилера, а индексы 0,1,2 … соответствуют самому дилеру и игрокам справа.

Если вы хотите впоследствии повернуть списки так, чтобы дилер находился в нулевой позиции, вы можете использовать индексы, подобные этому:

 PlayerinOrder = Playerorder[DealerSeat:]     Playerorder[:DealerSeat]
StacksinOrder = StacksinOrder[DealerSeat:]   StacksinOrder[:DealerSeat]
positions     = positions[DealerSeat:]       positions[:DealerSeat]

PlayerinOrder    # ['CCC', 'DDD',  'AAA',  'BBB']
StacksinOrder    # [22.57, 104.74, 103.18, 97.5]
positions        # ['B',   'SB',   'BB',   'CO']