python核心语法练习题_《python核心教程2》第六章 练习

6–3.排序

(a) 输入一串数字,从大到小排列之.

(b) 跟 a 一样,不过要用字典序从大到小排列

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

6–4.算术. 更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去.你的代

码应该可以计算出一个平均分,见练习 2-9 和练习 5-3.

1 defgrade(fraction):2 fractions = [90, 80, 70, 60, 0]3 score = [‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘F‘]4 for i inrange(len(fractions)):5 if fraction >=fractions[i]:6 returnscore[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 instr: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 isstr2:14 print(‘yes‘)15 else:16 print(None)17

18 #(c)

19 defstring(str):20 if len(str) % 2 !=0:21 returnNone22 else:23 if str[0] == str[-1]:24 returnstr25 else:26 returnNone27

28 if __name__ == ‘__main__‘:29 str = input(‘Str:‘)30 print(string(str))31

32 #(d)

33 defcopy(str):34

35 str_copy = str[::-1]36 returnstr,str_copy37

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 inrange(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 deftwonum(number):9 if int(number) < 20:10 returnnumdict[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 returnnumdict[int(number)]18

19 defthreenum(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 returnnumdict[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 deftime(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 defswapcase(str):2 returnstr.swapcase()3

4 if __name__ == ‘__main__‘:5 str = input("Str:")6 print(swapcase(str))

6-11 转换。

(a)创建一个从整型到IP地址的转换,如下格式:www.xxx.yyy.zzz。

(b)更新你的程序,使之可以逆转换。

1 defiptransfer(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 defipreverse(ipaddress):13 if len(ipaddress) != 15:14 return "输入有误"

15 else:16 ipaddress =list(ipaddress)17 for ch inipaddress: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 deffindchr(string, char):2

3 for i inrange(len(string)):4 if string[i] ==char:5 returni6 return -1

7

8 defrfindchr(string, char):9 for i in range(len(string)-1, -1, -1):10 if string[i] ==char:11 returni12 return -1

13

14 defsubchr(string, origchar, newchar):15 stringlist =list(string)16 for i inrange(len(string)):17 if stringlist[i] ==origchar:18 stringlist[i] =newchar19 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 importrandom2

3 print(‘‘‘

4 0 石头5 1 剪刀6 2 布7 3 quit‘‘‘)8 list = [‘石头‘, ‘剪刀‘, ‘布‘]9 whileTrue: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 defmyPop(pop):2

3 element =[]4 element.append(pop[len(pop)-1])5 pop = pop[:(len(pop)-1)]6 returnpop,element7

8 if __name__ == ‘__main__‘:9 pop = [1, 2, 3, 4, 5]10 print(myPop(pop))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值