def turn(gs, word_to_id, id_to_word, df, soft_score):
gs['turn_number'] += 1
names = list(gs['players'].keys())
current_player = names[(gs['turn_number'] % len(names) - 1)]
while True:
expr = input('{}, please enter a word expression:\n> '.format(current_player))
try:
vec, skip_words = eval_expression(expr, word_to_id, word_to_id, df)
except Exception as err:
print(err)
continue
break
answers = {}
for name in gs['players']:
while True:
word = input('{}, please enter your answer: '.format(name))
if word in word_to_id:
answers[name] = df[word_to_id[word]]
break
else:
print('{} is not in the dataset, please another word.'.format(word))
answer_word, answer_dist, answer_vec = find_nearest(skip_words, vec, id_to_word, df)[0]
# transform answers from vectors to distances
for k, v in answers.items():
answers[k] = cosine(v, answer_vec)
winner = min(answers, key=answers.get)
if not soft_score:
gs['players'][winner] += 1
else:
for name in answers:
gs['players'][name] += round(answers[name], 2)
print('Computer says {} = {}'.format(expr, colored(answer_word, 'cyan')))
print('{} wins this round.'.format(colored(winner, 'green')))
print_standings(gs)
评论列表
文章目录