《Python核心编程》 第六章 序列 - 课后习题
课后习题
6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分?
答:成员关系操作符(in、not in)
import string
m_string = raw_input('请输入大字符串:')
s_string = raw_input('请输入子字符串:')
if s_string in m_string:
print '子字符串在大字符串内'
else:
print "子字符串不在大字符串内"
6–2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kwlist)来帮你.
答:
import string
import keyword
alphas = string.letters + '_'
nums = string.digits
print "Welcome to the Identifier Checker V1.0"
print "Pls input the test string"
myInput = raw_input("Identifier to test?\n")
if myInput in keyword.kwlist:
print "Invalid : The string is keyword"
else:
if myInput[0] not in alphas:
print "The string is Not Valid, the first symbol must be letters or '_' "
else:
for otherchar in myInput[1:]:
if otherchar not in alphas + nums:
print "Invalid: 其余字符串必须是字母、数字或者下划线"
break
else:
print "The test string is Valid"
6–3. 排序
(a) 输入一串数字,从大到小排列之.
(b) 跟 a 一样,不过要用字典序从大到小排列之.
答:
(a)
test_list = [ ]
while True:
n = int(raw_input("请输入一些数字,输入0时结束:"))
if n == 0:
break
test_list.append(n)
test_list.sort( reverse=True)
print test_list
(b)
暂时不会
6–4. 算术. 更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去.你的代码应该可以计算出一个平均分,见练习 2-9 和练习 5-3.
答: 暂时不写
6–5. 字符串
(a)更新你在练习 2-7 里面的方案,使之可以每次向前向后都显示一个字符串的一个字符.
(b)通过扫描来判断两个字符串是否匹配(不能使用比较操作符或者 cmp()内建函数)。附加题:
Edit By Vheavens
Edit By Vheavens
在你的方案里加入大小写区分.
(c)判断一个字符串是否重现(后面跟前面的一致).附加题:在处理除了严格的回文之外,加入对
例如控制符号和空格的支持。
(d)接受一个字符,在其后面加一个反向的拷贝,构成一个回文字符串.
答:
a
#参考
def showStr(strTemp):
try:
num = []
length = len(strTemp)
for i in range(length // 2):
num.append(strTemp[i])
num.append(strTemp[length - i - 1])
except IndexError:
pass
finally:
if length % 2 == 1:
num.append(strTemp[length // 2])
return num
#if __name__ == "__main__":
while True:
strTemp = raw_input("please enter the string(-1 to quit):")
if strTemp == "-1":
break
print "the strange string is:"
print showStr(strTemp)
b
c
d
6–6.字符串.创建一个string.strip()的替代函数:接受一个字符串,去掉它前面和后面的
空格(如果使用 string.*strip()函数那本练习就没有意义了)
答:
(' '.join(source)的作用不只是将列表source中的项目转换为字符串,而是用空格将里面的元素链接起来)
def new_strip(teststr):
newstr = list(teststr)
length = len(newstr)
i = 0
del newstr[length-1]
del newstr[i]
return ''.join(newstr)
print new_strip(' Hello Python ')
6–7. 调试.看一下在例 6.5 中给出的代码(buggy.py)
(a)研究这段代码并描述这段代码想做什么.在所有的(#)处都要填写你的注释.
(b)这个程序有一个很大的问题,比如输入 6,12,20,30,等它会死掉,实际上它不能处理任何的偶
数,找出原因.
(c)修正(b)中提出的问题.
(不写了)
6–8. 列表.给出一个整数值,返回代表该值的英文,比如输入 89 返回"eight-nine"。附加题:
能够返回符合英文语法规则的形式,比如输入“89”返回“eighty-nine”。本练习中的值限定在 0
到 1,000.
答:
# -*- coding: UTF-8 -*-
'''
Created on 2014年7月1日
6–8. 列表.给出一个整数值,返回代表该值的英文,比如输入 89 返回"eight-nine"。附加题:
能够返回符合英文语法规则的形式,比如输入“89”返回“eighty-nine”。本练习中的值限定在家0 ~ 1,000
@author: User
'''
dict1 = {" : "" }
dict2 = {" : "" }
dict3 = {" : "" }
dictAll = {1: dict1 , 2:dict2 , 3:dict3 }
def fun(strNum):
if int(strNum)>1000 or int(strNum)<0:
return "Invalid Number, Please input again"
length = len(strNum)
strTemp = ""
if len(strNum) == 4:
strTemp = "One Thousand"
return strTemp
for i in range(length):
strTemp += dictAll[length - i][strNum[i]] +" "
return strTemp
if __name__ == "__main__":
while True:
strNum = raw_input("请输入一个数字,按q退出:")
if strNum.lower() == 'q' :
break
print fun(strNum)
6–9. 转换.为练习 5-13 写一个姊妹函数, 接受分钟数, 返回小时数和分钟数. 总时间不
变,并且要求小时数尽可能大.
答:(很笨的方法,没用divmod(a,b))
def minToh(mins):
hour = int(mins/60)
minites = mins - 60*hour
return str(hour) + " :" + str(minites)
if __name__== "__main__" :
while True:
mins = int(input("input the minites(q to quit):"))
if mins == "q":
break
print "the result is : " ,minToh(mins)
6–10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转.
比如,输入"Mr.Ed",应该返回"mR.eD"作为输出.
Example 6.4 有 bug 的程序(buggy.py)
答:
def Str1(testStr):
result = testStr.swapcase()
return result
if __name__ == "__main__":
while True:
testStr = raw_input("Input your strings(q to quit):")
if testStr.lower() == "q":
break
print Str1(testStr)
6–11.转换
(a)创建一个从整数到 IP 地址的转换程序,如下格式: WWW.XXX.YYY.ZZZ.
(b)更新你的程序,使之可以逆转换.
答:
(暂时不懂转换规则)
6–12.字符串
(a)创建一个名字为 findchr()的函数,函数声明如下:
def findchr(string, char)
findchr()要在字符串string 中查找字符char,找到就返回该值的索引,否则返回-1.不能用
string.*find()或者 string.*index()函数和方法
(b)创建另一个叫 rfindchr()的函数,查找字符 char 最后一次出现的位置.它跟 findchr()工作
类似,不过它是从字符串的最后开始向前查找的.
(c)创建第三个函数,名字叫 subchr(),声明如下:
def subchr(string, origchar, newchar)
subchr()跟 findchr()类似,不同的是,如果找到匹配的字符就用新的字符替换原先字符.返回
修改后的字符串.
答:
def findchr(string, char):
length = len(string)
for i in range(length):
if string[i] == char:
return i
return -1
def rfindchr(string, char):
length = len(string)
for i in range(length):
if string[length - i - 1] == char:
return length - i - 1
return -1
def subchr(string, origchar, newchar):
length_o = len(origchar)
length_s = len(string)
newstring = ""
i=0
while i < length_s:
if string[i:i + length_o] == origchar:
newstring += newchar
i+=length_o
else:
newstring += string[i]
i += 1
return newstring
if __name__ == "__main__":
print findchr("hello python", "p")
print findchr("hello python", "m")
print rfindchr("hello python", "l")
print rfindchr("hello python", "m")
print subchr("hellol python","o","+")
print subchr("hello python","x","?")
6–13.字符串.string 模块包含三个函数,atoi(),atol(),和 atof(),它们分别负责把字符串转
换成整数,长整型,和浮点型数字.从 Python1.5 起,Python 的内建函数 int(),long(),float()也可以
做相同的事了, complex()函数可以把字符串转换成复数.(然而 1,5 之前,这些转换函数只能工作于
数字之上)
string 模块中并没有实现一个 atoc()函数,那么你来实现一个,atoc(),接受单个字符串做参
数输入,一个表示复数的字符串,例如,'-1.23e+4-5.67j',返回相应的复数对象.你不能用eval()函
数,但可以使用 complex()函数,而且你只能在如下的限制之下使用 complex():complex(real,imag)
Edit By Vheavens
Edit By Vheavens
的 real 和 imag 都必须是浮点值.
答:
6–14.随机数.设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面
是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种手势:石头,剪子,布.胜利者从
下面的规则中产生,这个规则本身是个悖论.
(a) the paper covers the rock,
布包石头.
(b)石头砸剪子,
(c)剪子剪破布.在你的计算机版本中,用户输入她/他的选项,计算机找一个随机选项,然后由你
的程序来决定一个胜利者或者平手.注意:最好的算法是尽量少的使用 if 语句.
答:
import random
def rochambeau(string):
dict1 = {" }
dictall = {" :"lose" }
randnum = random.randrange(1,4)
return "You are : %s" %dictall[dict1[string]+str(randnum)]
if __name__ == "__main__":
while True: #这句必须加,否则会报错
string = raw_input("please input your choose(stone,seear or cloth):(quit by q)")
if string.lower() == 'q':
break
if (string != 'stone') and (string != 'swear') and (string != 'cloth'):
print "error input"
continue
print rochambeau(string)
result:
please input your choose(stone,seear or cloth):(quit by q)cloth You are : equal please input your choose(stone,seear or cloth):(quit by q)cloth You are : equal please input your choose(stone,seear or cloth):(quit by q)cloth You are : win
6–15.转换
(a)给出两个可识别格式的日期,比如 MM/DD/YY或者 DD/MM/YY格式,计算出两个日期间的天
数.
(b)给出一个人的生日,计算从此人出生到现在的天数,包括所有的闰月.
(c)还是上面的例子,计算出到此人下次过生日还有多少天.
答:
(暂时想不出来,以后再写)
6–16.矩阵.处理矩阵M和N的加和乘操作.
答:
(暂时想不出来,悲催)
6–17.方法.实现一个叫 myPop()的函数,功能类似于列表的 pop()方法,用一个列表作为输入,
移除列表的最新一个元素,并返回它.
答:
def myPop(list1):
del list1[-1]
return list1
if __name__ == "__main__":
list1 =[2,3,4,5]
print myPop(list1)
6–18. zip() 内建函数 在 6.13.2 节里面关于 zip()函数的例子中,zip(fn,ln)返回的是什么?
答: zip返回元组
6–19.多列输出.有任意项的序列或者其他容器,把它们等距离分列显示.由调用者提供数据和
输出格式.例如,如果你传入 100 个项并定义 3 列输出,按照需要的模式显示这些数据.这种情况下,应
该是两列显示 33 个项,最后一列显示 34 个.你可以让用户来选择水平排序或者垂直排序.
答:
第六章暂且这样,后面边学边回头写前面的章节题目
《Python核心编程》 第六章 序列 - 课后习题的更多相关文章
- 【3】python核心编程 第六章-序列:字符串、列表和元组
1.序列类型操作符 序列操作符 作用 seq[ind] 获得下标为ind 的元素 seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合 seq * expr 序列重复expr 次 ...
- python 核心编程第六章课后题自己做的答案
6–6. 字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的 空格(如果使用 string.*strip()函数那本练习就没有意义了) 'Take a str ...
- python核心编程第六章练习6-14
随机数.设计一个“石头.剪子.布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种:石头.剪子.布.胜利者从下面的规则产生, ...
- python核心编程第六章练习6-13
6-13.字符串.string模块包含三个函数,atoi(),atol()和atof(),他们分别负责把字符串转换成整型.长整型和浮点型数字.从Python 1.5起,Python的内建函数int() ...
- python核心编程第六章练习6-10
6-10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转,比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出.[答案]代码如下: #!/usr/bin/env py ...
- python核心编程第六章练习6-9
6-9.转换.为练习5-13写一个姊妹函数,接受分钟数,返回小时数和分钟数.总时间不变,并且要求小时尽可能大.[答案]代码如下: #!/usr/bin/env python # translate m ...
- python核心编程第六章练习6-8
6-8.列表.给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”.附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”.本练习中的值假定在0 ...
- python核心编程第六章练习6-15
转换.(a)给出两个可识别格式的日期,比如MM/DD/YY或者DD/MM/YY格式.计算出两个日期之间的天数.(b)给出一个人的生日,计算此人从出生到现在的天数,包括所有的闰月.(c)还是上面的例子, ...
- python核心编程第六章练习6-12
6-12.字符串.(a)创建一个名字为findchr()的函数,函数声明如下.def findchr(string, char)findchr()要在字符串string中查找字符char,找到就返回该 ...
随机推荐
- SpingMVC ModelAttribute的用法
@Controller @RequestMapping(value = "/test") public class TestController { @RequestMapping ...
- Android 通过程序添加桌面快捷方式
原理:通过代码向 Launcher 中的广播接收者发送广播来创建快捷图标. 首先要声明的权限是: <!--添加图标的权限--> <uses-permission android:na ...
- Ubuntu 14.04 + Linux 3.14.34 系统调用实现文件拷贝
采用 64位系统, ubuntu 14.04 + 新内核linux-3.14.34 下载地址https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.1 ...
- lintcode:Valid Sudoku 判断数独是否合法
题目: 判断数独是否合法 请判定一个数独是否有效.该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 样例 下列就是一个合法数独的样例. 注意 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...
- lintcode:Compare Strings 比较字符串
题目: 比较字符串 比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是 大写字母 样例 给出 A = "ABCD" B = "ACD" ...
- 使用MyBatis链接MySQL
本文主要介绍了如何使用mybatis进行简单的数据库操作.本人使用的是mybatis3.05. 1.创建数据库表(User表) CREATE TABLE `NewTable` (`userId` bi ...
- 苹果操作系统Mac OS X
OS X 是先进的操作系统.基于坚如磐石的 UNIX 基础,设计简单直观,让处处创新的 Mac 安全易用,高度兼容,出类拔萃. UNIX 之威力,Mac 之简单OS X 既简单易用且功能强大.所有的一 ...
- 猜拳 GuessFist
import java.util.Scanner;import java.util.Random;/***跟电脑玩石头剪刀布,需要从控制台输入信息,*然后去判断,然后给予反馈信息*/public cl ...
- 枚举桌面应用程序lnk路径并得到对应程序的绝对路径(使用SHGetDesktopFolder函数枚举,然后使用COM查询IShellFolder,IShellLink和IPersistFile接口)
// 枚举桌面上应用程序的lnk路径 void EnumDesktopLnkPath() { WCHAR szPath[MAX_PATH] = {0}; SHGetSpecialFolderPathW ...
- C++:基类与派生类对象之间的赋值兼容关系
4.5 基类与派生类对象之间的赋值兼容关系 在一定条件下,不同类型的数据之间可以进行类型转换,例如可以将整型数据赋给双精度型变量. 在赋值之前,先把整型数据转换为双精度型数据,然后再把它双精度型变量. ...