作为一名程序员,除了需要具备解决问题的思路以外,代码的质量和简洁性也很关键。因为从一个人的代码可以直接看出你的基本功。对于Python而言,这就意味着你需要对Python的内置功能和库有很深入的了解。

一 选择正确的内置功能

01.题目
在FizzBuzz中,你将获得一个整数列表,任务是执行以下操作:
用“fizz”替换所有可被3整除的整数
用“buzz”替换所有可被5整除的整数
将所有可被3和5整除的整数替换为“fizzbuzz”
 numbers = [45, 22, 14, 65, 97, 72]
for i, num in enumerate(numbers):
if num % 3 == 0 and num % 5 == 0:
numbers[i] = 'fizzbuzz'
elif num % 3 == 0:
numbers[i] = 'fizz'
elif num % 5 == 0:
numbers[i] = 'buzz'

推荐代码

02.使用断点breakpoint()调试而不是print()
你可能通过在代码中添加print并查看打印出的内容来调试一个小问题。这种方法起初效果很好,但很多就变得很麻烦。
如果你使用的是Python 3.7,则无需导入任何内容,只需在代码中要放入调试器的位置调用breakpoint():
调用breakpoint()会将你带入pdb,这是默认的Python调试器。在Python 3.6及更早版本中,你可以通过显式导入pdb来执行相同的操作:
像breakpoint()一样,pdb.set_trace()会将你带入pdb调试器。它不是那么简洁,而且需要记住的多一点。你可能想要尝试其他调试器,但pdb是标准库的一部分,
因此它始终可用。无论你喜欢哪种调试器,在进行编码面试设置之前,都值得尝试使用它们来适应工作流程。
import pdb; pdb.set_trace()
03.使用f-Strings格式化字符串
在coding中,如果使用Python 3.6+,建议的格式化方法是Python的f-strings。
f-string允许你将Maria放入字符串中,并在一个简洁的操作中添加具有所需格式的年龄。需要注意的一个风险是,如果你输出用户生成的值,那么可能会带来安全风险,
在这种情况下,模板字符串可能是更安全的选择。
def get_name_and_decades(name, age):
return f"My name is {name} and I'm {age / 10:.5f} decades old." get_name_and_decades("Maria", 31) # My name is Maria and I'm 3.10000 decades old.

二 有效利用基本的数据结构和方法

 import random
all_words = "all the words in the world".split()
def get_random_word():
return random.choice(all_words) def get_unique_words():
words = set()
for _ in range(200):
words.add(get_random_word())
return words print(get_unique_words())

1. 使用set存储唯一值

  sum((i * i for i in range(1, 1001)))

 """
换出括号会将列表推导更改为生成器表达式。当你知道要从序列中检索数据,但不需要同时访问所有数据的时候,生成器表达式非常适合。
当sum通过重复调用.__ next __()来迭代生成器对象时,生成器检查i等于多少,计算i * i,在内部递增i,并将正确的值返回到sum。
该设计允许生成器用于大量数据序列,因为一次只有一个元素存在于内存中。
"""

2. 使用生成器节省内存

 cowboy = {'age': 32, 'horse': 'mustang', 'hat_size': 'large'}
name = cowboy.setdefault('name', 'The Man with No Name') """
等价于:
if 'name' not in cowboy:
cowboy['name'] = 'The Man with No Name'
"""

3. 使用.setdefault()在字典中定义默认值

三 利用Python的标准库

 from collections import defaultdict

 grades = [
('elliot', 91),
('neelam', 98),
('bianca', 81),
('elliot', 88)
] """
你将创建一个defaultdict,它使用不带参数的list构造函数作为默认方法,
没有参数的list返回一个空列表你也可以使用lambda函数作为值来返回任意常量。
"""
student_grades = defaultdict(list)
for name, grade in grades:
student_grades[name].append(grade)

1.使用collections.defaultdict()处理缺少的字典键

 # 一长串没有标点符号或大写字母的单词,你想要计算每个单词出现的次数。
from collections import Counter
words = "if there was there was but if there was not there was not".split()
counts = Counter(words)
print(counts) # Counter({'there': 4, 'was': 4, 'if': 2, 'not': 2, 'but': 1})
print(counts.most_common(2)) # 返回n个最频繁的输入
"""
collections.Counter是dict的子类,它使用0作为任何缺失元素的默认值,并且更容易计算对象的出现次数:
"""

2. 使用collections.Counter计算Hashable对象

 import string
def is_upper(word):
for letter in word:
if letter not in string.ascii_uppercase:
return False
return True print(is_upper('T')) """
所有字符串常量都只是经常引用的字符串值的字符串。其中包括以下内容:
string.ascii_letters
string.ascii_uppercase
string.ascii_lowercase
string.digits
string.hexdigits
string.octdigits
string.punctuation
string.printable
string.whitespace
"""

3.使用字符串常量访问公共字符串组

 """
itertools有多个工具来生成可重复输入数据序列,但现在我们只关注两个常见函数:
itertools.permutations() 排列 区分顺序
itertools.combinations()。组合 不区分顺序 """
import itertools
a = ['a','b','c']
list(itertools.permutations(a,r=2)) # [('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')] import itertools
a = ['a','b','c']
list(itertools.combinations(a,r=2)) # [('a', 'b'), ('a', 'c'), ('b', 'c')]

4. 使用Itertools生成排列和组合

coding基本功实践的更多相关文章

  1. CODING 敏捷实践完全指南

    你好,欢迎使用 CODING! 这份最佳实践将帮助你掌握 CODING 敏捷管理工具,更好地实践敏捷开发流程. 更多实践案例持续更新中 什么是敏捷研发 敏捷研发是涉及整个软件工程的理念与实践,它的核心 ...

  2. 有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了

    写在前面 说来也很巧, 下午再做一个页面,再普通不过的分页列表,我还是像往常一样,基于MVC环境下,我正常用PagedList.MVC AJAX做无刷新分页,这时候问题就来了,列表数据中有个轮播图用到 ...

  3. Techparty-广州 10 月 31 日 Docker 专场沙龙 后记

    华为的童鞋技术能力很强,但是两位讲师的都没听进去.重点听了两个,一个是芒果TV的Docker 之路,另一个是Coding的实践和思考. 芒果TV的主讲人是一直仰慕的CMGS,从豆瓣出来后去了国企芒果台 ...

  4. [珠玑之椟]浅谈代码正确性:循环不变式、断言、debug

    这个主题和代码的实际写作有关,而且内容和用法相互交织,以下只是对于其内容的一个划分.<编程珠玑>上只用了两个章节20页左右的篇幅介绍,如果希望能获得更多的实例和技巧,我比较推崇<程序 ...

  5. 50篇经典珍藏 | Docker、Mesos、微服务、云原生技术干货

    概念篇 全方位探(tian)索(keng)Mesos各种存储处理方式 老肖有话说@Mesos User Group第四次约会 技术实践 | Mesos 全方位“烹饪”指南 回顾 JAVA 发展轨迹,看 ...

  6. DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升

    CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...

  7. python coding style guide 的高速落地实践

    python coding style guide 的高速落地实践 机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding ...

  8. CODING 代码多仓库实践

    关于代码的管理问题已经讨论多年,随着企业业务的复杂度提高.软件行业技术栈的选择度变宽泛,现代软件的代码仓库也变得越来越庞大和复杂.一个中型项目,将测试代码.核心业务代码.编译构建.部署打包等基础设施的 ...

  9. 如何使用 CODING 实践 DevOps 全流程

    你好,欢迎使用 CODING!这份最佳实践将帮助你通过 CODING 研发管理系统来更好地实践 DevOps 流程. DevOps 的本质是打破各个部门之间的隔阂,打通企业的前中后台,推进跨部门协作. ...

随机推荐

  1. django下的xadmin相关设置

    后台设置中文在 settings.py LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = ...

  2. C# 将前端传来的图片文件分别以大图和缩略图保存

    HttpPostedFile pic_upload = Request.Files["file"]; Bitmap bitmap = (Bitmap)System.Drawing. ...

  3. Linux-文件管理

    文件管理 创建.复制.删除.移动.查看.编辑.压缩.查找 Linux目录结构 Windows: 以多根的方式组织文件 C:\ D:\ E:\Linux: 以单根的方式组织文件 / /目录结构: FSH ...

  4. SQL随记(四)

    1.for loop 循环 格式:for index in lower .. upper loop end loop; for i in 1 .. g_descTbl.count loop if ( ...

  5. java 代码

    java 里的 pandas tablesaw DataFrame 再有就是 spark 了 java 代码规范 Java8特性详解 lambda表达式 Stream Sonar 规则检测 sprin ...

  6. Spring Boot 2.x以后static下面的静态资源被拦截

    今天创建一个新的Spring Boot项目,没注意到spring boot的版本,发现静态资源无法访问.百度一下发现好像是Spring Boot 2.0版本以后static目录不能直接访问. 接下来直 ...

  7. 通过DeviceIoControl读磁盘的方式读取独占文件内容

    前言 windows操作系统中常见的一个文件存储系统是NTFS.在这个文件系统中MFT是它的核心.             图一 MFT是一个数据结构,上图是它的结构,它主要用来存放每个文件和目录在磁 ...

  8. 第31月第17天 resolveInstanceMethod

    1. #import "UIView+Test.h" #import <objc/runtime.h> @implementation UIView (Test) + ...

  9. Codeforces Round #404 (Div. 2) D. Anton and School - 2

    题目链接 转自 给你一个字符串问你能构造多少RSBS. #include<bits/stdc++.h> #define LL long long #define fi first #def ...

  10. 20164305 徐广皓 Exp4 恶意代码分析

    实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systr ...