Python全栈工程师 (exercises)
# 1:给定一个数,判断他是正数,负数,还是0
a = int(input("请输入一该个整数"))
if a == 0:
print(a, "是0")
elif a > 0:
print(a, "是正数")
else:
print(a, "是负数") # 练习2:输入一个季度的数字 输出该季度有那几个月
b = int(input("请输入一个季度:1.春季2.夏季3.秋季4.冬季"))
if b > 4:
print(b, "不是季节")
elif b < 0:
print(b, "不是季节")
else:
if b == 1:
print(b, "春季有:一月,二月,三月")
elif b == 2:
print(b, "夏季有:四月,五月,六月")
elif b == 3:
print(b, "秋季有:七月,八月,九月")
else:
print(b, "冬季有:十月,十一月,十二月") # 联系3:输入一个月份 输出这个月份在那个季度
c = int(input("请输入一个月份判断在那个季度"))
if c < 0:
print(c, "不是月份")
elif c > 12:
print(c, "不是月份")
elif c < 4:
print(c, "在春季")
elif c < 7:
print(c, "在夏季")
elif c < 10:
print(c, "在秋季")
elif c <= 12:
print(c, "在冬季") # 练习4:3公里内10元 超出1.9元/公里 超过15公里 每公里加50%回空费 3.15元/公里
# 输入公里 打印车费 d = int(input("请输入行驶公里数:"))
if d <= 3:
print("车费:10元")
elif d > 4:
if d < 15:
g = (d - 3) * 1.9 + 10
print(d, "公里:", g, "元")
else:
f = (d - 15) * 3.15 * 1.5 + 12 * 1.9 + 10
print(d, "公里:", f, "元")
elif d < 0:
print("公里数输入错误") 练习:
1. 一个商店卖西瓜,7元一个,您带20元钱能买到几个西瓜? 剩多少元?
2. 一个学生毕业薪资10000元,每个涨薪 20%,请问十年后这个学生的薪资是多少? 1. 打印如下图形:
*******
* *
* *
*******
2. 已知矩形的长边长为6cm,短边长为4cm,用表达式求
1) 周长是多少?
2) 面积是多少? 练习:
1. 指定一个圆的半径是r = 9cm
1) 计算圆的周长
2) 计算圆的面积 2. 交量交换练习:
已知有两个变量:
a 绑定 10000
b 绑定 20000
问,在不创建任何新数据对象的情况下,如何让a 和 b 交换绑定的对象
a = 10000
b = 20000
....
print(a) #
print(b) # 练习:
1. 中国古代的秤是16两一斤,请问古代对216两是古代的几斤几两,写程序打印出来? 2. 从凌晨 0:0:0 计时,到现在已经过了63320秒,
请问现在是几时,几分,几秒,写程序打印出来
提示:
可以用地板除和求余实现 3. 温度转换:
摄氏温度 = 5.0/9.0*(华氏温度-32) 请问100华氏温度是多少摄氏温度.写程序算出来
思考:
如果知道当前温度是摄氏温度度,能否算出华氏温度是多少? 练习:
将数字3.14 用变量pi绑定
将pi变量转为整数,用变量i绑定
将 pi 变量 与 i变量相减,结果用f变量绑定
1. 判断f是否等于 0.14? 为什么?
2. 删除所有的变量
(用交互模式来实现) 练习:
1. 输入两个整数, 分别用变量x, y绑定
1) 计算这两个数的和,并打印结果
2) 计算这两个数的积,并打印结果
3) 计算x的y次方并打印结果
如:
请输入x: 10
请输入y: 20
打印如下:
10 + 20 = 30
10 * 20 = 200
10 ** 20 = ...
2. 今天是小明20周岁的生日,假设每年有365天,计算它过了多少个星期天,余多少天
3. 分三次输入当前的小时,分钟和秒数,在终端打印时此距离凌晨0:0:0 秒过了多少秒 练习:
任意输入一个数
1) 判断这个数是否大于100
2) 判断这个数是否小于0
3)判断这个数是否在80~100之间 练习:
1. 输入一个季度 1~4的整数.输出这个季度有哪儿几个月,如果输入的不是1~4的整数,则提示用户您输错了 2. 输入一年中的月份(1~12) 输出这个月在哪儿个季度,如果输入的是其它数,则提示您输错了 思考:
score = input('请输入学生成绩:') or ''
score = int(score)
请问这个or是在做什么? 练习:
1. 北京出租车计价:
收费标准:
3公里以内收费13元
基本单价: 2.3元/公里 (超出3公里以外)
空驶费:超过15公里后,每公里加收单价的50%的空驶费(即3.45元/公里)
要求:
输入公里数,打印出费用金额(以元为单位四舍五入)
2. 输入一个学生的三科成绩(三个整数):
打印出最高分是多少?
打印出最低分是多少?
打印出平均分是多少?
3. BMI指数(Body Mass Index) 以称身体质量指数
BMI值计算公式:
BMI = 体重(公斤) / 身高的平方(米)
例如:
一个人69公斤,身高是173公分
BMI = 69 / 1.73**2 = 23.05
标准表:
BMI < 18.5 体重过轻
18.5 <= BMI < 24 体重正常
BMI > 24 体重过重
要求: 输入身高的体重,打印出BMI的值并打印体重状况 思考:
如果一个字符串同时包含如下字符该怎么办?
' " ''' """ 练习:
试求出以下字符串含有多少个字符?
'1234abcd' # 8
'5\'4"' # 4
'\"A\x34\U00006041' # 4
'\b\n\td\r'
'\\nn\\x41' 练习:
写一个程序,打印一个高度为4行的矩形方框
要求输入一个整形数字,此整数代表矩形的宽度,输出此矩形
如:
请输入矩形宽度: 10
##########
# #
# #
##########
请输入矩形宽度: 5
#####
# #
# #
##### 练习:
输入一个字符串,打印如下内容:
1. 打印这个字符串的第一个字符
2. 打印这个字符串的最后一个字符
3. 如果这个字符串的长度是奇数,打印中间这个字符
注:
求字符串的长度的函数len(s) 练习:
1. 写一个程序,输入一个字符串,把字符串的第一个字符和最后一个字符去掉后,打印出处理后的字符串 2. 输入任意一个字符串,判断这个字符串是否是回文
回文示例:
上海自来水来自海上
ABCCBA
12321
(回文是指中心对称的文字) 练习:
1. 写一个程序,输入一段字符串,如果字符串不为空,把第一个字符的编码值打印出来
2. 写一个程序,输入一个整数值(0~65535), 打印出这个数值所对应的字符 练习:
1. 输入一个字符串用变量s绑定
1) 判断您输入的字符串有几个空格
2) 将原字符串的左右空白字符去掉, 打印出剩余的字符个数
3)判断您输入的是否是数字
4) 如果是数字,判断这个数字是否大于100
2. 输入三行文字,让这三行文字在一个方框内居中显示
如输入:
hello!
I'm studing python!
I like python
显示如下
+---------------------+
| hello! |
| I'm studing python! |
| I like python |
+---------------------+
注:请不要输入中文 练习:
输入三行文字,让这三行文字依次以20个字符的宽度右对齐输出
如:
请输入第1行: hello world
请输入第2行: aaa
请输入第3行: ABCDEFG
输出结果如下:
hello world
aaa
ABCDEFG 做完上面的题后思考:
能否以最长的字符串的长度进行右对齐显示(左侧填充空格) 问题:
输入一个整数n, 写程序打印如下:
这是第 1 行
这是第 2 行
这是第 3 行
...
这是第 n 行
问题:
如何让一条语句重复执行多次?
用:
print("这是第", i, '行')
能否实现 练习:
1. 输入一行字符串,将字符串中Unicode编码值最大的一个字符打印出来(不允许用max函数)
(提示: while语句内可以嵌入 if 语句进行判断) 2. 打印 从零开始的浮点数,每个数增加 0.5, 打印出10以内的这样的数:
0.0
0.5
1.0
1.5
...
9.5 练习:
1. 打印 1 ~ 20的整数 2. 打印从10开始 到 0(不包含0)之间的整数 3. 打印 1 ~ 20的整数,打印在一行内 4. 打印 1 ~ 20的整数,每行打印5个,打印四行如:
1 2 3 4 5
6 7 8 9 10
11 12 .....
.....
提示: while中可以嵌入if语句来换行 5. 输入一个整数n, 打印出一个长方形
n 代表长方形的宽度的字符数和高的行数
例如:
请输入:4
打印:
####
# #
# #
####
请输入:6
打印:
######
# #
# #
# #
# #
###### 练习:
输入一个数,打印指定宽度的正方形
如:
输入: 5
打印如下正方形:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
如:
输入: 3
打印如下正方形:
1 2 3
1 2 3
1 2 3 练习:
1. 写程序,计算:
1 + 2 + 3 + 4 + ..... + 99 + 100的和 2. 写程序,任意输入一个数n,计算:
1 + 2 + 3 + 4 + ..... + (n-1) + n的和 问题:
如果在循环过程中不想再继续此循环语句的执行了,怎么办? 练习:
1. 任意输入一些数,当输入负数时结束输入
当输入完成后,打印您输入的这些数的和是多少? 2. 写程序求:
Sn = 1 + 1/2 + 1/4 + 1/8 + .... + 1/(2**n)
求当n等同于100时,sn的值是多少?
3. 用while语句实现打印三角形,输入一个整数,表示三角形的宽度和高度,打印出相应的直角三角形:
如:
请输入三角形的宽度: 4
1) 打印如下:
*
**
***
****
2) 打印如下:
*
**
***
****
3) 打印如下:
****
***
**
*
4) 打印如下:
****
***
**
* 练习:
任意输入一段字符串
1) 计算您输入的字符'A' 的个数,并打印出来
2) 计算出空格的个数,并打印出来
(要求用for语句,不允许使用, S.count方法) 思考用while语句能否实现上述功能 练习:
用for 语句打印1~20 打印在一行内 练习:
求 100以内有哪儿些整数与自身+1的乘积再对11求余的结果等于8? x * (x+1) % 11 == 8 x附合条件 1. 写程序计算 1 + 3 + 5 + 7 + ...+ 99的和
(要求用for语句和while语句两种方式实现) 2. 用while语句实现打印:
1 3 5 7 9. .... 19
打印在一行内 3. 将上题用for语句来实现 练习:
用for 语句实现下题 :
1. 输入一个数w代表正方形的宽度,打印如下正方形:
如输入:5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
2. 写程序来改写上题:
如输入: 5
打印如下:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
如输入: 3
打印如下:
1 2 3
2 3 4
3 4 5 练习:
1. 输入一个整数用begin绑定,
再输入一个整数用end绑定
打印从begin开始,到end结束内的全部奇数(不包含end) 2. 将上述练习改写为 用while语句实现 3. 求 1~100 之间所有不被 5, 7, 11 整除的数的和
(可以考虑用continue实现) 练习:
1 输入三行文字,将这三行文字, 保存于一个列表L中,并打印
如:
请输入: abc<回车>
请输入: 123<回车>
请输入: 你好<回车>
生成列表如下:
L = ['abc', '123', '你好']
print(L) 打印 练习:
1. 输入任意行文字,存于列表L中,当不输入任何内容直接回车后结束输入
1) 打印L列表中的内容
2) 计算您共输入了几行内容
3) 计算您共输入了多少个字符 2. 输入一个整数(代表树干的高度)
打印出如下一棵树
输入: 2
打印:
*
***
*
*
输入:3
*
***
*****
*
*
*
3. 写一个程序,任意输入一个整数,判断这个数是否是素数(prime)
素数(也叫质数), 是只能被1和自身整除的正整数:
如: 2 3 5 7 11 等
提示:
用排除法: 当判断x是否是素数是,只要让x分别除以:
2, 3, 4, 5, .... x-1, 只要整除了,那x不是素数,否则x是素数
4.算出100~1000以内的水仙化数(Naricissistic Number)
水仙花数是指百位的3次方 加上 十位的3次方 加上 个位的3次方等于原数的数
如:
153 = 1**3 + 5**3 + 3**3
答案:
153, 370, .... 练习:
已知有列表:
L = [3, 5] 1) 用索引和切片等操作,将原列表改变为:
L = [1, 2, 3, 4, 5, 6] 2) 将列表反转,删除最后一个元素后打印此列表
...
print(L) # [6, 5, 4, 3, 2] 练习:
1. 写程序,让用户输入一些整数,当输入-1时结束输入,将这些数存于列表L中
1) 打印用户共输入了几个数?
2) 打印您输入的数的最大数是多少
3) 打印您输入的数的最小数是多少
4) 打印您输入的这些数的平均值是多少? 练习:
输入多行文字,存入列表中,
每次输入回车后算一行
任意输入多行,当输入回车(即输入空行时结束输入)
1) 按原输入内容在屏幕上输出内容
2) 打印出您共输入了多少行文字
3) 打印出您共输入了多少个字符 练习:
1. 有字符串"hello"
请用此字符串生成:
'h e l l o' 和 'h-e-l-l-o'
答案:
s = "hello"
a = ' '.join(s) # a = 'h e l l o'
b = '-'.join(s) # b = 'h-e-l-l-o' 2. 写一个程序,让用户输入很多正整数,当输入小于零的数时结束输入,
1) 打印这些数中最大的一个数
2) 打印这些数中第二大的一个数
3) 删除最小的一个数
4) 打印剩余数的和 练习:
用列表推导式生成1~100内奇数的列表
结果是: [1, 3, 5, 7, ..... 99] L = [x for x in range(1, 100, 2)] 示例:
生成1~00内的奇数的列表:
L = [x for x in range(1, 100) if x % 2 == 1] 练习:
生成一个数值为 1 ~ 9的平方的列表,去掉所有的奇数的平方
L = [x**2 for x in range(1, 10)] # L = [4, 16, 36, 64] 练习:
1. 已知有一个字符串
s = '100,200,300,500,800'
将其转化为整数的列表存于L列表中
L = [100, 200, 300, 500, 800] 2. 生成前40个斐波那契数(Fibonacci)
1 1 2 3 5 8 13 .....
要求将这些数保存在列表中
打印这些数 3. 有一些数存于列表中:
L = [1, 3, 2, 1, 6, 4, 2, ..... 98, 82]
将列表中出现的数字存入到另一个列表L2中
要求: 重复出现多次的数字在L2列表中只保留一份(去重) 写程序,实现以下要求:
1) 将如下数据形成一个字典seasons:
'键' '值'
1 '春季有1, 2, 3月'
2 '夏季有4, 5, 6月'
3 '秋季有7, 8, 9月'
4 '冬季有10,11,12月'
2) 让用户输入一个整数,代表一个季度,打印这个季度对应的信息,如果用户输入的信息不在字典内,则打印信息不存在 练习:
输入一段字符串,打印出这个字符串中出现过的字符的出现次数
如:
输入:
abcdabcaba
打印:
a: 4次
b: 3次
d: 1次
c: 2次
注:
不要求打印的顺序 练习:
有字符串的列表如下:
L = ['tarena', 'xiaozhang', 'tyke']
用上述列表生成如下字典:
d = {'tarena': 6, 'xiaozhang': 9, 'tyke':4}
注:
字典的值为键的长度 练习:
1. 已知有两个等长的列表 list1 和 list2
以list1中的元素为键,以list2中的元素为值,生成相应的字典
list1 = [1001, 1002, 1003, 1004]
list2 = ['Tom', 'Jerry', 'Spike', 'Tyke']
生成的字典为:
{1001: 'Tom', 1002:'Jerry', .....} 2. 输入任意个学生的姓名,年龄,成绩,每个学生的信息存入字典中,然后放入至列表中,每个学生的信息需要手动输入
当输入姓名为空时结束输入:
如:
请输入姓名: xiaozhang
请输入年龄: 20
请输入成绩: 100
请输入姓名: xiaoli
请输入年龄: 18
请输入成绩: 98
请输入姓名: <回车> 结束输入
要求内部存储格式如下:
[{'name':'xiaozhang', 'age':20, 'score':100},
{'name':'xiaoli', 'age':18, 'score':98}]
打印所有学生的信息如下:
+---------------+----------+----------+
| name | age | score |
+---------------+----------+----------+
| xiaozhang | 20 | 100 |
| xiaoli | 18 | 98 |
+---------------+----------+----------+ 集合练习:
经理有: 曹操,刘备,孙权
技术员有: 曹操,孙权,张飞,关羽
用集合求:
1) 即是经理,也是技术员的有谁?
2) 是经理,但不是技术员的人员都有谁?
3) 是技术员,不是经理的都有谁
4) 张飞是经理吗?
5) 身兼一职的人都有谁?
6) 经理和技术员共有几个人? 练习:
任意输入一些数字,存于列表L中。当输入负数时结束输入
1) 打印这些数的和
2) 打印这些数有多少种(去重)
3) 除重复的数字后,打印这些剩余数字的和 提示,可以用集合去重 练习:
1. 写一个函数myadd, 此函数中的参数列表里有两个参数x, y
此函数的功能是打印 x + y 的和 def myadd(....):
.... # 注: .... 部是是我们要填写代码的地方 myadd(100, 200) # 300
print("ABC", "123") # ABC123 2. 写一个函数 mysum, 传入一个参数x代表终止整数,
打印出 1 + 2 + 3 + 4 + ..... + x的和
def mysum(x):
.... mysum(100) # 5050
mysum(4) # 10 return 语句
语法:
return [表达式]
注: [] 代表可省略
作用:
用于函数中,结束当前函数的执行,返回到调用该函数的地方,同时返回一个对象的引用关系 return 语句说明
1. return 语句后跟的表达式可以省略,省略后相 当于return None
2. 如果函数内没有return 语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None语句)
示例见:
return.py 练习:
1. 写一个函数 mymax, 给函数传递两个参数,返回两个实参中最大的一个
def mymax(a, b):
.... v = mymax(100, 200)
print('v =', v) # v = 200
print(mymax('ABC', 'abc')) # abc 2. 写一个函数 input_number
def input_number():
.... 此函数用来获取用户循环输入的整数,当用户输入负数时结束输入。将用户输入的数字以列表的形式返回,再用内建函数max, min, sum取出户输入的最大值,最小值及和 L = input_number()
print(L) # 打印此列表
print("用户输入的最大数是:", max(L))
print("用户输入的最小数是:", min(L))
print("用户输入的数的和是:", sum(L)) 练习:
1. 写一个函数 print_odd, 打印从begin开始,到end结束(不包含end)内的全部的奇数
def print_odd(begin, end):
.... print_odd(1, 10) # 打印 1 3 5 7 9d
ptint_odd(10, 20) # 打印 11 13 15 17 19 2. 定义两个函数:
sum3(a, b, c) 用于返回三个数的和
pow3(x) 用于返回x的三次方
用以上函数计算:
1. 计算1的立方 + 2的立方 + 3的立方的和
即: 1**3 + 2**3 + 3**3的和
2. 计算1 + 2 + 3 的和的立方,
即:(1+2+3)**3 3. 改写之前的学生信息管理程序
改为两个函数:
1. 写一个函数 input_student() 用于返回学生信息的字典的列表(以前格式一样)
2. 写一个函数 output_student(lst)
此函数传入一个列表lst,即字典的列表
此函数把lst的内容以表格形式打印出来
def input_student():
.... def output_student(lst):
... L = input_student() # 获取学生信息的列表
output_student(L) # 把L 以列表的形式打印 练习:
写一个函数minmax(a, b, c) 有三个参数,这回这三个参数中的最小值和最大值,
要求,形成元组,最小值在前,最大值在后,如: def minmax(a, b, c):
... t = minmax(11, 33, 22)
print(t) # (11, 33) # <<< 打印元组
xiao, da = minmax(6, 5, 4)
print('最小值:', xiao, '最大值:', da) 练习:
写一个函数 myadd, 此函数可以计算两个数的和,也可以计算三个数的和 def myadd(......):
....
print(myadd(10, 20)) # 30
print(myadd(100, 200, 300)) # 600 2. 写一个函数,print_odd, 此函数可以传递一个实参,也可以传递两个实参,当传递一个实参时代表结束值
当传递两个实参时,第一个实参代表起始值,第二个实参代表结束值
打印出以此区间内的全部奇数,不包含结束数: print_odd(10) # 1 3 5 7 9
print_odd(11, 20) # 11 13 15 17 19 练习:
写一个函数, mysum可以传入任意个实参的数字,返回所有实参的和 def mysum(*args):
...
print(mysum(1, 2, 3, 4)) # 10
print(mysum(10, 20, 30)) # 60 练习:
写一个函数,mymax类似于 内键的函数max
详见:
>>> help(max)
仿造 max 写一信mymax函数,功能与max完全相同
(要求不允许调用max函数)
print(mymax([6, 8, 3, 5])) # 8
print(mymax(100, 200)) # 200
print(mymax(1, 3, 5, 9, 7)) # 9 思考题:
查看 >>>help(print)猜想print函烽的参数列表 是如何定义的? 练习:
创建一个全局变量 L = []
写一个函数:
def input_number():
....
此函数每次调用将从键盘读入一些数字追加到列表L中 如:
L = []
def input_number():
....
input_number()
print(L) # [ .... 这些是您从键盘输入的数..] 练习:
1. 写一个函数isprime(x) 判断x是否为素数。如果是素数,返回True,否则返回False 2. 写一个函数prime_m2n(m, n) 返回从m开始,到n结束(不包含n)范围内的素数,返回这些素数的列表并打印
如:
L = prime_m2n(5, 10)
print(L) [5, 7] 3. 写一个函数pimes(n) 返回小于n的全部素数的列表,并打印这些素数
如:
L = primes(10)
print(L) # [2, 3, 5, 7]
1) 打印100 以内的全部素数
2) 打印200 以内的全部素数的和 4. 编写函数 fn(n) 此函数返回下列级数的和:
fn(n) = 1/(1*2) + 1/(2*3) + ....
+ 1/(n*(n-1)) 的和 print(fn(100)) 练习:
写一个计算公式的解释执行器
已知有如下一些函数:
def myadd(x, y):
return x + y
def mysub(x, y):
return x - y
def mymul(x, y):
return x * y
写一个函数,传入字符串,返回相应的函数
def get_op(s):
# 此函数根据字符串来返回相应的函数.
# 如果传入字符串"加" 则返回myadd函数
# .... '乘',则返回mymul函数
... 此处自己实现
主程序如下:
while True:
s = input("请输入计算公式: ")# 10 加 20
L = s.split()
a = int(L[0])
b = int(L[2])
fn = get_op(L[1])
print("结果是:", fn(a, b)) # 30
练习:
写一个函数叫hello(name),部分代码如下:
count = 0
def hello(name):
print('你好', name)
... 此处代码省略,需要同学们自己填写
... 此处代码需要改变全局变量来记录此函数曾经被调用过多少次. hello('小张')
hello('小李')
print('hello 函数被调用', count, '次') # 2次 练习:
1. 写一个lambda 表达式,判断这个数的2次方+1是否能被5整除,如果能被整除返回True, 否则返回False
例:
fa = lambda x: .....
print(fa(2)) # True
print(fa(4)) # False 2. 写一个lambda表达式,求两个变量的最大值
例如:
def mymax(x, y):
...
mymax = lambda ...
print(mymax(100, 200)) # 200 练习:
1. 给出一个整数n,写一个函数myfac来计算n!(n的阶乘)
n! = 1 * 2 * 3 * 4 * ..... * n
如:
print(myfac(5)) # 120
2. 给出一个整数n,写一个函数计算myfn(n):
1 + 2**2 + 3**3 + .... + n**n的和
如:
print(myfn(10)) # ???
3. 完全数:
1 + 2 + 3 = 6 (6为完全数)
1,2,3都为6的因数(因数是能被一个数x整除的整数为y,则y为x的因数)
1 x 6 = 6
2 x 3 = 6
完全数是指除自身以外的所有因数相加之和等于自身的数
求 4~5个完全数并打印出来
答案:
6
28
496
...... 4 实现带有界面的学生信息管理系统
程序启动时先弹出操作菜单:
+-------------------------+
| 1) 添加学生信息 |
| 2) 显示学生信息 |
| 3) 删除学生信息 |
| 4) 修改学生成绩 |
| q) 退出 |
+-------------------------+
请选择: 1
要求 :
每个选择都要有一个函数来实现 练习:
1. 用map函数求:
1**3 + 2**3 + 3 ** 3 + .... 9**3 的和 2. 用map函数求:
1**4 + 2**4 + 3 ** 4 + .... 20**4 的和 提示: sum(map(.....)) 练习:
1. 将 1 ~ 20 的偶数用filter生成可迭代对象后将可迭代对象生成的数放入到列表L中 2. 写一个函数is_prime(x) 判断x是否是素数
用filter函数打印出: 20 ~ 30之间的全部素数 练习:
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
排序的依据为字符串的反序:
'moT' yrreJ ekipS ekyT
结果:
['Spike', 'Tyke', 'Tom', 'Jerry'] 练习:
写函数 mysum(n)用递归方式实现求和
def mysum(n):
# 用递归方式求和
... print(mysum(100)) # 5050 思考题:
已知五位朋友在一起
第五位朋友比第四位朋友大2岁
第四位朋友比第三位朋友大2岁
第三位朋友比第二位朋友大2岁
第二位朋友比第一位朋友大2岁
第一位朋友说它10岁 练习:
1. 已知五位朋友在一起
第五位朋友比第四位朋友大2岁
第四位朋友比第三位朋友大2岁
第三位朋友比第二位朋友大2岁
第二位朋友比第一位朋友大2岁
第一位朋友说它10岁
写程序打印出第五位朋友 和第三位朋友 的年龄
2. 已知有列表:
L = [[3, 5, 8], 10, [[13, 14], 15, 18], 20]
1) 写一个函数print_list(lst) 打印出所有元素
print(L) # 打印 3 5 8 10 13 14 ....
2) 写一个函数sum_list(lst) 返回这个列表中所有元素的和
print(sum_list(L)) # 86
注:
type(x) 可以返回一个变量的类型
如:
>>> type(20) is int # True
>>> type([1, 2, 3]) is list # True 3. 改写之前的学生信息管理程序
要求添加四个功能:
| 5) 按学生成绩高-低显示学生信息 |
| 6) 按学生成绩低-高显示学生信息 |
| 7) 按学生年龄高-低显示学生信息 |
| 8) 按学生年龄低-高显示学生信息 | 练习:
1. 输入一个圆的半径,打印出这个圆的面积
2. 输入一个圆的面积,打印出这个圆的半径 (要求用math模块内的函数和数据实现) 练习:
写一个程序,输入你的出生日期,
1) 算出你已经出生多少天?
2) 算出你出生的那天是星期几? 练习:
1. 请编写函数fun 其功能是计算下列多项式的和:
fn = 1 + 1/1! + 1/2! + 1/3! + 1/4! + .. + 1/n!
(建义用数学模块的factorial实现)
求当n 等于100时,fn的值
看一下fn(100)的值是什么
2. 写一个程序,以电子时钟格式:
HH:MM:SS格式显示时间
要求每隔一秒变化一次 3 写函数f(n)求下多项式的和
fn = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 .... 1/(2*n-1)的和 求当n取值为1000000时,
1) 打印 f(1000000) 的值
2) 打印 f(1000000) * 4的值,看看是什么 练习:
1. 猜数字游戏
随机生成一个 0~100之间的一个整数,用变量x绑定
让用户输入一个数y,输出猜数字的结果:
1) 如果y大于x则提示: "您猜大了"
2) 如果y小于x则提示: "您猜小了"
3) 如果y等于生成的数x,则提供示用户"恭喜您猜对了 "并退出猜数字
循环重复上述步聚,直到猜对为止。
猜对了,显示用户猜数字的次数,然后退出程序 练习:
1. 写一个闹钟程序,启动时设置定时时间,
到时间后打印一句"时间到...." 然后退出程序 2. 模拟斗地主发牌,扑克牌共54张
黑桃('\u2660'), 梅花('\u2663'), 方块('\u2665'), 红桃('\u2666')
A2-10JQK
大王、小王
三个人玩,每人发17张牌,底牌留三张
输入回车, 打印出第1个人的17张牌
输入回车, 打印出第2个人的17张牌
输入回车, 打印出第3个人的17张牌
输入回车, 打印三张底牌
3. 修改学生信息管理程序,将原student_info.py 拆分为模块
要求:
1. 主事件循环放在main.py中
2. show_menu 函数放在menu.py中
3. 与学生操作相关的函数放在 student_info.py中 练习:
写一个函数 get_score() 来获取学生成绩,
要求用户输入 1~100的整数,输果输入出现异常,返此函数返回0,
否则返回用户输入的成绩
示例:
def get_score():
...
score = get_score()
print("学生的成绩是:", score) python中全部的错误类型:
参见文档:
python_base_docs_html/Python全部的异常类型.html 练习:
写一个函数 get_age()用来获取一个人的年龄信息
此函数规定用户只能输入1~140之间的整数,如果用户输入其它的数则直接触发ValueError类型的错误通知
如果用户输入的年龄大于140,则触发
ValueError("年龄超出了正常值")
如果用户输入的年龄小于1,则触发
ValueError("年龄太小...")
def get_age():
...
try:
age = get_age()
print("用户输入的年龄是:", age)
except ValueError as err:
print('用户输入的不是1~140的整数,获取年龄失败')
print("原因是:", err) 练习:
1. 一个球从100米高空落下,每次落地后反弹高度是原高度的一半,再落下,
1) 写程序算出皮球在第10次落地后反弹高度是多高?
2) 打印出球共经过多少米的路程 2. 分解质因数, 输入一个正整数,分解质因数,
如:
输入: 90
则打印:
'90=2*3*3*5'
(质因数是指最小能被原数整除的素数(不包括1)) 3. 修改原学生信息管理程序,加入异常处理语句,让程序在任何情况下都能够按逻辑正常执行.
例如:
输入成绩和年龄时,如果用户输入非法字符串也不会导致程序崩溃 练习:
有一个集合:
s = {'唐僧', '悟空', '八戒', '沙僧'}
用 for语句来遍历所有元素如下:
for x in s:
print(x)
else:
print('遍历结束')
请将上面的for语句改写为 用while语句和迭代器实现 练习:
写一个生成器函数 myeven(start, stop)
此函数用来生成从 start开始到stop结束(不包含)区间内的一系列偶数
def myeven(start, stop):
.... evens = list(myeven(10, 20))
print(evens) # [10, 12, 14, 16, 18]
for x in myeven(21, 30):
print(x) # 22, 24, 26, 28 L = [x**2 for x in myeven(3, 10)]
print(L) # 16 36 64 练习:
已知有一个列表L
L = [2, 3, 5, 7]
用生成器表达式从此列表中拿到数,生成 列表中数据的平方 gen = ...... # 此处用生成器表达式实现
L2 = list(gen) # L2 = [4, 9, 25, 49] 思考:
L = [2, 3, 5, 7]
L2 = [x ** 2 for x in L] # 列表推导式
it = iter(L2)
print(next(it)) # 4
L[1] = 10
print(next(it)) # 9 L = [2, 3, 5, 7]
G3 = (x ** 2 for x in L) # 生成器表达式
it = iter(G3)
print(next(it)) # 4
L[1] = 10
print(next(it)) # 100 练习:
写一个程序,读入任意行的文字,当输入空行时结束输入
打印带有行号的输入结果:
如:
请输入: hello<回车>
请输入: world<回车>
请输入: tarena<回车>
请输入: <回车> # 直接回车结束输入
输出如下:
第1行: hello
第2行: world
第3行: tarena 练习:
写一个程序,从键盘输入一段字符串存入s变量
1. 将此字符串转为字节串用变量b绑定,并打印出b
2. 打印字符串s的长度和字节串b的长度
3. 将b字节串再转换为字符串用变量s2 绑定,判断 s2 和 s是否相同? 练习:
1. 写一个生成器函数primes生成素数,
此生成器函数为 primes(begin, end)
如: [x for x in primes(10, 20)] 将得到列表
[11, 13, 17, 19]
2. 写一个生成器函数,生成斐波那契数列的前n个数
1 1 2 3 5 8 13
def fibonacci(n):
...
yield...
1) 输出前20个数:
for x in fibonacci(20):
print(x)
2) 打印前40个数的和:
print(sum(fibonacci(40)))
3. 写程序打印杨辉三角(只打印6层)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1 练习:
自己写一个文件 'info.txt' 内部存一些文字信息
如:
张三 20 100
李四 21 96
小王 22 98
写程序将这些数据读取出来,打印到终端上 练习:
1. 写程序,循环输入很多个人的姓名,电话号码,
当输入结束后将这些信息存入到文件phonenumber.txt中
(建议先用列表暂存数据,格式自己定义) 2. 写程序,将phonenumber.txt文件中的数据读取出来.
再用以下格式打印出来:
如:
小张 的电话是 13888888888
小李 的电话是 13999999999 练习:
1. 写程序实现复制文件的功能
要求:
1. 要考虑特大文件问题
2. 要关闭文件
3. 要能复制二进制文件
如:
请输入源文件路径名: /home/tarena/xxx.tar.gz
请输入目标文件路径名: ./a.tar.gz
显示:
文件已成功复制 2. 修改学生信息管理程序,要求加入两个功能:
9) 保存信息到文件(si.txt)
10) 从文件中读取数据(si.txt) 练习:
自己写一个'人'类: Human
class Human:
def set_info(self, name, age, address='未知'):
'''此方法用来给人对象添加'姓名', '年龄', '家庭住址'三个属性'''
... # << 此处自己实现
def show_info(self):
'''显示此人的全部信息'''
... # 此处自己实现
如:
h1 = Human()
h1.set_info('小张', 20, '北京市朝阳区')
h2 = Human()
h2.set_info('小李', 18)
h1.show_info() # 小张今年 20 岁,家庭住址:北京市朝阳区
h2.show_info() # 小李今年 18 岁,家庭住址:末知 练习:
写一个Student类
1) 为该类添加初始化方法, 实现在创建对象时自动设置
'姓名','年龄', '成绩' 属性
2) 添加set_score方法能修改成绩信息
3) 添加show_info方法打印学生对象的信息 如:
class Student:
def __init__(...):
...
... s1 = Student('小王', 15, 59)
s1.show_info() # 小王 今年 17 岁, 成绩是: 59
s1.set_score(80)
s1.show_info() # 小王 今年 17 岁, 成绩是: 80 面向对向的综合示例:
有两个人(Human):
1.
姓名: 张三
年龄: 35
2.
姓名: 李四
年龄: 8
行为:
1. 教别人学东西 teach
2. 赚钱 works
3. 借钱 borrow
事情:
张三 教 李四 学 python
李四 教 张三 学 跳皮筋
张三 上班赚了 1000 元钱
李四 向 张三 借了 200 元钱
打印张三的信息: 35岁 的 张三 有钱 800元, 它学会跳皮筋
打印李四的信息: 8岁 的 李四 有钱 200元, 它学会python
练习:
修改原来的学生信息管理程序,将原来字典来存储学生信息,
现改为用对象来存储学生信息
# file : student.py
class Student:
def __init__(self, n, a, s):
.... L = []
# L.append({...}) 改为对象
L.append(Student('xiaozhang', 20, 100)) (要求类Student 要写在模块 student.py中) 练习:
用类来描述一个学生的信息(可以修改之前写的Student类)
class Student:
.... 此处自己实现 学生信息有:
姓名, 年龄, 成绩 将一些学生的对象存于列表中,可以任意添加和删除学生信息
1) 打印出学生的个数
2) 打印出所有学生的平均成绩
3) 打印出所有学生的平均年龄 思考:
list类里只有一个append向末尾加一个元素的方法,但没有向列表头部添加元素的方法,试想能否为列表在不改变原有类的基础上添加一个insert_head(n) 方法,实现在列表的头部(前部)添加元素
如:
class MyList(list):
def insert_head(self, n):
... # 需要自己添加代表 myl = MyList(range(3, 6))
print(myl) # [3, 4, 5]
myl.insert_head(2)
print(myl) # [2, 3, 4, 5]
myl.append(6)
print(myl) # [2, 3, 4, 5, 6] 练习:
1. 看懂学生管理程序,每一步做的事情及思想
2. 把同学们自己的学生信息管理程序用Student学生对象来存储信息;要求,不要在外部直接操作学生的属性,所有操作行为用方法来代替 练习:
写一个类Bicycle类 ,有 run方法.调用时显示骑行里程km
class Bicycle:
def run(self, km):
print('自行车骑行了', km, '公里')
再写一个类EBicycle(电动自行车类), 在Bicycle类的基础上添加了电池电量 volume 属性, 有两个方法:
1. fill_charge(self, vol) 用来充电, vol为电量
2. run(self, km) 方法每骑行10km消耗电量1度,同时显示当前电量,当电量耗尽时调用 父类的run方法继续骑行 b = EBicycle(5) # 新买的电动有内有5度电
b.run(10) # 电动骑行了10km还剩 4 度电
b.run(100) #电动骑行了40km,还剩0度电,其余60用脚登骑行
b.fill_charge(10) # 又充了10度电
b.run(50) # 骑行了50公里剩5度电 练习:
1. 修改原有的学生信息管理系统, 将学生对象的,全部属性
都变为私有属性,不让外部直接访问来实现封装 2. 写一个列表类MyList实现存储整数列表,写类的定义如下:
class MyList:
def __init__(self, iterator):
self.data = ...
让此类的对象能用for语句进行迭代访问 L = MyList(range(5))
print(L)
L2 = [x ** 2 for x in L]
print(L2) # [0, 1, 4, 9, 16] 3. 写一个类Fibonacci 实现迭代器协议 ,此类的对象可以作为可迭代对象生成相应的斐波那契数
1 1 2 3 5
class Fibonacci:
def __init__(self, n) # n代表数据的个数
...
...
实现如下操作:
for x in Fibonacci(10):
print(x) # 1 1 3 5 8 ....
L = [x for x in Fibonacii(50)]
print(L)
F = fibonicci(30)
print(sum(F)) 练习:
1. 实现两个自定义的列表相加
class MyList:
.... 此处自己实现
L1 = MyList([1, 2, 3])
L2 = MyList(range(4, 7))
L3 = L1 + L2
print(L3) # MyList([1, 2, 3, 4, 5, 6])
L4 = L2 + L1
print(L4) # MyList([4, 5, 6, 1, 2, 3])
L5 = L1 * 2
print(L5) # MyList([1, 2, 3, 1, 2, 3]) 练习:
实现有序集合类 OrderSet() 能实现两个集合的交集 &,全集 |,
补集 - 对称补集 ^, ==/!= , in/ not in 等操作
要求集合内部用 list 存储
class OrderSet:
...
s1 = OrderSet([1, 2, 3, 4])
s2 = OrderSet([3, 4, 5])
print(s1 & s2) # OrderSet([3, 4])
print(s1 | s2) # OrderSet([1, 2, 3, 4, 5])
print(s1 ^ s2) # OrderSet([1, 2, 5])
if OrderSet([1, 2, 3]) != OrderSet([3, 4, 5]):
print("不相等")
if s2 == OrderSet(3, 4, 5):
print('s2 == OrderSet(3, 4, 5) is True')
if 2 in s1:
print("2在 s1中")
Python全栈工程师 (exercises)的更多相关文章
- Python全栈工程师(装饰器、模块)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 全栈工程师 Python人工智能从入门到精通 装饰器 decorators(专业提高篇) 装饰 ...
- Python全栈工程师(递归函数、闭包)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 全栈工程师 Python人工智能从入门到精通 函数式编程: 是指用一系列函数解决问题 每一个函数完成细 ...
- 【目录】python全栈工程师
第一阶段:Python 语言核心编程1. Python核心 -- 2048 游戏核心算法2. 面向对象 -- 天龙八部游戏技能系统3. Python高级 -- 集成操作框架项目:2048游 ...
- Python全栈工程师之从网页搭建入门到Flask全栈项目实战(1) - ES6标准入门和Flex布局
1.简述 1.什么是ES6?ES6, 全称 ECMAScript 6.0,是 JavaScript 的下一个版本标准,2015年6月份发版.ES6的主要目的是为了解决 ES5 的先天不足. 2.了解E ...
- Python全栈工程师(exercises)
# # 练习: # # 1. 用map函数求: # # 1**3 + 2**3 + 3 ** 3 + .... 9**3 的和 def add_(x): return x ** 3 print(sum ...
- Python全栈工程师(Python3 所有基础内容 0-0)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 Python一个月的基础语法 基本就到这咯 接下来是数据 ...
- Python全栈工程师(包、模块 的导入)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想 为了信仰 Python人工智能从入门到精通 $ pip3 install tenso ...
- Python全栈工程师(Python3 所有基础内容 0-0)
转发:https://www.cnblogs.com/ParisGabriel/p/9388030.html statements 语句print 输出quit() 退出exit() 退出ct ...
- Python全栈工程师(每周总结:3)
ParisGabriel 每天坚持 一天一篇 点个订阅吧 灰常感谢 当个死 ...
随机推荐
- 去重算法-hash-set
Well, as Bavarious pointed out in a comment, Apple's actual CoreFoundation source is open and availa ...
- react里面怎么引入样式
模块样式 在刚开始构建好框架的时候,准备开始写业务,在第一个页面的时候就会碰到怎么引入样式的问题,踩过一些坑,不是使用style,头部也不需要另外取名,直接引入css就可以,引入方式是这样 <d ...
- CentOS 6下PXE+Kickstart无人值守安装操作系统
一.简介1.1 什么是PXEPXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作 ...
- 【转】Android开发学习笔记(一)——初识Android
对于一名程序员来说,“自顶向下”虽然是一种最普通不过的分析问题和解决问题的方式,但其却是简单且较为有效的一种.所以,将其应用到Android的学习中来,不至于将自己的冲动演变为一种盲目和不知所措. 根 ...
- 2017.11.4 JavaWeb-----基于JavaBean+JSP求任意两数代数和(改进的在JSP页面中无JSP脚本代码的)+网页计数器JavaBean的设计与使用
修改后的JSP中不含有JSP脚本代码这使得JSP程序的清晰性.简单 1.设计JavaBean 的Add.java 类 package beans; public class Add { private ...
- Java中阻塞队列的使用
http://blog.csdn.net/qq_35101189/article/details/56008342 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如 ...
- AngularJS 重复HTML元素
data-ng-repeat指令会重复一个HTML元素 <!DOCTYPE html><html><head><meta http-equiv="C ...
- BZOJ1046: [HAOI2007]上升序列(LIS)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5740 Solved: 2025[Submit][Status][Discuss] Descript ...
- mybatis中oracle转mysql
刚来公司实习,遇到的第一个任务就是这个,简单记录一下思路过程.人菜的很,没啥参考价值. 测试时: 将现有的oracle库转为mysql: 用的Navicat自带数据传输功能,简单粗暴 出现的问题: 1 ...
- Maven - 修改本地仓库位置
默认的本地仓库是在:当前的用户目录/.m2/repository 修改位置: 1. 打开maven的conf/settings.xml,找到如下图这一段: 2. 把<localRepositor ...