, хотя это совершенно не нужно, я все еще хочу попытаться поместить все, что я могу, в как можно меньшие строки кода при использовании ООП
Я сделал код без ООП, но кто-то спросил, может ли онПо завершении ООП проблему можно решить с помощью большего количества строк кода, но я хочу поместить как можно больше в 1
class Player:
def __init__(self,x,y,z,a):
self.id = x
self.prompt = y
self.score = z
self.overall_scores = a
players = [Player(x,y,random.randint(1,6),{z.id:z.score for z in players}
if x == 3 else None) for x,y in zip(range(0,4),["First", "Second", "Third",
"Fourth"])]
Я ожидаю, что у каждого игрока будет свой счет и последний игроксохраните общие оценки, чтобы я мог отсортировать их по значению, чтобы определить игрока с наибольшим количеством очков.Обратите внимание, что ООП - не лучший способ решения этой задачи, но меня спросили, как бы это выглядело при ООП
Что должна делать программа: каждому игроку присваивается случайный балл, а затем ранжируется на основе самого высокого балла
Редактировать: поскольку был запрошен код без ООП, вот он:
import operator,random
players = {x:0 for x in range(0,4)}
prompts = ["First", "Second", "Third", "Fourth"]
for a in players:
players[a] = random.randint(1,6)
print("%s:\nDice: %s" % (prompts[a],players[a]))
sorted_players = sorted(players.items(),key=operator.itemgetter(1))
draw = True
previous = 0
draw_between = []
first = True
for a in sorted_players[::-1]:
if first:
previous = a[1]
first = False
elif previous != a[1]:
draw = False
if draw:
draw_between.append(a[0])
if draw:
print("The chances of this were astronomically low but it happened anyway!")
print("It's a draw!")
elif len(draw_between) <= 1:
print("%s Player Wins!" % (prompts[sorted_players[-1][0]]))
else:
out = "First place is a draw between Players:\n"
draw_between.sort()
for b,a in enumerate(draw_between):
out += str(prompts[a])
if b < len(draw_between)-1:
out += ", "
print(out)