我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python核心编程2 第六章 练习

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python核心编程2 第六章 练习

6-2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来辅助

 1 import string
 2 import keyword
 3 
 4 alphas = string.ascii_letters + '_'
 5 nums = string.digits
 6 aplpnums = alphas+nums
 7 
 8 print('Testees must be at least 1 chars long.')
 9 myInput = input('Identifier to test? ')
10 
11 if len(myInput) >= 1:
12 
13     if myInput[0] not in alphas:
14         print('invalid: first symbol must be alphabetic')
15 
16     else:
17         for otherChar in myInput[1:]:
18 
19             if otherChar not in aplpnums:
20                 print('''invalid: remaining symbols must be alphanumeric''')
21                 break
22 
23             else:
24                 if myInput in keyword.kwlist:
25                     print('invalid: symbol is reseved as keyword')
26                 else:
27                     print("okay as an identifier")

6-3.排序

(a) 输入一串数字,从大到小排列之.
(b) 跟 a 一样,不过要用字典序从大到小排列

1 nums = []
2 numbers = input('输入数字: ')
3 for i in numbers:
4     nums.append(int(i))
5 print(sorted(nums))

6–4.算术. 更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去.你的代
码应该可以计算出一个平均分,见练习 2-9 和练习 5-3.

 1 def grade(fraction):
 2     fractions = [90, 80, 70, 60, 0]
 3     score = ['A', 'B', 'C', 'D', 'F']
 4     for i in range(len(fractions)):
 5         if fraction >= fractions[i]:
 6             return score[i]
 7 
 8 if __name__ == '__main__':
 9     fraction = int(input('输入成绩:'))
10     print(grade(fraction))

6–5.
字符串
(a)更新你在练习 2-7 里面的方案,使之可以每次向前向后都显示一个字符串的一个字符.
(b)通过扫描来判断两个字符串是否匹配(不能使用比较操作符或者 cmp()内建函数)。附加题:
在你的方案里加入大小写区分.
(c)判断一个字符串是否重现(后面跟前面的一致).附加题:在处理除了严格的回文之外,加入对
例如控制符号和空格的支持。
(d)接受一个字符,在其后面加一个反向的拷贝,构成一个回文字符串.

 1 #(a)
 2 str = input("Str: ")
 3 for i in str:
 4     print(i)
 5 
 6 for i in str[::-1]:
 7     print(i)
 8 
 9 #(b)
10 str1 = input('Str1: ').strip()
11 str2 = input('Str2: ').strip()
12 
13 if str1 is str2:
14     print('yes')
15 else:
16     print(None)
17 
18 #(c)
19 def string(str):
20     if len(str) % 2 != 0:
21         return None
22     else:
23         if str[0] == str[-1]:
24             return str
25         else:
26             return None
27 
28 if __name__ == '__main__':
29     str = input('Str: ')
30     print(string(str))
31 
32 #(d)
33 def copy(str):
34 
35     str_copy = str[::-1]
36     return str,str_copy
37 
38 str = input("Str: ")
39 print(copy(str))

6–6.字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的
空格(如果使用 string.*strip()函数那本练习就没有意义了)

 1 str = input('Str: ')
 2 
 3 length = len(str)
 4 print(length)
 5 for i in range(0,length):
 6     if str[i] != ' ':
 7         str = str[i:]
 8         print(len(str))
 9         break
10     else:
11         pass
12 
13 for i in range(1, length+1):
14     if str[-1] != ' ':
15         str = str[:]
16         print(len(str))
17         break
18     elif str[-i] != ' ':
19         str = str[:-i+1]
20         print(len(str))
21         break
22     else:
23         pass
24 
25 print(str)

6-8 列表。给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”。

附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”。本练习中的值假定在0~1000。

# 用列表过于头痛,最后放弃使用字典了

 1 numdict = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight',
 2            9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen',
 3            16: 'sixteen', 17:'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 30: 'thirty', 40: 'forty',
 4            50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety',100: 'one hundred', 200: 'two hundred',
 5            300: 'three hundred', 400: 'four hundred', 500: 'five hundred', 600: 'six hundred', 700: 'seven hundred',
 6            800: 'eight hundred', 900: 'nine hundred'}
 7 
 8 def twonum(number):
 9     if int(number) < 20:
10         return numdict[int(number)]
11 
12     elif int(number) > 20 and int(number) % 10 !=0:
13         ten = numdict[int(number[0])*10]
14         one = numdict[int(number[1])]
15         return "%s-%s" % (ten, one)
16 
17     return numdict[int(number)]
18 
19 def threenum(number):
20     if int(number) % 100 != 0:
21         hundred = numdict[int(number[0])*100]
22 
23         if int(number[1:]) < 20:
24             return "%s-%s" % (hundred,numdict[int(number[1:])])
25 
26         elif int(number[1:]) > 20 and int(number[1:]) % 10 !=0:
27             ten = numdict[int(number[1])*10]
28             one = numdict[int(number[2])]
29             return "%s-%s-%s" % (hundred, ten, one)
30 
31         return "%s-%s" % (hundred, numdict[int(number[1:])])
32 
33     return numdict[int(number)]
34 
35 if __name__ == '__main__':
36     number = input("输入数字: ")
37     if len(number) <= 2:
38         print(twonum(number))
39     else:
40         print(threenum(number))

6-9 转换。为练习5-13写一个姊妹函数,接受分钟数,返回小时数和分钟数。总时间不变,并且要求小时尽可能大。

1 def time(mins):
2 
3     hour = mins // 60
4     minute = mins % 60
5     return '%d:%d' % (hour,minute)
6 
7 if __name__ == '__main__':
8     minutes = int(input("输入分钟数: "))
9     print(time(minutes))

6-10 字符串。写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转,比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出。

1 def swapcase(str):
2     return str.swapcase()
3 
4 if __name__ == '__main__':
5     str = input("Str: ")
6     print(swapcase(str))

6-11 转换。
(a)创建一个从整型到IP地址的转换,如下格式:www.xxx.yyy.zzz。
(b)更新你的程序,使之可以逆转换。

 1 def iptransfer(ipaddress):
 2     """输入整型转换成www.xxx.yyy.zzz格式"""
 3     transferedIP = []
 4     if len(ipaddress) != 12:
 5         return "输入有误"
 6     else:
 7         for i in range(len(ipaddress) // 3):
 8             transfer, ipaddress = ipaddress[:3], ipaddress[3:]
 9             transferedIP.append(transfer)
10     return '.'.join(transferedIP)
11 
12 def ipreverse(ipaddress):
13     if len(ipaddress) != 15:
14         return "输入有误"
15     else:
16         ipaddress = list(ipaddress)
17         for ch in ipaddress:
18             if ch == '.':
19                 ipaddress.remove(ch)
20     return ''.join(ipaddress)
21 
22 if __name__ == '__main__':
23     ip = input('输入IP: ')
24     print(iptransfer(ip))
25     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()类似,不同的是,如果找到匹配的字符就用新的字符替换原先字符。返回修改后的字符串。

 1 def findchr(string, char):
 2 
 3     for i in range(len(string)):
 4         if string[i] == char:
 5             return i
 6     return -1
 7 
 8 def rfindchr(string, char):
 9     for i in range(len(string)-1, -1, -1):
10         if string[i] == char:
11             return i
12     return -1
13 
14 def subchr(string, origchar, newchar):
15     stringlist = list(string)
16     for i in range(len(string)):
17         if stringlist[i] == origchar:
18             stringlist[i] = newchar
19             return ''.join(stringlist)
20     return -1
21 
22 if __name__ == '__main__':
23     string = input("String: ")
24     char = input("Char: ")
25     print(findchr(string, char))
26     print(rfindchr(string, char))
27     newchar = input("Newchar: ")
28     print(subchr(string, char, newchar))

6-14 随机数。设计一个“石头、剪子、布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则。你和你的对手,

在同一时间做出特定的手势,必须是下面一种:石头、剪子、布。胜利者从下面的规则产生,这个规则本身是个悖论。

(a)布包石头。(b)石头砸剪子。(c)剪子剪破布。在你的计算机版本中,用户输入他/她的选项,计算机找一个随机选项,

然后由你的程序来决定一个胜利者或者平手。注意,最好的算法是尽量少使用if语句

 1 import random
 2 
 3 print('''
 4 0 石头
 5 1 剪刀
 6 2 布
 7 3 quit''')
 8 list = ['石头', '剪刀', '布']
 9 while True:
10     i = int(input('输入数字: '))
11     if i == 3:
12         break
13     elif (i < 0 or i > 3):
14         continue
15     c = random.randint(0, 2)
16     if i == c:
17         print('我:', list[i], '电脑:', list[c])
18         print('平手')
19     elif i - c == 2 or i - c == -1:
20         print('我:', list[i], '电脑:', list[c])
21         print('赢')
22     else:
23         print('我:', list[i], '电脑:', list[c])
24         print('输')

6-17 方法。实现一个叫myPop()的函数,功能类似于列表的pop()方法,用一个列表作为输入,移除列表的最新一个元素,并返回它。

 1 def myPop(pop):
 2 
 3     element = []
 4     element.append(pop[len(pop)-1])
 5     pop = pop[:(len(pop)-1)]
 6     return pop,element
 7 
 8 if __name__ == '__main__':
 9     pop = [1, 2, 3, 4, 5]
10     print(myPop(pop))

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python核心编程2 第六章 练习

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python核心编程2 第六章 练习

6-2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来辅助 1 im
2023-01-30

python核心编程2 第五章 练习

5-2 运算符(a) 写一个函数,计算并返回两个数的乘积(b) 写一段代码调用这个函数,并显示它的结果1 def product(x, y):2 3 return x * y4 5 if __name__ == '__main__'
2023-01-30

python核心编程2 第九章 练习

9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做Python , Perl, Tcl, 等大多脚本文件的注释符号.附加题: 处理不是第一个字符开头的注释.1 filename = input("输
2023-01-30

python核心编程2 第十章 练习

10-6.改进的open()。为内建的open()函数创建一个封装。使得成功打开文件后,返回文件句柄:若打开失败则返回给调用者None,而不是生成一个异常。这样你打开文件就不需要额外的异常处理语句。 1 def openfile(file)
2023-01-30

python核心编程2 第十二章 练习

12–5. 使用 __import__().(a) 使用 __import__ 把一个模块导入到你的名称空间。 你最后使用了什么样的语法?(b) 和上边相同, 使用 __import__() 从指定模块导入特定的名字。1 module =
2023-01-30

《python核心教程2》第十章 练习

10-6.改进的open()。为内建的open()函数创建一个封装。使得成功打开文件后,返回文件句柄:若打开失败则返回给调用者None,而不是生成一个异常。这样你打开文件就不需要额外的异常处理语句。 1 def openfile(file)
2023-01-30

《python核心教程2》第九章 练习

9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做Python , Perl, Tcl, 等大多脚本文件的注释符号.附加题: 处理不是第一个字符开头的注释.1 filename = input("输
2023-01-30

《Python核心编程》第五章

5-1.整型。讲讲Python普通整型和长整型的区别?   答案:    在大多数32位机器上,标准整型的取值范围是-2^31~2^31-1,如果在64位机器上使用64位编译器编译的Python,则整型是64位的。而长整型能表示的数值仅仅与
2023-01-31

Python核心编程第三版

Python核心编程第三版高清版 PDF链接: https://pan.baidu.com/s/16jAUKZc3wHUoFZbPnhpVMw 密码: 2y8d
2023-01-31

[PYTHON] 核心编程笔记之六-Py

6.序列:字符串,列表和元祖6.1序列6.1.1标准类型操作符6.1.2序列类型操作符成员关系操作符(in,not in)判断一个元素是否属于一个序列字符串判断一个字符是否属于这个字符串元祖判断一个对象是否属于该对象序列in/not in
2023-01-31

Python核心编程习题解答

最近在学Python,准备把《Python核心编程(第二版)》上课后有意思的习题做一做,也算是对语言的内容更熟悉一些。我做的代码在github上(链接),可以上去根据题号查看或搜索。难免有理解或做得不对的地方,请指正或一起讨论。慢慢来,踏实
2023-01-31

python核心编程(第三版)网络编程错

//服务器端代码from socket import *from time import ctimehost='localhost'port=3330bufsize = 1024addr = (host,port)tcpser = sock
2023-01-30

Python核心编程(第3版)-客户端F

cat getLatestFTP.py#!/usr/bin/pythonimport ftplibimport osimport socketHOST = 'ftp.mozilla.org'DIRN = 'pub/mozilla.org/w
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录