我有一个圆形板(一个列表),其中包含10个槽。在乞讨时,插槽是空的,当玩家移动到一个无主的插槽时,玩家成为所有者,并且必须为插槽想出一个字符串。如果另一个玩家进入这个插槽,玩家必须猜出字符串。如果客人正确,他将成为投币槽的新主人并获得硬币。
我不明白这个代码中的问题是什么?
from dataclasses import dataclass
@dataclass
class Player:
firstname: str
lastname: str
coins: int
slot: int
def full_info(self) -> str:
return f"{self.firstname} {self.lastname} {self.coins} {self.slot}"
@classmethod
def from_user_input(cls) -> 'Player':
return cls(
firstname=input("Please enter your first name:"),
lastname=input("Please enter your second name: "),
coins=200,
slot= 0)
minplayer, maxplayer, n = 2, 5, -1
while not(minplayer <= n <= maxplayer): #definding the maximum and minimum players
n = int(input(f" Choose a number of players between {minplayer} and {maxplayer}: "))
playersingame = [] #storing it in the list
for i in range(n):
playersingame.append(Player.from_user_input())
print([player.full_info() for player in playersingame])
board = [[ ] for i in range(10)]
for player in playersingame:
board[ player.slot ].append(player)
print(board)
print()
import random
for player in playersingame:
input(f"{player.firstname} {player.lastname}, please press enter to roll your die...")
die = random.randint(1,6)
print(f"You take {die} step{'s'* (die>1)} forward")
board[player.slot].remove(player)
player.slot += die
board[player.slot].append(player)
print(board)
def shift(seq, n=0):
a = n % len(seq)
return seq[-a:] + seq[:-a]
round_counter=1
rounds=30
# round counter
while (round_counter <= rounds):
for player in playersingame:
input(f"{player.firstname} {player.lastname}, please press enter to roll your die...")
die = random.randint(1,6)
print(f"You take {die} step{'s'*(die>1)} forward")
board[player.slot].remove(player)
player.slot = (player.slot + die) % len(board)
board[player.slot].append(player)
问题出在第35行,电路板在那里制作我试着制作插槽:
board = [[ ] for i in range(10)]
board =
slot[1] = {"MagicString": "pizza", "Owner": ""}
slot[2] = {"MagicString": "pasta", "Owner": ""}
slot[3] = {"MagicString": "cupcake", "Owner": ""}
slot[4] = {"MagicString": "chocolate", "Owner": ""}
slot[5] = {"MagicString": "tea", "Owner": ""}
slot[6] = {"MagicString": "Wings", "Owner": ""}
slot[7] = {"MagicString": "jelly", "Owner": ""}
slot[8] = {"MagicString": "milk", "Owner": ""}
slot[9] = {"MagicString": "soup", "Owner": ""}
slot[10] = {"MagicString": "cake", "Owner": ""}
board = [[ ] for i in range(10)] // line 1
board = // line 2
slot[1] = {"MagicString": "pizza", "Owner": ""} // line 3
...
这段代码没有意义。
在第1行中,您将board
定义为空列表的列表。这没什么不对的。
但是在第2行中,您抛弃了该定义,并重新开始定义board
。但是您没有完成这一行并为表达式提供右侧。你想把board
赋值为什么?
在第3行中,您尝试给slot[1]
赋值,但是您之前没有将slot
定义为可以用[]
操作符下标的对象。
所以这里至少有三个错误,其中两个将被Python解释器拒绝。
如果你想用字典替换board
列表中的条目,你可以这样写board[0] = {...}
。
或者,如果您想将这些字典添加到board
列表中的列表中,您可以输入board[0].append({...})
。
更好的方法可能是定义另一个类来表示一个棋盘槽,并定义函数将玩家和/或字符串添加到该类的对象中。然后在板子上列出这些槽对象。
这样应该可以;当然,最好将板打印放入"圆形"循环中,最好是在"圆形n"打印之后,并更好地格式化它,包括每个插槽所有者的信息:
minplayer, maxplayer, n = 2, 5, -1
while not(minplayer <= n <= maxplayer): #definding the maximum and minimum players
n = int(input(f" Choose a number of players between {minplayer} and {maxplayer}: "))
playersingame = [] #storing it in the list
for i in range(n):
playersingame.append(Player.from_user_input())
print('Players in game: ',[player.full_info() for player in playersingame],'n')
board = [{'players':[ ], 'magicstring': None, 'owner': None} for i in range(10)]
for player in playersingame:
board[player.slot]['players'].append(player)
print([[p.full_info() for p in s['players']] for s in board], 'n')
import random
round_counter=1
rounds=30
# round counter
while (round_counter <= rounds):
print("nnRound ", round_counter,'nn')
for player in playersingame:
input(f"{player.firstname} {player.lastname}, please press enter to roll your die...")
die = random.randint(1,6)
print(f"You take {die} step{'s'*(die>1)} forward")
board[player.slot]['players'].remove(player)
player.slot = (player.slot + die) % len(board)
board[player.slot]['players'].append(player)
if board[player.slot]['owner'] == None:
board[player.slot]['owner'] = player
board[player.slot]['magicstring'] = input('Choose your magic string: ')
else:
print('placeholder')
round_counter += 1