Python学习笔记-Day05

Python学习笔记

Day_05-构造程序逻辑

作者的话

学完前面的几个章节后,我觉得有必要在这里带大家做一些练习来巩固之前所学的知识,虽然迄今为止我们学习的内容只是Python的冰山一角,但是这些内容已经足够我们来构建程序中的逻辑。对于编程语言的初学者来说,在学习了Python的核心语言元素(变量、类型、运算符、表达式、分支结构、循环结构等)之后,必须做的一件事情就是尝试用所学知识去解决现实中的问题,换句话说就是锻炼自己把用人类自然语言描述的算法(解决问题的方法和步骤)翻译成Python代码的能力,而这件事情必须通过大量的练习才能达成。

我们在本章为大家整理了一些经典的案例和习题,希望通过这些例子,一方面帮助大家巩固之前所学的Python知识,另一方面帮助大家了解如何建立程序中的逻辑以及如何运用一些简单的算法解决现实中的问题。

寻找水仙花数

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:)。(百度百科)

有了上面的定义,我们来尝试找出所有的水仙花数。
代码如下:

# -*- coding: utf-8 -*-
"""
寻找水仙花数
水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

1^3 + 5^3+ 3^3 = 153
version:0.1
author:chris
"""

for i in range(100,1000):
    a = int(i/100)
    b = int((i%100)/10)
    c = int((i%100)%10)
    if a**3 + b**3 + c**3 != i:
        continue
    else:
        print(i)
        print("恭喜你,这个数字就是完美的水仙花数!")

输出结果为:

153
恭喜你,这个数字就是完美的水仙花数!
370
恭喜你,这个数字就是完美的水仙花数!
371
恭喜你,这个数字就是完美的水仙花数!
407
恭喜你,这个数字就是完美的水仙花数!

程序非常简单,关键的一个环节就是,确定一个3位数,怎样将它的百位、十位和各位的数字单独取出来,然后构成等式或不等式进行判断。

也借此说明一下,我的学习笔记不是对原作者的内容重新敲一边,而是进行了自己的思考写下来的,虽然从逻辑、简洁等方面还和原作者存在差距,但是我坚持的认为只有通过自己的思考才能获得更大的收获。

百钱百鸡

公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?

"""
公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?

version:0.1
author:chris
"""


cock_price = 5
hen_price = 3
chick_price = 1/3

for i in range(1,20):
    for j in range(1,33):
        for k in range(1,100):
            if i + j + k == 100 and i * cock_price + j * hen_price + k * chick_price == 100:
                print("cocks are %d, hens are %d, chicken are %d"%(i, j, k))

运行结果如下:

cocks are 4, hens are 18, chicken are 78
cocks are 8, hens are 11, chicken are 81
cocks are 12, hens are 4, chicken are 84

原教程作者提到,这种方法叫做暴力搜索法,也叫穷举法。主要是依靠计算机强大的穷举试算能力,算出最终的解。

我的方法和原作者的有区别,但是本质上还是类似的。

求100以内所有的素数

说明:素数也叫质数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。

编程思路:既然只能被1和它自身整除,那么在1—100之间肯定不能够被2,3,5,7整除。同时需要注意的是,2,3,5,7四个数字本身就是质数。

代码如下:

"""
求100以内所有的素数
即只有1和它自身两个因素的自然数

version:0.1
author:chris
"""

for j in range(2, 100):
    if j % 2 != 0 and j % 3 != 0 and j % 5 != 0 and j % 7 != 0:
        print(j)
    elif j == 2 or j == 3 or j == 5 or j == 7:
        print(j)

输出结果为:

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

小结

这一节课学习笔记我拖得时间有点长,今天终于总结完了。在这一节中主要通过几个例子巩固了之前学到的内容,原作者有几个例子为还没想到解决的办法,姑且先放一放,我抽时间再琢磨琢磨。同时,100以内素数的代码我觉得不是很好,后续我将继续改进。

你可能感兴趣的:(Python学习笔记-Day05)