为了账号安全,请及时绑定邮箱和手机立即绑定

Python 3:如何使用用户输入并从字典列表中检索答案制作游戏,然后使用积分系统?

Python 3:如何使用用户输入并从字典列表中检索答案制作游戏,然后使用积分系统?

慕标琳琳 2021-11-02 17:14:08
我正在尝试制作一个游戏,要求用户根据从字典列表中随机选择的首都来猜测一个国家(类似于底部的链接)。一共猜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']},那么如何从特定的键名中打印随机选择呢?在这种情况下,任何字典中的任何“大写”。
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

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))


查看完整回答
反对 回复 2021-11-02
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您可以使用以下两个选项。


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")


查看完整回答
反对 回复 2021-11-02
?
冉冉说

TA贡献1877条经验 获得超1个赞

您可以使用以下方法获取随机样本 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")


查看完整回答
反对 回复 2021-11-02
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号