coding基本功实践
作为一名程序员,除了需要具备解决问题的思路以外,代码的质量和简洁性也很关键。因为从一个人的代码可以直接看出你的基本功。对于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基本功实践的更多相关文章
- CODING 敏捷实践完全指南
你好,欢迎使用 CODING! 这份最佳实践将帮助你掌握 CODING 敏捷管理工具,更好地实践敏捷开发流程. 更多实践案例持续更新中 什么是敏捷研发 敏捷研发是涉及整个软件工程的理念与实践,它的核心 ...
- 有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了
写在前面 说来也很巧, 下午再做一个页面,再普通不过的分页列表,我还是像往常一样,基于MVC环境下,我正常用PagedList.MVC AJAX做无刷新分页,这时候问题就来了,列表数据中有个轮播图用到 ...
- Techparty-广州 10 月 31 日 Docker 专场沙龙 后记
华为的童鞋技术能力很强,但是两位讲师的都没听进去.重点听了两个,一个是芒果TV的Docker 之路,另一个是Coding的实践和思考. 芒果TV的主讲人是一直仰慕的CMGS,从豆瓣出来后去了国企芒果台 ...
- [珠玑之椟]浅谈代码正确性:循环不变式、断言、debug
这个主题和代码的实际写作有关,而且内容和用法相互交织,以下只是对于其内容的一个划分.<编程珠玑>上只用了两个章节20页左右的篇幅介绍,如果希望能获得更多的实例和技巧,我比较推崇<程序 ...
- 50篇经典珍藏 | Docker、Mesos、微服务、云原生技术干货
概念篇 全方位探(tian)索(keng)Mesos各种存储处理方式 老肖有话说@Mesos User Group第四次约会 技术实践 | Mesos 全方位“烹饪”指南 回顾 JAVA 发展轨迹,看 ...
- DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升
CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...
- python coding style guide 的高速落地实践
python coding style guide 的高速落地实践 机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding ...
- CODING 代码多仓库实践
关于代码的管理问题已经讨论多年,随着企业业务的复杂度提高.软件行业技术栈的选择度变宽泛,现代软件的代码仓库也变得越来越庞大和复杂.一个中型项目,将测试代码.核心业务代码.编译构建.部署打包等基础设施的 ...
- 如何使用 CODING 实践 DevOps 全流程
你好,欢迎使用 CODING!这份最佳实践将帮助你通过 CODING 研发管理系统来更好地实践 DevOps 流程. DevOps 的本质是打破各个部门之间的隔阂,打通企业的前中后台,推进跨部门协作. ...
随机推荐
- 【长期更新】迈向现代化的 .Net 配置指北
1. 欢呼 .NET Standard 时代 我现在已不大提 .Net Core,对于我来说,未来的开发将是基于 .NET Standard,不仅仅是 面向未来 ,也是 面向过去:不只是 .Net C ...
- python中方法的总结
# 1.用函数实现过滤掉集合list1=[' ','hello',None,'python' ]中的空格和空值 # 2.用函数方法实现计算集合list1 = [1,2,3,4,5]中,所有元素的和 c ...
- 怎么用MATLAB产生FPGA所需的hamming窗系数
需求 在FPGA处理中如果需要对待处理数据加窗,则需要窗系数存储在ROM中以供使用. 前言 MATLAB窗函数说明 流程 比如加个hamming窗,8192点,16bit放大,最终系数18bit位宽. ...
- 什么是GPIO?
”通用输入/输出口”(GPIO)是一个灵活的由软件控制的数字信号.他们可由多种芯片提供,且对于从事嵌入式和定制硬件的Linux开发者来说是比较熟 悉.每个GPIO都代表一个连接到特定引脚或球栅阵列(B ...
- 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试
目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...
- 没想到: System.out.println(n1 == f1 ? n1 : f1);
int n1 = 404; float f1 = 404.0f; if(n1 == f1) { System.out.println("两者相等"); } System.out.p ...
- 二、Tensorflow的作用域和图
作用域主要用来不用重复定义变量,另外就是用与画图 import tensorflow as tf ''' 可视化 tf.summary.scalar 添加一个标量 tf.summary.audio 添 ...
- 如何将Windows电脑桌面上软件图标下的文字去掉
如何将Windows电脑桌面上软件图标下的文字去掉 重命名的时候,点击鼠标右键.选择“插入Unicode控制字符” 效果
- 第三节:Windows平台部署Asp.Net Core应用(基于IIS和Windows服务两种模式)
一. 简介 二. 文件系统发布至IIS 三. Web部署发布至IIS 四. FTP发布至IIS 五. Windows服务的形式发布 ! 作 者 : Yaopengfei(姚鹏飞) 博客地址 ...
- 对于iOS架构的认识过程
MVC 经典就是经典,没有之一.iOS中MVC架构,看懂斯坦福大学白胡子老头这张图基本上就可以了. 斯坦福大学MVC架构.png 简单理解,就是Controller对象拥有View和Model对象 ...