反思

做测试已经有几年了,有一些代码基础,写过UI自动化,写过shell,但是对于代码从来没有系统性的学习过,最近这一段时间感觉工作不是很忙碌,就抽空学习下,在网上找了个评价不错的教程,从今儿个开始就慢慢学习,在自己的这一方小天地坚持下去,看看哪天就放弃了,哈哈

课程路径

Python - 100天从新手到大师

作者:骆昊

说明:从项目上线到获得8w+星标以来,一直收到反馈说基础部分(前15天的内容)对新手来说是比较困难的,建议有配套视频进行讲解。最近把基础部分的内容重新创建了一个名为“Python-Core-50-Courses”的项目,用更为简单通俗的方式重写了这部分内容并附带了视频讲解,初学者可以关注下这个新项目。国内用户如果访问GitHub比较慢的话,也可以关注我的知乎号Python-Jack上的“从零开始学Python”专栏,专栏会持续更新,还有大家比较期待的“数据分析”的内容也即将上线,欢迎大家关注我在知乎的专栏文章和回答。

在这里感谢老师给予的免费课程!

百鸡问题

百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?

思路:
假设可以买到X只公鸡,Y只母鸡,Z只小鸡,那么我们使用穷举法,如果买1只公鸡,1只母鸡,剩下的就是(100-51-31)3=276只小鸡,依次类推买1只公鸡,2只母鸡,剩下的就是(100-51-32)3=267只小鸡...
那么最多可以买:
100/5=20只公鸡
100//3=33只母鸡(这里是整除,毕竟不能买半个吧,那叫烤鸡)
100*3=300只小鸡
取值空间分别是0-20,0-33,0-300

# 初始化小鸡仔
x,y,z = 0, 0, 0
# 设定一个计数,统计分配方案
i = 0
# 下面这个int是因为100/5的结果是float类型,需要转换
for x in range(0, int(100/5)):
    # 此处是整除,所以不需要转换
    for y in range(0, 100//3):
        # 可买小鸡的数量,此处的100是指鸡
        z = 100 - x - y
        # 此处的100是指钱
        if x*5 + y*3 + z/3 == 100:
            i += 1
            print("【第%d种买法】公鸡:%d, 母鸡:%d, 小鸡:%d"%(i, x, y, z))

百鸡问题.png
上面是自己思考后的解法,以下是教程给出的答案,还是有些许差别,问题的点在于下述的Z,我设置的Z值为小鸡的熟练,而理解的教程种的Z是剩余买小鸡的钱

"""
《百钱百鸡》问题

Version: 0.1
Author: 骆昊
"""

for x in range(0, 20):
    for y in range(0, 33):
        z = 100 - x - y
        if 5 * x + 3 * y + z / 3 == 100:
            print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))

知识点

range()函数

range(start, stop[, step])

参数说明: 
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4];
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)