博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python核心编程 第八章
阅读量:6347 次
发布时间:2019-06-22

本文共 7661 字,大约阅读时间需要 25 分钟。

hot3.png

8.1 if 语句

8.2 else语句

python 中的缩进使用强制使代码正确对齐,避免‘悬挂else’

8.3 elif语句

8.4条件表达式

8.5while语句

8.6 for 语句

    8.6.2 用于序列类型

            1.通过序列项迭代

                namelist =['walter','nicole', 'steven', 'henery']

                for eachname in namelist:

            2.通过序列索引迭代

                    for i in range(len(namelist)

            3.使用 项和索引迭代

                使用内建的函数enumerate()函数

                    for i ,eachLee in enumerate(namelist):

      8.6.4   range()内建函数

                  完整语法  range(start, end, step =1)

                   简略语法 range(end)

                                   range(start,end)

    8.6.5 xrange()内建函数

                    有一个很大的范围的时候,xrange()更适合,它只能被用在for循环中

    8.6.6 与序列相关的内建函数

                sorted()、reversed()、enumerate()、zip()

8.7 break 语句

            结束当前循环然后跳转到下条语句、

8.8 continue语句

            遇到continue语句的时候,程序会结束当前循环,并忽略剩余的语句,然后回到循环的顶端

8.9  pass语句

        无操作

        后来完成

8.10 再谈else语句

    在Python 中,while 和 for循环中也可以使用else语句,但else语句只在循环完成后执行,也就是说break语句会跳过else语句

 例:求最大约数,也提示这个数是否为素数 、。、。。。、。,

# -*-coding:utf-8 -*-def showMaxFactor(num):	count = num/2	while count >1:		if num % count ==0:			print 'largest factor of %d is %d' %\				(num,count)			break		count -= 1	else:		print num, "is prime"for eachNum in range(10,21):	showMaxFactor(eachNum)

8.11迭代器和iter()函数

跟不上说,迭代器是一个有next()方法的对象,而不是通过索引来计数

i.next()

1.序列

2.字典

for eachKey in myDict.keys()

3.文件

myFile = open('config-win.txt')

for eachLine in myFille

 

8.12 列表解析

map(lambda x:x**2, range(6))

[x**2 for x in range(6)]

filter(lambda x:x%2,seq)

[x for x in seq if x %2]

1.矩阵样列

2.磁盘文件样列

8.13 生成器表达式

生成器是特定的函数,允许返回一个值,然后暂停代码的执行,稍后恢复

 

 

8.15 练习

8.1 (a)C

        (b)  D

         (c) B

8.2 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入的是 f == 2, t == 26, i == 4 , 程序将输出 2, 6, 10, 14, 18, 22, 26.

# -*-coding:utf-8 -*-def out():	f = int(raw_input("enter a number as start"))	t = int(raw_input("enter a number as end"))	i = int(raw_input("enter a number as increment"))	for j in range(f,t,i):		print jout()

8-3 .range()。如果我们需要生成下面的这些列表,分别需要在range()内建函数中提供哪些参数

(a) range(0,10,1)

(b) range(3,19,3)

(c)range(-20,861,220)

 

8-4

我们在本章已经给出了一些代码来确定一个数字的最大约数或者它是否是一个素数. 请把相关代码转换为一个返回值为布尔值的函数,函数名为 isprime() . 如果输入的是一个素数, 那么返回 True , 否则返回 False .

 

# -*-coding:utf-8 -*-def isprime():	num = int(raw_input("input a number"))	if num ==1:		print False	count = num/2	while count >1:		if num % count ==0:			print False			break		count -= 1	else:		print Truewhile 1:	isprime()

8.5 约数. 完成一个名为 getfactors() 的函数. 它接受一个整数作为参数, 返回它所有约数的列表, 包括 1 和它本身

# -*-coding:utf-8 -*-def getfactors():	list=[]	num = int(raw_input("input a number"))	for i in range(1,num+1):		if num%i ==0:			list.append(i)	print listwhile 1:	getfactors()

8.6素因子分解. 以刚才练习中的 isprime() 和 getfactors() 函数为基础编写一个函数, 它接受一个整数作为参数, 返回该整数所有素数因子的列表. 这个过程叫做求素因子分解, 它输出的所有因子之积应该是原来的数字. 注意列表里可能有重复的元素. 例如输入 20 , 返回结果应该是 [2, 2, 5] .

a.

#-*-coding:utf-8 -*-#判断是否为素数def isprime(num):      if num==1:          return False      count=num/2      while count>1:          if num%count==0:              return False              break          count-=1      else:          return True    def getfactors():	num = int(raw_input('Enter a number:'))	factors=[]	#直接判断本身是否为素数	if isprime(num):		factors = [num]	else:	#最小的素数为2		prime = 2		count = num/2	#从2开始先求出最小的素因数		while prime<= count:			if num%prime==0:				factors.append(prime)	#除以最小的素数A,继续循环A的最小素因素				num/=prime #(用递归的思想解决)			else:				prime+=1	return factorsprint getfactors()

 

b.运算时间比较慢

# -*-coding:utf-8 -*-#判断是否为素数def isprime(num):	if num ==1:		return False	count = num/2	while count >1:		if num %count ==0:			return False			break		count -= 1	else:		return True		def getfactors(num):	factors=[]  	count=num/2  	#判断约数里面是质数的,也就是质因数	while count>1:  		if isprime(count) and num%count==0:  			factors.append(count)  			num=num/count  			count=num/2  		else:  			count-=1  	#本身为素数的情况	if num != 1:  			factors.append(num)  	factors.sort()	return factorsnum = int(raw_input('Enter a number:'))print getfactors(num)

c.

# -*-coding:utf-8 -*-#判断是否为素数def isprime(num):	if num ==1:		return False	count = num/2	while count >1:		if num %count ==0:			return False			break		count -= 1	else:		return True			def getfactors(num):#调用isprime,判断是否为素数	if isprime(num):		print num			else:		prime = 2		count = num/2		while prime<= count:			if num%prime==0:				print prime				#递归分解				return getfactors(num/prime)			else:				prime+=1num = int(raw_input("Enter a number"))getfactors(num)

 

8.7  全数. 完全数被定义为这样的数字: 它的约数(不包括它自己)之和为它本身. 例如: 6的约数是 1, 2, 3, 因为 1 + 2 + 3 = 6 , 所以 6 被认为是一个完全数. 编写一个名为 isperfect()的函数, 它接受一个整数作为参数, 如果这个数字是完全数, 返回 1 ; 否则返回 0 .

 

# -*-coding:utf-8 -*-def getfactors(num):	#求出所有的约数	list=[]	s=0	for i in range(1,num+1):		if num%i ==0:			list.append(i)	#约数中包含本身,不能计算在内	for j in range(0,len(list)-1):		s+=list[j]	if s==num:		print 1	else:		print 0num = int(raw_input("Enter a number"))getfactors(num)

 

8.8 阶乘. 

一个数的阶乘被定义为从 1 到该数字所有数字的乘积. N 的阶乘简写为 N! .写一个函数, 指定N, 返回 N! 的值.

# -*-coding:utf-8 -*-def factorial(num):	if num ==1 or num==0:		return 1	elif num>=2:		return num* factorial(num-1)	else:		return Falsewhile 1:	num = int(raw_input('Enter a number'))	print factorial(num)

8.9Fibonacci 数列. Fibonacci 数列形如 1, 1, 2, 3, 5, 8, 13, 21, 等等. 也就是说,下一个值是序列中前两个值之和. 写一个函数, 给定 N , 返回第 N 个 Fibonacci 数字. 例如, 第1 个 Fibonacci 数字是 1 , 第 6 个是 8 .

# -*-coding:utf-8 -*-def Fibonacci (num):	if num==1 or num ==2:		return 1	else:		return Fibonacci(num-1)+Fibonacci(num-2)	while 1:	num = int(raw_input('Enter a number'))	print Fibonacci(num)

8-10 空

8.11 要求输入一个姓名列表,输入格式是“Last Name, First Name,” 即 姓,逗号, 名. 编写程序处理输入, 如果用户输入错误, 比如“First Name Last Name,” , 请纠正这些错误, 并通知用户. 同时你还需要记录输入错误次数. 当用户输入结束后, 给列表排序, 然后以“姓 , 名" 的顺序显示.

输入输出示例(你不需要完全按照这里里例子完成):
% nametrack.py
Enter total number of names: 5
Please enter name 0: Smith, Joe
Please enter name 1: Mary Wong
>> Wrong format... should be Last, First.
>> You have done this 1 time(s) already. Fixing input... Please enter name 2: Hamilton,
Gerald
Please enter name 3: Royce, Linda
Please enter name 4: Winston Salem
>> Wrong format... should be Last, First.
>> You have done this 2 time(s) already. Fixing input...
The sorted list (by last name) is:
Hamilton, Gerald
Royce, Linda
Salem, Winston
Smith, Joe
Wong, Mary

# -*-coding:utf-8 -*-i = int(raw_input('Enter total number of names:'))list =[]error = 0for j in range(0,i):	name = raw_input('please enter name %d:' %j)	#正确的输入	if ','in name:		list.append(name)	else:	#错误的输入及修正		error+=1		print "Wrong format...should be last,first"		print "You have done this %d time(s) already.Fixing input..." %error		name = name.split(' ')[1]+','+name.split(' ')[0]		list.append(name)list.sort()print "The sorted list (by last name)is:"for k in list:	print "\t",k

8–12. (整数)位操作.编写一个程序, 用户给出起始和结束数字后给出一个下面这样的表格,分别显示出两个数字间所有整数的十进制, 二进制, 八进制和十六进制表示. 如果字符是可打印的ASCII 字符, 也要把它打印出来, 如果没有一个是可打印字符, 就省略掉 ASCII 那一栏的表头.

a.自己写的,有点麻烦,还乱、、、

# -*-coding:utf-8 -*-#程序的问题在于转换后字符是有符号的,占位不一样 ,格式有点乱print '-'*15i = int(raw_input('    输入起始值:'))j = int(raw_input('    输入结束值:'))if 32
<126: title = "DEC\tBIN\tOCT\tHEX\tASCII" print title print '-'*40 #只有32以后的ASCII才显示,不然为空 if i>32: for k in range(i,j+1): print k,'\t',bin(k),'\t',oct(k),'\t',hex(k),'\t',chr(k) else: for k in range(i,33): print k,'\t',bin(k),'\t',oct(k),'\t',hex(k) for k in range(33,j+1): print k,'\t',bin(k),'\t',oct(k),'\t',hex(k),'\t',chr(k) else: title = "DEC\tBIN\tOCT\tHEX" print title print '-'*31 for k in range(i,j+1): print k,'\t',bin(k),'\t',oct(k),'\t',hex(k)

b.别人的

start=int(raw_input('pls input a start number:'))  end=int(raw_input('pls input a end number:'))  title='DEC\tBIN\tOCT\tHEX'  for i in range(start,end+1):      if 32<=i<=126:          title+='\tASCII'          break  print title    for i in range(start,end+1):      if 32<=i<=126:          print '%d\t%07d\t%o\t%x\t%s' %(i,int(bin(i)[2:]),i,i,chr(i))      else:          print '%d\t%07d\t%o\t%x' %(i,int(bin(i)[2:]),i,i)

8-13

多了建立索引列表和遍历索引列表

转载于:https://my.oschina.net/finndai/blog/749582

你可能感兴趣的文章
CollapsingToolbarLayoutDemo【可折叠式标题栏,顺便带有CardView卡片式布局】
查看>>
CentOS7.4安装配置mysql5.7 TAR免安装版
查看>>
解决IE二级链接无法打开故障
查看>>
Windows phone应用开发[16]-数据加密
查看>>
SQL Server 迁移数据到MySQL
查看>>
通用数据压缩算法简介
查看>>
The next Industry Standard in IT Monitoring, a python implementation Nagios like tool --- Shinken
查看>>
(笔记)找工作,该怎么进补
查看>>
div的显示和隐藏以及点击图标的更改
查看>>
(轉貼) Ubuntu將在ARM平台netbook上現身 (SOC) (News) (Linux) (Ubuntu)
查看>>
SQL注入测试工具:Pangolin(穿山甲)
查看>>
在html 的img属性里只显示图片的部分区域(矩形,给出开始点和结束点),其他部份不显示,也不要拉伸...
查看>>
程序员第二定律:量化管理在程序员身上永无可能
查看>>
ubuntu一些脚本的执行顺序
查看>>
类继承的结构
查看>>
Intel 被 ARM 逼急了
查看>>
testng + reportng 测试结果邮件发送
查看>>
神操作:如何将Vim变成一个R语言IDE
查看>>
百度亮相iDASH,推动隐私保护在人类基因组分析领域的应用
查看>>
比特币暴涨拉升至1w美元以上,说比特币崩盘的专家要失望了
查看>>