博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day5-20180410笔记
阅读量:5914 次
发布时间:2019-06-19

本文共 11231 字,大约阅读时间需要 37 分钟。

笔记:Python的练习题讲解

 

一、Python的练习题讲解

1、判断一个字符串数字、字母、空格、其他字符有多少个。

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/11 13:33# @Author : yangyuanqiang# @File : 统计字符总数.py'''判断一个字符串数字有多少个字母有多少个空格有多少个其他字符'''while 1:    strings = input("Please inpur a string(quit will be exit):")    alpha, dig, space, other = 0, 0, 0, 0    if strings.strip() == "quit":        exit(1)    for i in strings:        if i.isdigit():            dig += 1        elif i.isspace():            space += 1        elif i.isalpha():            alpha += 1        else:            other += 1    print("alpha = {0}".format(alpha))    print("dig = {0}".format(dig))    print("space = {0}".format(space))    print("other = {0}".format(other))    print("字符串数字有{0}个,字母有{1}个,空格有{2}个,其他字符有{3}个".format(alpha, dig, space, other))

以上实例输出的结果

Please inpur a string(quit will be exit):abc 123 ^&*% 你好alpha = 5dig = 3space = 3other = 4字符串数字有5个,字母有3个,空格有3个,其他字符有4个Please inpur a string(quit will be exit):quit

解析:

1、使用while循环,通过if判断,输入字符为quit退出,使用strip过滤前和尾的空格。

2、使用for对strings进行循环,通过if判断输入的字符是字符串数字、字母、空格还是其他字符,每循环一次都加1。

3、print打印输出结果。

 

 

2、ABCD乘9=DCBA,A=? B=? C=? D=? 答案:a=1,b=0,c=8,d=9 1089*9=9801

方法一:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/11 13:41# @Author : yangyuanqiang# @File : 9801.py'''ABCD乘9=DCBA,A=? B=? C=? D=? 答案:a=1,b=0,c=8,d=9      1089*9=9801'''import datetimeimport timet1 = time.time()   # 当前时间转换为时间戳print("版本一启动时间:{0}".format(t1))# for A in [1]:for A in range(1,10):    for B in range(0, 10):        for C in range(0, 10):            # for D in [9]:            for D in range(1,10):                if ((1000* A + 100*B + 10*C + D)*9 == 1000*D + 100*C + 10*B + A ):                    print("A = {0}".format(A))                    print("B = {0}".format(B))                    print("C = {0}".format(C))                    print("D = {0}".format(D))                    print("{0}{1}{2}{3}x9={3}{2}{1}{0}".format(A, B, C, D))t2 = time.time()   # 当前时间转换为时间戳print("版本一结束时间:{0}".format(t2))print("版本一运行效率:{0}".format(t2 - t1))

以上实例输出的结果

版本一启动时间:1523435422.9405403A = 1B = 0C = 8D = 91089x9=9801版本一结束时间:1523435422.9455407版本一运行效率:0.00500035285949707

 

 

2、ABCD乘9=DCBA,A=? B=? C=? D=? 答案:a=1,b=0,c=8,d=9 1089*9=9801

方法二:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/11 13:41# @Author : yangyuanqiang# @File : 9801.py'''ABCD乘9=DCBA,A=? B=? C=? D=? 答案:a=1,b=0,c=8,d=9      1089*9=9801'''import datetimeimport timet1 = time.time()   # 当前时间转换为时间戳print("版本二启动时间:{0}".format(t1))for A in [1]:# for A in range(1,10):    for B in range(0, 10):        for C in range(0, 10):            for D in [9]:            # for D in range(1,10):                if ((1000* A + 100*B + 10*C + D)*9 == 1000*D + 100*C + 10*B + A ):                    print("A = {0}".format(A))                    print("B = {0}".format(B))                    print("C = {0}".format(C))                    print("D = {0}".format(D))                    print("{0}{1}{2}{3}x9={3}{2}{1}{0}".format(A, B, C, D))t2 = time.time()   # 当前时间转换为时间戳print("版本二结束时间:{0}".format(t2))print("版本二运行效率:{0}".format(t2 - t1))

以上实例输出的结果

版本二启动时间:1523435511.9296303A = 1B = 0C = 8D = 91089x9=9801版本二结束时间:1523435511.9296303版本二运行效率:0.0

 

总结:加上时间参数后,进行对比,使用四个for循环比两个for循环运行的效率有相差,肉眼是看不出效果的。

 

3、九宫格

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/11 16:38# @Author : yangyuanqiang# @File : 九宫格.py'''九宫格1-9                -------------                | A | B | C |                | D | E | F |                | G | H | I |                -------------所有的横竖斜线加起来都等于15A  1-9B  1-9 除AC  1-9 除A,B'''number = list()for i in range(1, 10):    number.append(i)print(number)count = 1for A in number:    a = number.copy()    a.remove(A)    for B in a:        b = a.copy()        b.remove(B)        for C in b:            c = b.copy()            c.remove(C)            for D in c:                d = c.copy()                d.remove(D)                for E in d:                    e = d.copy()                    e.remove(E)                    for F in e:                        f = e.copy()                        f.remove(F)                        for G in f:                            g = f.copy()                            g.remove(G)                            for H in g:                                h = g.copy()                                h.remove(H)                                for I in h:                                    if (A+B+C == D+E+F == G+H+I == A+D+G == B+E+H == C+F+I == A+E+I == G+E+C == 15):                                        print('''                                        第{9}种例子                                        -------------                                        | {0} | {1} | {2} |                                        | {3} | {4} | {5} |                                        | {6} | {7} | {8} |                                        -------------'''.format(A,B,C,D,E,F,G,H,I,count))                                        count += 1

以上实例输出的结果

[1, 2, 3, 4, 5, 6, 7, 8, 9]                                        第1种例子                                        -------------                                        | 2 | 7 | 6 |                                        | 9 | 5 | 1 |                                        | 4 | 3 | 8 |                                        -------------                                        第2种例子                                        -------------                                        | 2 | 9 | 4 |                                        | 7 | 5 | 3 |                                        | 6 | 1 | 8 |                                        -------------                                        第3种例子                                        -------------                                        | 4 | 3 | 8 |                                        | 9 | 5 | 1 |                                        | 2 | 7 | 6 |                                        -------------                                        第4种例子                                        -------------                                        | 4 | 9 | 2 |                                        | 3 | 5 | 7 |                                        | 8 | 1 | 6 |                                        -------------                                        第5种例子                                        -------------                                        | 6 | 1 | 8 |                                        | 7 | 5 | 3 |                                        | 2 | 9 | 4 |                                        -------------                                        第6种例子                                        -------------                                        | 6 | 7 | 2 |                                        | 1 | 5 | 9 |                                        | 8 | 3 | 4 |                                        -------------                                        第7种例子                                        -------------                                        | 8 | 1 | 6 |                                        | 3 | 5 | 7 |                                        | 4 | 9 | 2 |                                        -------------                                        第8种例子                                        -------------                                        | 8 | 3 | 4 |                                        | 1 | 5 | 9 |                                        | 6 | 7 | 2 |                                        -------------

 

4、阶乘

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/11 17:00# @Author : yangyuanqiang# @File : 阶乘.py'''0! +1! +2! + 3! +4! + 5! + n!1 + 1 + 2 + 6 + …… + n*(n-1)*(n-2)……*1'''def jc(n):    result = 1    if n == 0:        return result    else:        for i in range(1, n+1):            result *= i        return resultn = input("Plese inpurt number n:")count = 0for i in range(0, int(n)+1):    count += jc(i)print("count = {0}".format(count))

以上实例输出的结果

Plese inpurt number n:2count = 4

 

5、对100以内的两位数,请使用一个两重循环打印出所有十位数数字比个位数数字小的数,例如,23(2 < 3)

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/11 17:34# @Author : yangyuanqiang# @File : test.py'''对100以内的两位数,请使用一个两重循环打印出所有十位数数字比个位数数字小的数,例如,23(2 < 3)。'''count = 0for x in [1,2,3,4,5,6,7,8,9]:    for y in [0,1,2,3,4,5,6,7,8,9]:        if x < y :            count += 1            print("第{0}个数:{1}".format(count, x * 10 + y))print("十位数数字比个位数数字小的数总数有:{0} 个".format(count))

以上实例输出的结果

第1个数:12第2个数:13第3个数:14第4个数:15第5个数:16第6个数:17第7个数:18第8个数:19第9个数:23第10个数:24第11个数:25第12个数:26第13个数:27第14个数:28第15个数:29第16个数:34第17个数:35第18个数:36第19个数:37第20个数:38第21个数:39第22个数:45第23个数:46第24个数:47第25个数:48第26个数:49第27个数:56第28个数:57第29个数:58第30个数:59第31个数:67第32个数:68第33个数:69第34个数:78第35个数:79第36个数:89十位数数字比个位数数字小的数总数有:36 个

 

6、利用while True无限循环配合 break 语句,计算 1 + 2 + 4 + 8 + 16 + .....的前20个数的和

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/11 17:15# @Author : yangyuanqiang# @File : 前20个数的和.py'''利用while True无限循环配合 break 语句,计算 1 + 2 + 4 + 8 + 16 + .....的前20个数的和'''# 方法一:sum = 0x = 1n = 1while 1:    if x<=20:        # print(x)        x += 1        sum = sum + n        n *= 2    else:        breakprint("方法一:{0}".format(sum))#方法二:sum1 = 0a = 1b = 1while 1:    if a>20:        break    a += 1    # print(a)    sum1 = sum1 + b    b *= 2print("方法二:{0}".format(sum1))

以上实例输出的结果

方法一:1048575方法二:1048575

解析:

1、使用while 1循环,通过if判断a是否小于等于20,如果是执行break终止循环

2、规律每求出一个数都要乘以2

 

计算从1到1000以内所有能被3或者17整除的数的和并输出

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/4/13 13:55# @Author : yangyuanqiang# @File : test2.py# 计算从1到1000以内所有能被3或者17整除的数的和并输出sum = 0for i in range(1,1001):    if i%3==0 or i%17==0:        # print("{0} + {1} = {2}".format(i, sum, sum+i ))        sum = sum + i        # print("1到1000以内能被3或者17整除的数:{0}".format(i))print(sum)

以上实例输出的结果

1到1000以内能被3或者17整除的数总和:186230

 

 

7、python的编码

支持中文的编码:utf-8、gbk、gb2312

decode  解码

encode  编码

不写python2代码排头,就会报错,而python3默认就以utf-8编码,所以不存在编码的问题。

s = "哈哈哈"print s

以上实例输出的结果

File "/root/PycharmProjects/python_atuo/test/code.py", line 3SyntaxError: Non-ASCII character '\xe7' in file /root/PycharmProjects/python_atuo/test/code.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

这个代码文件被执行时就会出错,就是编码出了问题。python默认将代码文件内容当作ASCII,但是ASCII编码中不存在中文,因此抛出异常。

解决问题之道就是要让python知道文件中使用的是什么编码形式,对于中文,可以用的常见编码有utf-8、gbk和gb2312等。只需要在代码文件的最前端添加如下内容:

# -*- coding: utf-8 -*-

 

控制台乱码

#!/usr/bin/env python#_*_coding:utf-8_*_s = "哈哈"print s

Pycharm运行程序正常,在控制台运行程序乱码

解决办法:

1、更改头文件的编码格式

#_*_coding:gbk_*_

可以在windows控制台打印出来正常的字体了。

2、#_*_coding:utf-8_*_

s = u"哈哈"

print(s)

print(type(s))  #unicode

m = "哈哈"

print(m)

print(type(m))  #str

 

说明:文件申明时utf-8的编码,识别"哈哈"以后,以unicode对象的形式存在。如果我们用type查看,存储形式是unicode,python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换。如果输出的不是unicode对象而是str类型。则会按昭字符串的编码输出字符串。从而出现utf-8没法在gbk编码的控制台展现

s = "哈哈"

m = s.decode("utf-8")

print(type(m))

print(m)

 

 

7、Python编码转换报错

编码

#_*_coding:utf-8

s = "中文"

s.encode("gbk")

报错了,为什么呢?

python转码的过程:

源有编码 -----> unicode编码 -----> 目的编码

python会自动先将s解码为unicode,然后再编码为gbk,因为解码是python自动进行的,我们没有指明解码的方式,python就会使用sys.defaultencoding指明的方式来解码

方法一:

s.decode("utf-8").encode("gbk")

方法二:

import sys

reload(sys)

print(sys.getdefaultencoding())

sys.setdefaultencoding("utf-8")

print(sys.getdefaultencoding())

转载于:https://www.cnblogs.com/ivan-yang/p/8783346.html

你可能感兴趣的文章
区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!
查看>>
如何使用jstack分析线程状态
查看>>
运营不需要人脉?
查看>>
全方位解读Java反射(reflection)
查看>>
Spring Cloud Config服务器
查看>>
fprobe使用
查看>>
yum 安装rabbitMQ
查看>>
跟我学《JavaScript高程3》视频教程,下载地址
查看>>
GLSL变量
查看>>
使用nginx—搭建YUM仓库
查看>>
测试人员必学的软件快速测试方法(二)
查看>>
linux下以RPM包安装Oracle 客户端
查看>>
28. PowerShell -- 注册表操作
查看>>
artDialog-交互弹出插件_无效文章
查看>>
2015年后的九大企业级技术发展趋势
查看>>
搭建 android sdk环境
查看>>
LINUX常用的查看命令
查看>>
第14章 grep、sed、awk 正则表达式
查看>>
Game 游戏分类
查看>>
SCCM 2007 sp2 eva安装之一:sql server 2005安装及升级sp2
查看>>