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
随机推荐
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
一 基础知识 字节 8位半字 16位字 32位 二 解惑 Code, RO-data,RW-data,ZI-data Code为程序代码部分RO-data 表示 程序定义的常量const t ...
- C++判断char*的指向
char *a = "Peter"; char b[] = "Peter"; ]; strcpy_s(c, , "Peter"); 这里a指 ...
- 1105 C程序的推导过程
- 3ds Max学习日记(十)——显示场景资源管理器
之前把max的对象窗口(场景资源管理器)给弄没了,搞了半天都不知道怎么调回来,百度搜索到的结果也不知道都是些啥玩意.不过好在最后还是弄出来了! 一开始是下面这样的,没有场景资源管理器用起来很不 ...
- python selenium 代码
from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElemen ...
- ci钩子
钩子 - 扩展框架核心 CodeIgniter 的钩子特性提供了一种方法来修改框架的内部运作流程,而无需修改 核心文件.CodeIgniter 的运行遵循着一个特定的流程,你可以参考这个页面的 应用程 ...
- [51CTO]给您介绍Windows10各大版本之间区别
给您介绍Windows10各大版本之间区别 随着win10的不断普及和推广,越来越多的朋友想安装win10系统了,但是很多朋友不知道win10哪个版本好用,为了让大家能够更好的选择win10系统版本, ...
- log4j2分析总结(一)
现在公司用log4j2 进行日志记录,我也看了相关的资料,现在进行记录学习总结下 整体结构 Appenders里设置日志的输出方式.级别和格式 Loggers里设置全局的级别和绑定appenders里 ...
- 关于Delphi内存表的使用说明
关于Delphi内存表的使用说明: 1.建立临时表 数据输入是开发数据库程序的必然环节.在Client/Server结构中,客户端可能要输入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客 ...
- Whitecoin区块链钱包高级功能使用命令
格式:NO-命令-命令概要-主要对象-参数 <必须参数> [可选参数]-含义-描述-需要未锁定钱包 1 addmultisigaddress 新增多重签名地址 地址 <nrequ ...