小练习之集合:列表 n1 = [1,3,5,7,12,14,16,18,23],计算任意元素相加为17的集合

if __name__ == '__main__':n1 = [1,3,5,7,12,14,16,18,23]list = []l = len(n1)for i in range(0, l - 1):for j in range(i + 1, l):if n1[i] + n1[j] == 17:n = (n1[i], n1[j])list.append(n)print(list)

1 字典

之前提到过,元组的优点是可以处理含有任意类型数据的序列,但其元素不可变会带了很多的限制。列表可以做元组可做的事情,处理的是成组的数据,本文所使用的字典是处理成对的数据,主要是通过一个数据匹配到另一个数据,并且效率极高。

先来看Hangman(一个猜单词的双人游戏),玩家猜错一次,计算机就会显示一张绞刑图片,如果最终没能猜对,最终的结果就是显示一个被绞死的人。如下图:

部分代码:

def hangman():word = get_valid_word(words)word_letters = set(word)  # letters in the wordalphabet = set(string.ascii_uppercase)used_letters = set()  # what the user has guessedlives = 7# getting user inputwhile len(word_letters) > 0 and lives > 0:print('You have', lives, 'lives left and you have used these letters: ', ' '.join(used_letters))word_list = [letter if letter in used_letters else '-' for letter in word]print(lives_visual_dict[lives])print('Current word: ', ' '.join(word_list))user_letter = input('Guess a letter: ').upper()if user_letter in alphabet - used_letters:used_letters.add(user_letter)if user_letter in word_letters:word_letters.remove(user_letter)print('')

对于Hangman游戏来说,既可以使用列表也可以使用字典实现(以上二者皆有使用,需要代码可以联系博主)。对于字典来说,字典的每个键值 key => value 对用 : 分隔开,整个字典会包含在 {} 中,一般如下(千万不要用dict作为变量名):

 color = {'red' : 1, 'blue' : 2, 'green' : 3}

使用键来访问字典值的效率极高,即便字典包含数千个键 - 值对。同样的,字典也可以添加、修改或者删除数据元素。不过,字典也有两个限制:

1. 字典中的键必须是独一无二的,即在 同一个字典中,任何两个键值对的键都不能相同;

2. 键必须是不可变的。因此,字典键不能是列表,也不能是字典。因为键值对在字典中的存储位置是根据键计算得到的。即便键发生细微变化,键值对在字典中的位置也将变化。这可能导致键值对丢失或无法访问。

2 字典函数

Python对于字典的使用也内置了许多功能函数,具体如下表所示:

函数名

返回值含义

dict1.items()

返回一个由字典 dict1 的键值对组成的视图

dict1.keys()

返回一个由字典 dict1 的键组成的视图

dict1.values()

返回一个由字典 dict1 的值组成的视图

dict1.get(key)

返回与 key 相关联的值

dict1.pop(key)

删除键 key 并返回与之相关联的值

dict1.popitem()

删除字典 dict1 中的某个键值对并返回相应的键值

dict1.clear()

删除字典 dict1 的所有元素

dict1.copy()

复制字典 dict1

dict1.fromkeys(s, t)

创建一个新字典,其中的键来自 s,值来自 t

dict1.setdefault(key, v)

如果键 key 包含在字典 dict1 中,则返回其值;否则,返回 v 并将 (key, v) 添加到字典 dict1 中

dict1.update(e)

将 e 中的键 - 值对添加到字典 dict1中;e 可能是字典,也可能是键值对序列

部分示例如下:

同时,对于两个字典来讲,Python也实现了简单的字典比较功能函数,主要有cmp(dict1, dict2)、len(dict)、str(dict)、type(variable)。

在使用中在去感受下字典的需求,也就是上面所提到的使用字典的限制。陈述到这里,我们在回溯一下一开始提到的Hangman游戏,这个程序的代码量相比于开发是少很多的,或许重点更在于需要准备的绞刑图,如下:

希望感兴趣的同志们可以实现一下这个小游戏,需要实现的部分有三个:

1.上面提到的图;
2.随机选取的words;
3.hangman游戏的主体函数部分。

Hangman实现参考

1.绞刑图

view = {0: """___________| /        | |/        ( )|          ||         / \\|""",1: """___________| /        | |/        ( )|          ||         / |""",2: """___________| /        | |/        ( )|          ||          |""",3: """___________| /        | |/        ( )|          |          |""",4: """___________| /        | |/        |          |          |""",5: """___________| /        |/        |          |          |""",6: """|||||""",7: "",}

2.words准备

words = ["aback","abaft","abandoned","abashed","aberrant","abhorrent","abiding","abject","ablaze"]
#数量自己定

3.功能函数部分

1.使用python库和上述两个代码段

import random
from practicce.hangman.words import words
from practicce.hangman.view import view
import string

2.随机从列表中选取word

def get_valid_word(words):word = random.choice(words)  # randomly chooses something from the listwhile '-' in word or ' ' in word:word = random.choice(words)return word.upper()

3.功能函数实现

def hangman():word = get_valid_word(words)#随机选出的单词word_letters = set(word)  alphabet = set(string.ascii_uppercase)#设置用户输入的单词used_letters = set()  lives = 7while len(word_letters) > 0 and lives > 0:print('You have', lives, 'lives left and you have used these letters: ', ' '.join(used_letters))word_list = [letter if letter in used_letters else '-' for letter in word]print(lives_visual_dict[lives])print('Current word: ', ' '.join(word_list))user_letter = input('Guess a letter: ').upper()if user_letter in alphabet - used_letters:used_letters.add(user_letter)if user_letter in word_letters:word_letters.remove(user_letter)print('')else:lives = lives - 1  #print('\nYour letter,', user_letter, 'is not in the word.')elif user_letter in used_letters:print('\nYou have already used that letter. Guess another letter.')else:print('\nThat is not a valid letter.')if lives == 0:print(lives_visual_dict[lives])print('You died, sorry. The word was', word)else:print('Greate! You guessed the word', word, '!!')

Python数据结构之字典相关推荐

  1. python数据结构之字典(未完成)

    字典 dic = {key:value} 1.字典特性 key必须是唯一的,值不必是唯一. 值可以是任何数据类型,比如list,tuple,字符,数值等.key只能是不可变的数据类型. 同一个key不 ...

  2. python数据结构之字典(dict)——超详细

    字典(dict) 1.什么是字典 字典是具有映射关系的一个集合,有自己的标志性符号,用{}来定义.字典由多个键以及其对应的键值共同构成的,字典是无序的,只讲究对应关系,并且字典中的键是独一无二的 1. ...

  3. python 字典_Python数据结构:字典那些事儿

    写在前面 本系列适合0基础的人食用,这是利用Excel学习Python系列的第5篇文章 之前的列表都复习好了吗:python数据结构:列表 are u ready?另一种数据结构:字典,要来了 字典( ...

  4. Python学习 数据结构列表字典元组

    本章节我们主要结合前面所学的知识点来介绍Python数据结构. 1.元组结构(Tuple) 元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串.数字甚至元组.元组创建后不能修改. 元组通常 ...

  5. python 映射表结构_Python 中常见的数据结构:字典、映射和散列表

    在 Python 中,字典是核心数据结构.字典可以存储任意数量的对象,每个对象都由唯一的字典键标识. 字典通常也被称为映射.散列表.查找表或关联数组.字典能够高效查找.插入和删除任何与给定键关联的对象 ...

  6. 从零开始学Python第13课:常用数据结构之字典

    迄今为止,我们已经为大家介绍了Python中的三种容器型数据类型(列表.元组.集合),但是这些数据类型仍然不足以帮助我们解决所有的问题.例如,我们需要一个变量来保存一个人的多项信息,包括:姓名.年龄. ...

  7. 1.4、Python数据结构——字典(dict)

    目录 1.定义字典 2.使用字典 2.1.访问字典,用键查找 2.2.修改字典 2.3.新增元素 2.4.删除元素 3.字典的其他操作 3.1.clear(),清空字典所有元素 3.2.copy(), ...

  8. Python基础编程——字典

    前面介绍了序列,本节将介绍Python中唯一的内置映射类型-字典(dict),在字典中值不是按照索引来排列的,而是存储在指定的键下面,键可能是字符串.数字.元组等.Python中的字典类似于json格 ...

  9. python数据结构包括什么_Python中的数据结构详解

    概述 在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容 了解Python提供的不同数据结构,包括列表.元组等 介绍 数据结构听起来是一个非常直截了当的话题,但许多数据 ...

最新文章

  1. 蓝湖怎么切图标注_【蓝湖指北】你真的会切图吗?
  2. 储存外部资源的Android项目子目录,Android资源使用
  3. 利用Azure communication service实现跟Teams同样等级的沟通协作应用
  4. 【渝粤教育】国家开放大学2018年春季 0283-21T广告创意与表现(二) 参考试题
  5. 作者:孟凡(1989-),男,中国科学院大学经济与管理学院、中国科学院大数据挖掘与知识管理重点实验室博士生...
  6. IDEA——修改idea64.exe.vmoptions文件解决coding卡顿问题
  7. 创建设计模式 - Builder设计模式
  8. 怎么用程序实现调用Android手机的拍照功能
  9. 雷军微博“导购”小米8 SE:名副其实的小屏旗舰!
  10. mybatis--一对一、一对多、多对多(七)
  11. 共享会话怎么设置没访问自动断开_谁总结的JavaWeb会话技术了?太全面了...
  12. 计算机硬件只能做维修吗,关于计算机硬件维修的研究
  13. CCF201409-3 字符串匹配(100分)
  14. 启动root用户 银河麒麟_银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP
  15. 在Java中用SHA1WithRSA创建的签名如何在.NET中验证
  16. ChromeOS+Win双系统安装教程
  17. 苹果服务器文件夹共享权限设置,苹果设备如何访问 Windows 文件共享?
  18. linux wgei目录,近 100 个 Linux 常用命令大全
  19. Scrum敏捷发布和预算管理
  20. 有料科普 | 三峡大坝怎么过船,无用但能吹牛皮的知识又增加了

热门文章

  1. 零基础如何挖掘漏洞?
  2. html的表格宽度单位选项,css表格宽度用什么设置?
  3. 基于Vue前端UI框架比较
  4. 鸿蒙os苹果ios对比,华为鸿蒙OS与苹果iOS测试,谁更流畅,真实对比大家看一下...
  5. siri捷径调用谷歌翻译_告诉它使用Google助理,以减少Siri的麻烦
  6. Shiro学习笔记-----小组开发前后端分离项目---登陆认证盐值加密
  7. log4j.additivity用法和例子
  8. outlook 设置 YAHOO.COM.CN信箱
  9. oracle dedicated server (),oracle share server DEDICATED server
  10. 计算机主机重启键,电脑重启快捷键是什么