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 第六章 练习的更多相关文章

  1. 《Python核心编程》 第六章 序列 - 课后习题

    课后习题 6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:成员关系操作符(in.not in) import string ...

  2. Python核心编程2第六章课后练习

    6-1 字符串 .string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? #!/usr/bin/env python def contain(str1 ...

  3. 【windows核心编程】 第六章 线程基础

    Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核 ...

  4. python核心编程2 第十一章 练习

    11-2 函数.结合你对练习5-2的解,以便你创建一个带一对相同数字并同时返回它们之和以及产物的结合函数. multiply = lambda x, y: x * y if __name__ == ' ...

  5. 《Python核心编程》 第四章 Python对象- 课后习题

    练习 4-1. Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下. 答:身份.类型和值: 身份:每一个对象都有一个唯一的身份标识自己,可以用id()得到.  类型:对象的 ...

  6. Python核心编程2第四章课后练习

    4-1 Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的描述一下.      身份:对象的唯一标识      类型 :对象的类型决定了该对象可以保存什么类型的值       ...

  7. Python核心编程笔记 第三章

    3.1     语句和语法    3.1.1   注释( # )   3.1.2   继续( \ )         一般使用换行分隔,也就是说一行一个语句.一行过长的语句可以使用反斜杠( \ ) 分 ...

  8. 《Python核心编程》第五章:数字

    PS:[笔记+代码+图片]在GitHub上持续更新,欢迎star:https://github.com/gdouchufu/Core-Python-Programming 本章大纲 介绍Python支 ...

  9. 《Python核心编程》 第七章 映射和集合类型 - 习题

    课后习题 7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答: dict1 = {' :' python' } dict2 = {' :"hello" } dict ...

随机推荐

  1. 10个常见的Redis面试"刁难"问题--转

    高可用架构 导读:在程序员面试过程中Redis相关的知识是常被问到的话题.作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题.十分值得一读. 作者简介:钱 ...

  2. postMessage解决跨域跨窗口消息传递

    平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 页面和其打开的新窗口的数据传递 页面与嵌套的iframe消息传递 这些问题都有一些解决办法,但html5引入的mes ...

  3. spring各版本之间的特性增加

    一.Spring3.0以后不再提供一个大的完整的jar包,而是分成20个小的jar包: org.springframework.aop, 包含在应用中使用Spring的AOP特性时所需的类. org. ...

  4. Java中的阻塞队列-LinkedBlockingQueue(二)

    原文地址:http://benjaminwhx.com/2018/05/11/%E3%80%90%E7%BB%86%E8%B0%88Java%E5%B9%B6%E5%8F%91%E3%80%91%E8 ...

  5. FTPUtil 多文件上传参考代码

    import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java ...

  6. HihoCoder#1509 : 异或排序(二进制)

    题意 题目链接 Sol 挺简单的吧.考虑两个元素什么时候不满足条件 设\(a_i\)与\(a_i + 1\)最高的不同位分别为0 1,显然\(S\)的这一位必须为\(0\),否则这一位必须为\(1\) ...

  7. jquery的on()方法总结

    摘自菜鸟教程 废话不说 直接上demo 实例: 向<p>元素添加click事件处理程序: <html> <head> <script src="ht ...

  8. oracle笔记2-多表查询和子查询

    --查询出当前用户下的所有表 select table_name from user_tables; --执行顺序原则:  from  where group by  having   select  ...

  9. Cloud Computing

    More numbers, More power. We waste much more every day. Everything can be connectible through specia ...

  10. UIWindow及程序启动的过程

    1.   UIWindow才有自发显示的功能, 一个程序之所以能显示东西,是因为有window !//  [self.window makeKeyAndVisible]; 2.   任何view的显示 ...