python核心编程笔记——Chapter6
Chapter 6.序列:字符串,列表和元组
这章内容比较多啊,看得比较久,而且题目又难很多。
6.1鉴定一个字符串是否是另外一个字符串的字串,这道题目不是很确定,好像没有直接的判定吧。
直接是否内建的序列函数 in ?
>>> a = 'or'
>>> b = 'favorite'
>>> a in b
True
strin模块也有类似的函数,不知道算不算
>>> b.count(a)
1
>>> b.find(a)
3
>>> b.index(a)
3
>>> b.rindex(a)
3
>>> b.rindex(a)
3
6-2。修改idcheck.py脚本,使之可以检测长度为一的标识符,并且可以识别Python关键字(通过keyword模块的keyword.kwlist)来辅助。
其实不太难,跟着感觉走就对了。
#!/usr/bin/env python
#-*-coding=utf-8-*- import string
import keyword alphas = string.letters + '_'
nums = string.digits
keywords = keyword.kwlist flag = True print 'Welcome to the Identifier Checker v2.0'
myInput = raw_input('Identifier to test?') if len(myInput) >= 0:
if myInput in keywords:
flag = False
print '''invalid:the identifier must not be keyword.'''
elif myInput[0] not in alphas:
flag = False
print '''invalid:first symbol must be alphabetic'''
else:
for otherChar in myInput[1:]:
if otherChar not in alphas+nums:
flag = False
print '''invalid:remaining symbols must be alphanumeric'''
break if flag == True:
print '''okay as an identifier'''
6-3.对输入的一串数字分别进行从大到小的排列和用字典序从大到小排序,没难度,注意按字典序排序用的是sorted()函数
#!/usr/bin/env python
#-*-coding=utf-8-*- s = []
a = input('请输入数字,输入0退出:')
s.append(a) while a != 0 :
a = input('请输入数字,输入0退出:')
s.append(a)
s.sort(reverse = True)
print '从大到小排序得:',s
print '按照字典序从大到小排列得:',sorted(s,reverse = True)
6-6.创建一个string.strip()的替代函数。难度不大,由于字符串内部是不可变的,改变字符串估计得用切片操作了。
#!/usr/bin/env python
#-*-coding=utf-8-*- def Strips(str):
for i in range(len(str)):
if str[i] != ' ':
str = str[i:]
break
for i in range(-1,-len(str)-1,-1):
if str[i] != ' ':
str = str[:i+1]
break
return str if __name__ == '__main__':
str = raw_input('请输入字符串:')
print Strips(str)
6-7.修改那个有bug的程序buggy.py,可以看看,目测那个程序应该是用来剔除序列长度的因子吧,修改一下bug得到:
#!/usr/bin/env python
#-*-coding=utf-8-*- #
num_str = raw_input('Enter a number: ') #
num_num = int(num_str) #
fac_list = range(1,num_num+1)
print "BEFORE:",fac_list #
i = 0 #
while i < len(fac_list):
#
if num_num % fac_list[i] == 0:
del fac_list[i]
i -= 1 #
i += 1 #
print "AFTER:",fac_list
6-8.这道题目有点难度,要将一个数字转成合乎语法的英语单词,思路还是找两个列表把单词存起来。
#!/usr/bin/env python
#-*-coding=utf-8-*- def change(num):
num_a = int(num)
list1 = ['zero','one','two','three','four','five','six','seven','eight','nine',\
'ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen',\
'eighteen','nineteen']
list2 = ['zero','ten','twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']
if num_a == 1000:
return 'one thousand'
if num_a == 0:
return 'zero'
if num_a >= 100 and num_a % 100 == 0:
return list1[num_a / 100] + ' hundred'
str = ''
if num_a / 100 > 0 :
str += list1[num_a / 100] + ' hundred and '
num_a %= 100
if num_a % 10 == 0:
str += list2[num_a / 10]
return str
elif num_a < 20:
str += list1[num_a]
return str
else:
str += list2[num_a / 10] + '-' + list1[num_a % 10]
return str if __name__ == '__main__':
num = raw_input('请输入数字:')
print change(num)
6-10.转换,返回一个大小写反转的字符串,不难,用个突然发现string有个swapcase()的内建函数,能够翻转string的大小写,写都不用写了
>>> cc = 'Mr.Ed'
>>> cc.swapcase()
'mR.eD'
6-11.转换。写一个能从整型到IP地址相互转化的程序。这道题目一开始不懂得是什么意思,后来看网上大牛的回答,才知道考查的是10进制数与256进制数之间的相互转化。这里直接贴上大牛的代码,不班门弄斧了。值得一体的是,python3.3之后新增了ipaddress模块,可以直接使用。
#!/usr/bin/env python
#-*-coding=utf-8-*- def IntegerToIP(num):
"Integer to IP"
IP = []
for i in range(4):
IP.append(str(num%256))
num /= 256
return '.'.join(IP[::-1]) def IPToInteger(IP):
"IP to Interger"
Integer = 0
node = []
node = IP.split('.') for i in range(-1,-len(node)-1,-1) :
x = -(i+1)
Integer += int(node[i]) * (256 ** x) return Integer def test() :
"Just for test"
num = input("Enter a int Num : ")
print "The Integer to IP Address is : " ,IntegerToIP(num)
print "The IP Address to Integer is : " ,IPToInteger(IntegerToIP(num)) if '__main__' == __name__ :
test()
6-12.字符串,自己实现在字符串里面索引的函数
#!/usr/bin/env python
#-*-coding=utf-8-*- def findchr(string,char):
for i in range(len(string)):
if string[i] == char:
return i return -1 def rfindchr(string,char):
for i in range(-1,-len(string)-1,-1):
if string[i] == char:
return i+len(string)
return -1 def subchr(string,origchar,newchar):
str = ''
for ochar in string:
if ochar == origchar:
ochar = newchar
str += ochar
return str def test():
s1 = 'finish'
s2 = 'i'
s3 = 'a'
print findchr(s1,s2)
print rfindchr(s1,s2)
print subchr(s1,s2,s3) if __name__ =='__main__':
test()
6-13.实现一个atoc(),其实python2.7已经完善了complex()函数,书上的例子直接可以用complex()来实现,跳过。
>>> b = complex('-1.23e+4-5.67j')
>>> type(b)
<type 'complex'>
>>> print b
(-12300-5.67j)
6-14.模拟剪刀石头布游戏,java写过,不想写了。
6-15.求出两个日子的时间差,选用datetime模块超方便
#!/usr/bin/env python
#-*-coding=utf-8-*- import datetime def datedelta(date1,date2):
l1 = date1.split('/')
l2 = date2.split('/')
datetime1 = datetime.date(int(l1[0]),int(l1[1]),int(l1[2]))
datetime2 = datetime.date(int(l2[0]),int(l2[1]),int(l2[2]))
return (datetime2 - datetime1).days def birthday(date):
l1 = date.split('/')
Date = datetime.date(int(l1[0]),int(l1[1]),int(l1[2]))
Today = datetime.date.today()
return (Today-Date).days def nextbirthday(date):
l1 = date.split('/')
Today = datetime.date.today()
Year = Today.year
Date1 = datetime.date(Year,int(l1[1]),int(l1[2]))
Date2 = datetime.date(Year+1,int(l1[1]),int(l1[2]))
if (Date1 - Today).days > 0:
return (Date1 - Today).days
else:
return (Date2 - Today).days if __name__ == '__main__':
print '请输入两个可识别的日期:'
d1 = raw_input('date1:')
d2 = raw_input('date2:')
d1 = d1.strip()
d2 = d2.strip()
print '两个日期之间的天数为:',datedelta(d1,d2),'days'
birth = raw_input('请输入你的生日:')
print '从你出生到现在的天数为:',birthday(birth),'days'
print '到你下次过生日还有:',nextbirthday(birth),'days'
6-16.矩阵,处理矩阵M与N的加和乘运算,直接使用那个numpy模块,直接搞定。
>>> from numpy import matrix
>>> M = matrix('1,2,3;2,3,4;3,4,5')
>>> N = matrix('1,2,3;2,3,4;3,4,5')
>>> M+N
matrix([[ 2, 4, 6],
[ 4, 6, 8],
[ 6, 8, 10]])
>>> M*N
matrix([[14, 20, 26],
[20, 29, 38],
[26, 38, 50]])
6-17.实现一个myPop()函数,用一个列表作为输入,移除列表的最新一个元素,并返回它。看不懂题目,首先何谓最新,如果列表之前中间新插入一个数,但方法无法跟踪啊。
所以不做了。
6-18.看网上的答案都说返回元组,但是我自己写了个却是返回list类型到底谁对谁错呢?
>>> fn=['hello','hi','ha']
>>> ls=['John','Tony','Kelly']
>>> zip(fn,ls)
[('hello', 'John'), ('hi', 'Tony'), ('ha', 'Kelly')]
>>> type(zip(fn,ls))
<type 'list'>
6-19.太麻烦了,不想写,而且似乎要考虑的东西和细节蛮多的,建议大家看看这个大牛的csdn博客,程序一遍遍地修改,非常屌!
http://blog.csdn.net/fzyz_sb/article/details/8986260
就这样,请多多指教!
python核心编程笔记——Chapter6的更多相关文章
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
- python核心编程--笔记(不定时跟新)(转)
的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找python路径 1.4 –v ...
- python核心编程笔记(转)
解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找python路径 1.4 –v 冗 ...
- Python核心编程笔记(类)
Python并不强求你以面向对象的方式编程(与Java不同) # coding=utf8 class FooClass(object): version = 0.1 def __init__(self ...
- Python核心编程笔记--动态属性
一.动态语言与静态语言 1.1 静态语言特点: a. 在定义变量时需要指定变量的类型,根据指定的类型来确定变量所占的内存空间 b. 需要经过编译才能运行 c. 在代码编译后,运行过程不能对代码进行操作 ...
- Python核心编程笔记 第三章
3.1 语句和语法 3.1.1 注释( # ) 3.1.2 继续( \ ) 一般使用换行分隔,也就是说一行一个语句.一行过长的语句可以使用反斜杠( \ ) 分 ...
- Python核心编程笔记 第二章
2.1 程序输出:print语句 可以使用print语句显示变量的字符串表示,或者仅用变量名查看该变量的原始值. 2.2 程序输出和raw_input()内建函数 ...
- python核心编程笔记——Chapter7
Chapter7.映像和集合类型 最近临到期末,真的被各种复习,各种大作业缠住,想想已经荒废了python的学习1个月了.现在失去了昔日对python的触觉和要写简洁优雅代码的感觉,所以临到期末毅然继 ...
- python核心编程笔记
1.python的对象是通过引用传递的. 2.多元赋值: x, y = y, x
随机推荐
- TCP系列54—拥塞控制—17、AQM及ECN
一.概述 ECN的相关内容是在RFC3168中定义的,这里我简单描述一下RFC3168涉及的主要内容. 1.AQM和RED 目前TCP中多数的拥塞控制算法都是通过缓慢增加拥塞窗口直到检测到丢包来进行慢 ...
- 深入理解JAVA I/O系列三:字符流详解
字符流为何存在 既然字节流提供了能够处理任何类型的输入/输出操作的功能,那为什么还要存在字符流呢?容我慢慢道来,字节流不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节 ...
- JavaScript下的new操作符做了什么?
可以参考知乎的一篇文章:https://zhuanlan.zhihu.com/p/23987456 参考网上其他人的文章,new发生了以下操作 参考MDN:https://developer.mozi ...
- mysql实现消息队列
mysql之消息队列 消息队列:在消息的传输过程中保存消息的容器. 消息队列管理器在将消息从它的源中继到它的目标时充当中间人.队列的主要目的是提供路由并保证消息的传递:如果发送消息时接收者不可用, ...
- easyui布局隐藏伸缩按钮
1. 在html中加入 <script> /** * layout方法扩展 * @param {Object} jq * @param {Object} region */ $.exten ...
- Chrome神器Vimium快捷键学习记录
今天下午折腾了一下Chrome下面的一个插件Vimium的使用,顿时发现该插件功能强大,能够满足减少鼠标的使用.至于为何要使用这个插件,源于我手腕上的伤一直没有好,使用鼠标的时候有轻微的疼痛.而且,由 ...
- 文件同步工具 lsyncd2.1.6 安装使用问题
项目有文件实时同步备份的需求,做了一下调查,比较好的解决方法是使用lsyncd工具.这里主要记录一下遇到的问题及解决方法. lsyncd 的相关介绍和对比可见: lsyncd实时同步搭建指南——取代r ...
- Unity使用C#实现简单Scoket连接及服务端与客户端通讯
简介: 网络编程是个很有意思的事情,偶然翻出来很久之前刚开始看Socket的时候写的一个实例,贴出来吧 Unity中实现简单的Socket连接,c#中提供了丰富的API,直接上代码. 服务端代码: [ ...
- BZOJ 4421: [Cerc2015] Digit Division
4421: [Cerc2015] Digit Division Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 348 Solved: 202[Subm ...
- 【BZOJ4774】修路(动态规划,斯坦纳树)
[BZOJ4774]修路(动态规划,斯坦纳树) 题面 BZOJ 题解 先讲怎么求解最小斯坦纳树. 先明白什么是斯坦纳树. 斯坦纳树可以认为是最小生成树的一般情况.最小生成树是把所有给定点都要加入到联通 ...