前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《Python程序设计与算法基础教程(第二版)》

《Python程序设计与算法基础教程(第二版)》

作者头像
用户7886150
修改于 2020-11-30 06:31:50
修改于 2020-11-30 06:31:50
5.2K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python中循环

第一章 Python概述 

1. 在Python中,以下标识符合法的是 

A. _B. 3CC. it’sB. str

答案:A 

 标识符的第一个字符必须是字母,下划线(_);其后的字符可以是字母、下划线或数字。一些特殊的名称,作为python语言的保留关键字,不能作为标识符以双下划线开始和结束的名称通常具有特殊的含义。例如__init__为类的构造函数,一般应避免使用 

B:以数字开头,错误 C:使用了',不是字母、下划线或数字 D:str是保留关键字 

3. 在下列Python语句中非法的是 

A. x = y =1B. x = (y =1)C. x,y = y,xB. x=1;y=1

答案:B,C 

7. 为了给整型变量x,y,z赋初值10,下面Python赋值语句正确的是 

A. xyz=10B. x=10 y=10 z=10C. x=y=z=10B. x=10,y=10,z=10

答案:C 

 分号;用于在一行书写多个语句python支持链式赋值 

A:赋值对象是xyz B:分号;用于在一行书写多个语句,而不是' '(即空格) D:分号;用于在一行书写多个语句,而不是, 

8. 为了给整型变量x,y,z赋初值5,下面Python赋值语句正确的是 

A. x=5;y=5;z=5B. xyz=5C. x,y,z=10B. x=10,y=10,z=10

答案:A 

 Pytho能支持序列解包赋值,但是变量的个数必须与序列的元素个数一致,否则会报错 

B:赋值对象是xyz C:序列解包赋值,变量的个数必须与序列的元素个数一致,否则会报错 D:分号;用于在一行书写多个语句,而不是, 

思考题:9 

9.下列Python语句的输出结果是 

def f():pass

print(type(f()))

结果:<class 'NoneType'> 

 NoneType数据类型包含唯一值None,主要用于表示空值,如没有返回值的函数的结果 

上机实践:2~6 

2. 编写程序,输入本金、年利率和年数,计算复利(结果保留两位小数) 

money = int(input("请输入本金:"))

rate = float(input("请输入年利率:"))

years = int(input("请输入年数:"))

amount = money*((1+rate/100)**years)

print(str.format("本金利率和为:{0:2.2f}",amount))

运行: 

请输入本金:1000

请输入年利率:6.6

请输入年数:10

本金利率和为:1894.84

3. 编写程序,输入球的半径,计算球的表面积和体积(结果保留两位小数) 

import math

r = float(input("请输入球的半径:"))

area = 4 * math.pi * r**2

volume = 4/3*math.pi*r**3

print(str.format("球的表面积为:{0:2.2f},体积为:{1:2.2f}",area,volume))

运行: 

请输入球的半径:666

球的表面积为:5573889.08,体积为:1237403376.70

4. 编写程序,声明函数getValue(b,r,n),根据本金b,年利率r和年数n计算最终收益v 

money = int(input("请输入本金:"))

rate = float(input("请输入年利率(<1):"))

years = int(input("请输入年数:"))

def getValue(b,r,n):

    return b*(1+r)**n

print(str.format("本金利率和为:{0:2.2f}",getValue(money,rate,years)))

运行: 

请输入本金:10000

请输入年利率(<1):0.6

请输入年数:6

本金利率和为:167772.16

5. 编写程序,求解一元二次方程x2-10x+16=0 

from math import sqrt 

x = (10+sqrt(10*10-4*16))/2

y = (10-sqrt(10*10-4*16))/2

print(str.format("x*x-10*x+16=0的解为:{0:2.2f},{1:2.2f}",x,y))

运行: 

x*x-10*x+16=0的解为:8.00,2.00

6. 编写程序,提示输入姓名和出生年份,输出姓名和年龄 

import datetime

sName = str(input("请输入您的姓名:"))

birthday = int(input("请输入您的出生年份:"))

age = datetime.date.today().year - birthday

print("您好!{0}。您{1}岁。".format(sName,age))

运行: 

请输入您的姓名:zgh

请输入您的出生年份:1999

您好!zgh。您20岁。

案例研究:使用Pillow库处理图像文件 

https://blog.csdn.net/Zhangguohao666/article/details/102060722 

通过此案例,进一步了解Python的基本概念:模块、对象、方法和函数的使用 

第三章 程序流程控制 

几个例题 

一:编程判断某一年是否为闰年 

 闰年:年份能被4整除但不能被100整除,或者可以被400整除。 口诀:四年一闰,百年不闰,四百必闰 

代码一: 

y = int(input("请输入要判断的年份:"))

if((y % 4 == 0 and y % 100 != 0) or y % 400 == 0):

    print("是闰年")

else:

    print("不是闰年")

代码二(使用calendar模块的isleap()函数来判断): 

from calendar import isleap

y = int(input("请输入要判断的年份:"))

if(isleap(y)):print("闰年")

else:print("不是闰年")

二:利用嵌套循环打印九九乘法表 

九九乘法表: 

for i in range(1,10):

    s = ""

    for j in range(1,10):

        s += str.format("%d * %d = %02d  " %(i, j, i*j))

    print(s)

下三角: 

for i in range(1,10):

    s = ""

    for j in range(1,i+1):

        s += str.format("%d * %d = %02d  " %(i, j, i*j))

    print(s)

上三角: 

for i in range(1,10):

    s = ""

    for k in range(1,i):

        s += "                   "

    for j in range(i,10):

        s += str.format("%d * %d = %02d  " %(i, j, i*j))

    print(s)

三:enumerate()函数和下标元素循环示例 

 Python语言中的for循环直接迭代对象集合中的元素,如果需要在循环中使用索引下标访问集合元素,则可以使用内置的enumerate()函数 

enumerate()函数用于将一个可遍历的数据对象(例如列表、元组或字符串)组合为一个索引序列,并返回一个可迭代对象,故在for循环当中可直接迭代下标和元素 

seasons = ["Spring","Summer","Autumn","Winter"]

for i,s in enumerate(seasons,start=1):    #start默认从0开始

    print("第{0}个季节:{1}".format(i,s))

运行: 

第1个季节:Spring

第2个季节:Summer

第3个季节:Autumn

第4个季节:Winter

四:zip()函数和并行循环示例 

 如果需要并行遍历多个可迭代对象,则可以使用Python的内置函数zip() 

zip()函数将多个可迭代对象中对应的元素打包成一个个元组,然后返回一个可迭代对象。如果元素的个数不一致,则返回列表的长度与最短的对象相同。 

利用运算符*还可以实现将元组解压为列表 

evens = [0,2,4,6,8]

odds = [1,3,5,7,9]

for e,o in zip(evens,odds):

    print("{0} * {1} = {2}".format(e,o,e*o))

运行: 

0 * 1 = 0

2 * 3 = 6

4 * 5 = 20

6 * 7 = 42

8 * 9 = 72

五:map()函数和循环示例 

 如果需要遍历可迭代对象,并使用指定函数处理对应的元素,则可以使用Python的内置函数map() 

map(func,seq1[,seq2,...])

func作用于seq中的每一个元素,并将所有的调用结果作为可迭代对象返回。如果func为None,该函数的作用等同于zip()函数 

计算绝对值: 

>>> list(map(abs, [-1, 0, 7, -8]))

[1, 0, 7, 8]

计算乘幂: 

>>> list(map(pow, range(5), range(5)))

[1, 1, 4, 27, 256]

计算ASCII码: 

>>> list(map(ord, 'zgh'))

[122, 103, 104]

字符串拼接(使用了匿名函数lambda): 

>>> list(map(lambda x, y: x+y, 'zgh', '666'))

['z6', 'g6', 'h6']

选择题:1、2、3 

1. 下面的Python循环体的执行次数与其他不同的是 

A. 

i = 0                        

while(i <= 10):

    print(i)

    i = i + 1

B. 

i = 10

while(i > 0):

    print(i)

    i = i - 1

C. 

for i in range(10):

    print(i)

D. 

for i in range(10,0,-1):

    print(i)

答案:A 

A:[0,10] 执行11次 B:[10,1] 执行10次 C:[0,9) 执行10次 D:[10,0) 执行10次 

2. 执行下列Python语句将产生的结果是 

x = 2; y = 2.0

if(x == y): print("Equal")

else: print("Not Equal")

A. EqualB. Not EqualC. 编译错误D. 运行时错误

答案:A 

 Python中的自动类型转换: 

 自动类型转换注意针对Number数据类型来说的当2个不同类型的数据进行运算的时候,默认向更高精度转换数据类型精度从低到高:bool int float complex关于bool类型的两个值:True 转化成整型是1;False 转化成整型是0 

int类型的2转化为float类型的2.0 

3. 执行下列Python语句将产生的结果是 

i= 1     

if(i): print(True)     

else: print(False)

A. 输出1B. 输出TrueC. 输出FalseD. 编译错误

答案:B 

在Python中,条件表达式最后被评价为bool值True或False。 

如果表达式的结果为数值类型(0),空字符串(""),空元组(()),空列表([]),空字典({}),其bool值为False,否则其bool值为True 

填空题:6 

6. 要使语句for i in range(_,-4,-2)循环执行15次,则循环变量i的初值应当为 

答案:26或者25 

一开始我给的答案是26,经过评论区 亻的提醒:  

>>> a = 0

>>> for i in range(26, -4, -2): a+=1

>>> print(a)

15

>>> a = 0

>>> for i in range(25, -4, -2): a+=1

>>> print(a)

15

这种题目有一个规律:for i in range(x,y,z): 若循环中没有break或者continue语句, 执行次数的绝对值:result = (x-y)÷z 

但实际上没有这么简单: 

如果步长为 -1或者1,那么答案只有一个如果步长为 -2或者2,那么答案有两个如果步长为 -3或者3,那么答案有三个… 

通过公式算出 x 之后, 

如果步长为2,还要计算 (x ± 1) - z × (result-1) 的值,然后再经过琐碎的判断即可如果步长为3,还要计算 (x ± 2) - z × (result-1) 的值,…… 

虽然看着麻烦,但实际上是很好理解的 

思考题:3~6 

3. 阅读下面的Python程序,请问程序的功能是什么? 

from math import sqrt

n = 0

for m in range(101,201,2):

    k = int(sqrt(m))

    for i in range(2, k+2):

        if m % i == 0:break

    if i == k + 1:

        if n % 10 == 0:print()

        print('%d' % m,end = " ")

        n += 1

输出101到200之间的素数 每行输出10个,多余换行 

运行: 

101 103 107 109 113 127 131 137 139 149 

151 157 163 167 173 179 181 191 193 197 

199

 素数(质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 

4. 阅读下面的Python程序,请问输出的结果使什么? 

n = int(input("请输入图形的行数:"))

for i in range(0, n):

    for j in range(0, 10 - i):print(" ", end=" ")

    for k in range(0, 2 * i + 1):print(" * ", end=" ")

    print("\n")

输出的是一个金字塔 

运行: 

请输入图形的行数:4

                     *  

                   *   *   *  

                 *   *   *   *   *  

               *   *   *   *   *   *   *  

5. 阅读下面的Python程序,请问输出的结果使什么?程序的功能是什么? 

for i in range(100,1000):

    n1 = i // 100

    n2 = i // 10 % 10

    n3 = i % 10

    if(pow(n1, 3) + pow(n2, 3) + pow(n3, 3) == i):print(i, end=" ")

输出三位数中所有的水仙花数 

运行: 

153 370 371 407 

 水仙花数 是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身 

6. 阅读下面的Python程序,请问输出的结果使什么?程序的功能是什么? 

for n in range(1,1001):

    total = 0; factors = []

    for i in range(1, n):

        if(n % i == 0):

            factors.append(i)

            total += i

    if(total == n):print("{0} : {1}".format(n, factors))    

输出1到1000的所有完数,并输出每个完数的所有因子 

运行: 

6 : [1, 2, 3]

28 : [1, 2, 4, 7, 14]

496 : [1, 2, 4, 8, 16, 31, 62, 124, 248]

 完数 所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身 

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档