#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']