Python 3:如何使用用户输入并从字典列表中检索答案来制作游戏,然后使用积分系统?
Python 3: How do I make a game using user input and retrieving answer from a list of dictionaries, then use a point system?
我正在尝试制作一款游戏,要求用户根据从字典列表中随机选择的首都猜测一个国家(类似于底部的 link)。
一共猜10个国家,猜对得1分,共10分。
我导入了一个变量 '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']},
那么如何根据特定键名打印随机选择?在这种情况下,任何字典中的任何 'capital'。
像这样?
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}')
编辑:其余代码...
您可以使用以下两个选项。
- random.choice 至
select 列表中的随机元素。
示例代码。
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 到 select 介于 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")
您可以使用 randomCountry = random.choice(countries)
获取随机样本
但是,如果多次执行此操作,您可能会多次获得同一个国家/地区。为了解决这个问题,您可以使用 randomCountries = random.sample(countries, 10)
对 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")
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))
我正在尝试制作一款游戏,要求用户根据从字典列表中随机选择的首都猜测一个国家(类似于底部的 link)。
一共猜10个国家,猜对得1分,共10分。
我导入了一个变量 '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']},
那么如何根据特定键名打印随机选择?在这种情况下,任何字典中的任何 'capital'。
像这样?
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}')
编辑:其余代码...
您可以使用以下两个选项。
- random.choice 至 select 列表中的随机元素。
示例代码。
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 到 select 介于 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")
您可以使用 randomCountry = random.choice(countries)
但是,如果多次执行此操作,您可能会多次获得同一个国家/地区。为了解决这个问题,您可以使用 randomCountries = random.sample(countries, 10)
对 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")
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))