Python 3: Как мне сделать игру, используя пользовательский ввод и получить ответ из списка словарей, а затем использовать систему баллов? - PullRequest
0 голосов
/ 08 февраля 2019

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

Всего 10 стран, если они правильно угадывают, что они получают 1 балл, всего 10 баллов.

Я импортировал переменную 'стран', которая содержит список словарей, таких какследующее:

[{'capital': 'Andorra la Vella',
  'code': 'AD',
  'continent': 'Europe',
  'name': 'Andorra',
  'timezones': ['Europe/Andorra']},
 {'capital': 'Kabul',
  'code': 'AF',
  'continent': 'Asia',
  'name': 'Afghanistan',
  'timezones': ['Asia/Kabul']},

Итак, как мне распечатать случайный выбор из определенного имени ключа?В этом случае любой «капитал» из любого из словарей.

Python-словарь состояний и заглавная игра

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

random.choice очень хорошо подходит для этого случая использования:)

import random


country_dlist = [{'capital': 'Andorra la Vella',
  'code': 'AD',
  'continent': 'Europe',
  'name': 'Andorra',
  'timezones': ['Europe/Andorra']},
 {'capital': 'Kabul',
  'code': 'AF',
  'continent': 'Asia',
  'name': 'Afghanistan',
  'timezones': ['Asia/Kabul']}
 ]

def run():
    tot_points = 0
    num_of_ques = len(country_dlist)
    for i in range(num_of_ques):
        choice = random.choice(country_dlist)
        que = country_dlist.remove(choice)
        capital = raw_input("Please enter the captial for country {}: ".format(choice['name']))
        if capital.lower() == choice['capital'].lower(): # case insensitive match :)
            tot_points += 1
    return tot_points

points = run()
print("You scored {} points".format(points))
0 голосов
/ 08 февраля 2019

Вы можете использовать следующие две опции.

  1. random.choice , чтобы выбрать случайный элемент из списка.

Пример кода.

from random import choice
country_dict = [{'capital': 'Andorra la Vella',     'code': 'AD',  continent': 'Europe',      'name': 'Andorra',      'timezones': 'Europe/Andorra']},
                {'capital': 'Kabul',      'code': 'AF',      'continent': 'Asia',      ame': 'Afghanistan',      'timezones': ['Asia/Kabul']}
               ]
country = choice(country_dict)
capital = input("Please enter the captial for country "+country['name'])
if capital == country['capital']:
    print("Correct answer")
random.ranint для выбора случайного целого числа от 0 до длины списка.

Пример кода:

from random import randint
country_dict = [{'capital': 'Andorra la Vella',      'code': 'AD',      'continent': 'Europe',      'name': 'Andorra',      'timezones': ['Europe/Andorra']},
                {'capital': 'Kabul',      'code': 'AF',      'continent': 'Asia',      'name': 'Afghanistan',      'timezones': ['Asia/Kabul']}
               ]
ind = randint(0,len(country_dict)-1)
capital = input("Please enter the captial for country "+country_dict[ind]['name'])
if capital == country_dict[ind]['capital']:
    print("Correct answer")
0 голосов
/ 08 февраля 2019

Вы можете выбрать случайную выборку с помощью randomCountry = random.choice(countries)

Однако, если вы сделаете это несколько раз, вы можете получить одну и ту же страну несколько раз.Чтобы бороться с этим, вы можете выбрать 10 различных элементов с randomCountries = random.sample(countries, 10), а затем повторить с ними.

Обратите внимание, что random.sample выдает ошибку, если вы пытаетесь выбрать больше элементов, чем существует в коллекции.

Таким образом, ваша игра может выглядеть так:

import random

countries = [
    {'capital': 'Andorra la Vella', 'code': 'AD', 'continent': 'Europe', 'name': 'Andorra', 'timezones': ['Europe/Andorra']}, 
    {'capital': 'Kabul', 'code': 'AF', 'continent': 'Asia', 'name': 'Afghanistan', 'timezones': ['Asia/Kabul']},
    ...
]

rounds = 10
random_countries = random.sample(countries, rounds) # returns 10 random elements (no duplicates)

score = 0
for country in random_countries:
    print("Score: %d / %d | Which country has the capital: %s?" % (score, rounds, country['capital']))
    country_response = input()
    if country_response == country['name']:
        score += 1
        print("Correct")
    else:
        print("Incorrect")
0 голосов
/ 08 февраля 2019

как это?

import random
place_list = [{'capital': 'Andorra la Vella', 'code': 'AD', 'continent': 'Europe', 'name': 'Andorra', 'timezones': ['Europe/Andorra']}, {'capital': 'Kabul', 'code': 'AF', 'continent': 'Asia', 'name': 'Afghanistan', 'timezones': ['Asia/Kabul']}]
quiz_length = 10
points = 0
for q in random.sample(place_list, quiz_length):
    guess = input(f'this place has {q['capital']} in it')
    if guess == q['name']:
        points += 1
print(f'you got {points}/{quiz_length}')

редактировать: остальной код ...

...