python核心编程2 第六章 练习
6-2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来辅助
import string
import keyword alphas = string.ascii_letters + '_'
nums = string.digits
aplpnums = alphas+nums print('Testees must be at least 1 chars long.')
myInput = input('Identifier to test? ') if len(myInput) >= 1: if myInput[0] not in alphas:
print('invalid: first symbol must be alphabetic') else:
for otherChar in myInput[1:]: if otherChar not in aplpnums:
print('''invalid: remaining symbols must be alphanumeric''')
break else:
if myInput in keyword.kwlist:
print('invalid: symbol is reseved as keyword')
else:
print("okay as an identifier")
6-3.排序
(a) 输入一串数字,从大到小排列之.
(b) 跟 a 一样,不过要用字典序从大到小排列
nums = []
numbers = input('输入数字: ')
for i in numbers:
nums.append(int(i))
print(sorted(nums))
6–4.算术. 更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去.你的代
码应该可以计算出一个平均分,见练习 2-9 和练习 5-3.
def grade(fraction):
fractions = [90, 80, 70, 60, 0]
score = ['A', 'B', 'C', 'D', 'F']
for i in range(len(fractions)):
if fraction >= fractions[i]:
return score[i] if __name__ == '__main__':
fraction = int(input('输入成绩:'))
print(grade(fraction))
6–5.
字符串
(a)更新你在练习 2-7 里面的方案,使之可以每次向前向后都显示一个字符串的一个字符.
(b)通过扫描来判断两个字符串是否匹配(不能使用比较操作符或者 cmp()内建函数)。附加题:
在你的方案里加入大小写区分.
(c)判断一个字符串是否重现(后面跟前面的一致).附加题:在处理除了严格的回文之外,加入对
例如控制符号和空格的支持。
(d)接受一个字符,在其后面加一个反向的拷贝,构成一个回文字符串.
#(a)
str = input("Str: ")
for i in str:
print(i) for i in str[::-1]:
print(i) #(b)
str1 = input('Str1: ').strip()
str2 = input('Str2: ').strip() if str1 is str2:
print('yes')
else:
print(None) #(c)
def string(str):
if len(str) % 2 != 0:
return None
else:
if str[0] == str[-1]:
return str
else:
return None if __name__ == '__main__':
str = input('Str: ')
print(string(str)) #(d)
def copy(str): str_copy = str[::-1]
return str,str_copy str = input("Str: ")
print(copy(str))
6–6.字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的
空格(如果使用 string.*strip()函数那本练习就没有意义了)
str = input('Str: ') length = len(str)
print(length)
for i in range(0,length):
if str[i] != ' ':
str = str[i:]
print(len(str))
break
else:
pass for i in range(1, length+1):
if str[-1] != ' ':
str = str[:]
print(len(str))
break
elif str[-i] != ' ':
str = str[:-i+1]
print(len(str))
break
else:
pass print(str)
6-8 列表。给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”。
附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”。本练习中的值假定在0~1000。
# 用列表过于头痛,最后放弃使用字典了
numdict = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight',
9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen',
16: 'sixteen', 17:'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 30: 'thirty', 40: 'forty',
50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety',100: 'one hundred', 200: 'two hundred',
300: 'three hundred', 400: 'four hundred', 500: 'five hundred', 600: 'six hundred', 700: 'seven hundred',
800: 'eight hundred', 900: 'nine hundred'} def twonum(number):
if int(number) < 20:
return numdict[int(number)] elif int(number) > 20 and int(number) % 10 !=0:
ten = numdict[int(number[0])*10]
one = numdict[int(number[1])]
return "%s-%s" % (ten, one) return numdict[int(number)] def threenum(number):
if int(number) % 100 != 0:
hundred = numdict[int(number[0])*100] if int(number[1:]) < 20:
return "%s-%s" % (hundred,numdict[int(number[1:])]) elif int(number[1:]) > 20 and int(number[1:]) % 10 !=0:
ten = numdict[int(number[1])*10]
one = numdict[int(number[2])]
return "%s-%s-%s" % (hundred, ten, one) return "%s-%s" % (hundred, numdict[int(number[1:])]) return numdict[int(number)] if __name__ == '__main__':
number = input("输入数字: ")
if len(number) <= 2:
print(twonum(number))
else:
print(threenum(number))
6-9 转换。为练习5-13写一个姊妹函数,接受分钟数,返回小时数和分钟数。总时间不变,并且要求小时尽可能大。
def time(mins): hour = mins // 60
minute = mins % 60
return '%d:%d' % (hour,minute) if __name__ == '__main__':
minutes = int(input("输入分钟数: "))
print(time(minutes))
6-10 字符串。写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转,比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出。
def swapcase(str):
return str.swapcase() if __name__ == '__main__':
str = input("Str: ")
print(swapcase(str))
6-11 转换。
(a)创建一个从整型到IP地址的转换,如下格式:www.xxx.yyy.zzz。
(b)更新你的程序,使之可以逆转换。
def iptransfer(ipaddress):
"""输入整型转换成www.xxx.yyy.zzz格式"""
transferedIP = []
if len(ipaddress) != 12:
return "输入有误"
else:
for i in range(len(ipaddress) // 3):
transfer, ipaddress = ipaddress[:3], ipaddress[3:]
transferedIP.append(transfer)
return '.'.join(transferedIP) def ipreverse(ipaddress):
if len(ipaddress) != 15:
return "输入有误"
else:
ipaddress = list(ipaddress)
for ch in ipaddress:
if ch == '.':
ipaddress.remove(ch)
return ''.join(ipaddress) if __name__ == '__main__':
ip = input('输入IP: ')
print(iptransfer(ip))
print(ipreverse(ip))
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): for i in range(len(string)):
if string[i] == char:
return i
return -1 def rfindchr(string, char):
for i in range(len(string)-1, -1, -1):
if string[i] == char:
return i
return -1 def subchr(string, origchar, newchar):
stringlist = list(string)
for i in range(len(string)):
if stringlist[i] == origchar:
stringlist[i] = newchar
return ''.join(stringlist)
return -1 if __name__ == '__main__':
string = input("String: ")
char = input("Char: ")
print(findchr(string, char))
print(rfindchr(string, char))
newchar = input("Newchar: ")
print(subchr(string, char, newchar))
6-14 随机数。设计一个“石头、剪子、布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则。你和你的对手,
在同一时间做出特定的手势,必须是下面一种:石头、剪子、布。胜利者从下面的规则产生,这个规则本身是个悖论。
(a)布包石头。(b)石头砸剪子。(c)剪子剪破布。在你的计算机版本中,用户输入他/她的选项,计算机找一个随机选项,
然后由你的程序来决定一个胜利者或者平手。注意,最好的算法是尽量少使用if语句
import random print('''
0 石头
1 剪刀
2 布
3 quit''')
list = ['石头', '剪刀', '布']
while True:
i = int(input('输入数字: '))
if i == 3:
break
elif (i < 0 or i > 3):
continue
c = random.randint(0, 2)
if i == c:
print('我:', list[i], '电脑:', list[c])
print('平手')
elif i - c == 2 or i - c == -1:
print('我:', list[i], '电脑:', list[c])
print('赢')
else:
print('我:', list[i], '电脑:', list[c])
print('输')
6-17 方法。实现一个叫myPop()的函数,功能类似于列表的pop()方法,用一个列表作为输入,移除列表的最新一个元素,并返回它。
def myPop(pop): element = []
element.append(pop[len(pop)-1])
pop = pop[:(len(pop)-1)]
return pop,element if __name__ == '__main__':
pop = [1, 2, 3, 4, 5]
print(myPop(pop))
python核心编程2 第六章 练习的更多相关文章
- 《Python核心编程》 第六章 序列 - 课后习题
课后习题 6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:成员关系操作符(in.not in) import string ...
- Python核心编程2第六章课后练习
6-1 字符串 .string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? #!/usr/bin/env python def contain(str1 ...
- 【windows核心编程】 第六章 线程基础
Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ① 一个是线程的内核 ...
- python核心编程2 第十一章 练习
11-2 函数.结合你对练习5-2的解,以便你创建一个带一对相同数字并同时返回它们之和以及产物的结合函数. multiply = lambda x, y: x * y if __name__ == ' ...
- 《Python核心编程》 第四章 Python对象- 课后习题
练习 4-1. Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下. 答:身份.类型和值: 身份:每一个对象都有一个唯一的身份标识自己,可以用id()得到. 类型:对象的 ...
- Python核心编程2第四章课后练习
4-1 Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的描述一下. 身份:对象的唯一标识 类型 :对象的类型决定了该对象可以保存什么类型的值 ...
- Python核心编程笔记 第三章
3.1 语句和语法 3.1.1 注释( # ) 3.1.2 继续( \ ) 一般使用换行分隔,也就是说一行一个语句.一行过长的语句可以使用反斜杠( \ ) 分 ...
- 《Python核心编程》第五章:数字
PS:[笔记+代码+图片]在GitHub上持续更新,欢迎star:https://github.com/gdouchufu/Core-Python-Programming 本章大纲 介绍Python支 ...
- 《Python核心编程》 第七章 映射和集合类型 - 习题
课后习题 7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答: dict1 = {' :' python' } dict2 = {' :"hello" } dict ...
随机推荐
- MakeFile基本使用
MakeFile Making makefile demo # Run this line when useing `make` command # default is the target whi ...
- Asp.Net Mvc: 应用BindAttribute
环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1 ----------------------------------------------------- ...
- mysql中count(*)和found_rows()的区别
count(*)和found_rows()都可以用来求查询记录的数量 而count(*)往往单独使用,found_rows()却可以跟上前面一个查询,即select * from table limi ...
- 从今天开始学习Swift--关于Swift (转)
WWDC2014推出了新的编程语言,大家都站在了新的起跑线上,希望转发的本文能对园内的朋友一点介绍和帮助,如果大家对swift感兴趣,欢迎踊跃利用google. 原文地址:http://www.coc ...
- Android 使用xml实现边框阴影,背景渐变效果(附有RGB颜色查询对照表)
上图是显示效果,下面是代码实现: 个人理解就是使用layer-list实现两层view的叠加,其中top,left,bottom,left控制阴影 <?xml version="1.0 ...
- SqlServer存储过程中常用函数及操作
1.case语句 用于选择语句 SELECT ProductNumber, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN ...
- 爆料!如何在Visual Studio 2017上体验五星级云服务
2017 年 3 月初,号称宇宙最强 IDE 之一的 Visual Studio 发布了最新的 2017 版本,遥想自己使用 VC++ 6.0 的当年,看着现在已然稀疏的头发,真是一入 IT 似海深, ...
- 解析UML的面向对象分析与设计
经常听到有朋友抱怨,说学了UML不知该怎么用,或者画了UML却觉得没什么作用.其实,就UML本身来说,它只是一种交流工具,它作为一种标准化交流符号,在OOA&D过程中开发人员间甚至开发人员与客 ...
- ES6相关特性(解构赋值)
解构赋值:本质上是一种匹配模式,等号两边的模式相同,则左边的变量可以被赋予对应的值. 注意:null & undefined 不能解构赋值!!! 数组的解构赋值: let [a,[[b],c] ...
- Html5 web本地存储
Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似HTML4的cookie,但可实现功能要比cookie强大的多,cookie大小被限制在4KB,Web Sto ...