前言
本文只是简单的整理了一下课后习题的编程题,具体的填空、选择、判断可以见:Python快速编程入门课后习题答案
第一章
1、编写一个Python程序,输出如下图效果。
++++++++++
+ +
++++++++++
print("+++++++++++")
print("+ +")
print("+++++++++++")
2、编写一个Python程序,输出如下语句。
学Python,来传智播客黑马程序员
学Python,来传智播客黑马程序员
学Python,来传智播客黑马程序员
学Python,来传智播客黑马程序员
学Python,来传智播客黑马程序员
print("学Python,来传智播客黑马程序员")
print("学Python,来传智播客黑马程序员")
print("学Python,来传智播客黑马程序员")
print("学Python,来传智播客黑马程序员")
print("学Python,来传智播客黑马程序员")
第二章
1、输入直角三角形的两个直角边的长度a、b,求斜边c的长度。
import math
a=float(input("请输入斜边 1 的长度")) #输入实数
b=float(input("请输入斜边 2 的长度")) #输入实数
c=a*a+b*b #计算,得到的是斜边的平方
c=math.sqrt(c) #开方,得到的是斜边长
print("斜边长为:",c) #显示,一项是字符串,一项是 c 表示的斜边长
2、编写一个程序,用于实现两个数的交换。
# 用户输入
x = input('输入 x 值: ')
y = input('输入 y 值: ')
# 不使用临时变量
x,y = y,x
print('交换后 x 的值为: {}'.format(x))
print('交换后 y 的值为: {}'.format(y))
第三章
1、编写一个程序,使用for循环输出0~10之间的整数。
for i in range(1,11):
print(i)
2、编写一个程序,判断用户输入的数是正数还是负数。
a=int(input("请输入一个数:"))
if a>0:
print("a是一个正数")
elif a<0:
print("a是一个负数")
else:
print("a等于0")
3、编写一个程序,输出九九乘法表。
i=1
while i<10:
j=1
while j<=i:
j+=1
print("%d*%d=%-2d "%(i,j,i*j),end='')
print("\n")
i+=1
第四章
1、接收输入的一行字符,统计出字符串中包含数字的个数。
myStr = input("请输入任意字符串:")
num = 0
for s in myStr:
if s.isdigit():
num += 1
print(num)
2、请输入星期几的第1个字母,用来判断是星期几,如果第1个字母一样,则继续判断第2个字母,以此类推。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
while True:
myStr = input("请输入任意一个字母:")
upMyStr = myStr.upper()
for weekS in week:
if upMyStr == weekS[0]:
if weekS.startswith("M"):
print("星期一")
elif weekS.startswith("W"):
print("星期三")
elif weekS.startswith("F"):
print("星期五")
elif weekS.startswith("T") or weekS.startswith("S"):
secondStr = input("请再输入任意一个字母:")
newStr = upMyStr+secondStr
print(newStr)
for weekStr in week:
if weekStr.find(newStr,0,2) != -1:
if newStr == "Tu":
print("星期二")
elif newStr == "Th":
print("星期四")
elif newStr == "Sa":
print("星期六")
elif newStr == "Su":
print("星期日")
break
break
3、编写一个程序,计算字符串中子串出现的次数。
str = "Hello,welcome to itheima!!"
print(str.count("o"))
第五章
1、编写一个函数,用于判断用户输入字符串是否由小写字母和数字构成。
def message():
myStr = input("请输入密码,只能为小写字母和数字:")
if myStr.isalnum() and myStr.lower() == myStr:
print("符合要求")
else:
print("不符合要求")
2、请根据下述需求,编写一个程序。
用户输入一个字符串,将下标为偶数的字符提出来合并为一个新的字符串A,再将下标为奇数的字符提出来合并成为一个新的字符串B,再将字符串A和B连接起来并且输出。
arr = []
evenStr = ""
oddStr = ""
message = input("请输入任意字符串:")
for string in message:
arr.append(string)
for eStr in (arr[::2]):
evenStr = evenStr+eStr
for oStr in (arr[1::2]):
oddStr = oddStr+oStr
print(evenStr+oddStr)
3、请编写一个程序,用于统计字符串中每个字母出现的次数(字母忽略大小写,a和A看做是一个字母),统计出的结果,请按照[‘a’:3,’b’:2]的格式输出。
arr = []
def count():
myStr = input("请输入只包含字母的字符串:")
if myStr.isalpha():
newStr = myStr.lower()
for string in newStr:
arr.append(string)
a = {}
for i in arr:
if arr.count(i) >= 1:
a[i] = arr.count(i)
print(a)
else:
print("输入的内容有误")
count()
4、请根据下列需求,编写一个程序。
用户输入一个字符串,请将字符串中所有字母全部后移动一位,最后一个字母放到字符串的开头,最后将新的字符串输出。
arr = []
result = ""
myStr = input("请输入字符串:")
for string in myStr:
arr.append(string)
last = arr[-1]
arr.remove(last)
arr.insert(0,last)
for new in arr:
result = result + new
print(result)
5、假设有个列表存储奇数个数字,请编写程序,输出中间位置的数字。
arr = []
n = int(input("请输入列表元素的个数(奇数):"))
for i in range(n):
num = int(input("请输入第%d个数:"%(i+1)))
arr.append(num)
arr.sort()
print("该列表中间位置的数字为:",arr[n//2])
6、已知info=[1,2,3,4,5],请通过两种编程方法,将列表变成info=[5,4,3,2,1]。
#第一种:
arr = [1,2,3,4,5]
arr.reverse()
print(arr)
#第二种:
arr = [1,2,3,4,5]
arr.sort(reverse=True)
print(arr)
7、请编写一个函数满足下列需求:
用户输入n,然后输入n个整数到列表中,列表中的n个整数需要使用冒泡进行排序,并将排序后的结果输出。
arr = []
length = int(input("请输入数字的总个数:"))
i = 0
while i < length:
num = int(input("输入第%d个数字:"%(i+1)))
arr.append(num)
i+=1
print("排序前:%s"%arr)
# 对列表排序
for i in range(length):
flag = 0
for j in range(1,length):
if arr[j-1] > arr[j]:
arr[j-1],arr[j] = arr[j],arr[j-1]
flag = 1
if not flag:
break
print("排序后:%s"%arr)
8、请编写一个程序,实现删除列表中重复元素的功能。
arr = []
length = int(input("请输入列表的总个数:"))
i = 0
while i < length:
element = input("输入第%d个元素:"%(i+1))
arr.append(element)
i+=1
# 列表转为集合
newList = set(arr)
print(newList)
9、假设有两个3×3的矩阵,请编写一个程序,计算这两个矩阵的和并输出。
def add(a, b):
# 下面两行保证输入的a和b是维数相同的矩阵,根据实际情况不要也可以
assert (len(a) == len(b))
assert (all([len(a[i]) == len(b[i]) == len(a[0]) for i in range(len(a))]))
i, j = len(a), len(a[0])
c = [[0] * j] * i
for m in range(i):
for n in range(j):
c[m][n] = a[m][n] + b[m][n]
return c
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
c = add(a, b)
print(c)
10、请编写一个程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学生学号从小到大输出学生的信息。
dic = {}
i=0
while i<3:
number = input("输入学生学号:")
name = input("输入学生姓名:")
dic.__setitem__(number,name)
i+=1
print("排序前:%s"%dic)
def dict2list(dic:dict):
''' 将字典转化为列表 '''
keys = dic.keys()
vals = dic.values()
lst = [(key, val) for key, val in zip(keys, vals)]
return lst
new = sorted(dict2list(dic), key=lambda x:x[0], reverse=False)
print("排序后:%s"%new)
11、已知一个字典包含若干员工信息(姓名和性别),请编写一个函数,删除性别为男的员工信息。
def delMale(dict):
keys = []
values = []
for (key,value) in dict.items():
keys.append(key)
values.append(value)
for value in values:
if value == 0:
index = values.index(value)
arrKey = keys[index]
del dict[arrKey]
values[index] = 3
keys[index] = "占位"
dic = {"小明":0, "小红":1,"小兰":1,"小白":0}
print("删除前:%s"%dic)
delMale(dic)
print("删除后:%s"%dic)
12、已知一个列表存储了多个整数,请编写函数,删除列表中的素数。
# 错误的版本
arr = [12,3,37,7,91,67,27,45,6]
def delPrime(arr):
for element in arr:
# 质数大于 1
if element > 1:
# 查看因子
for i in range(2, element):
if (element % i) == 0:
break
else:
arr.remove(element)
delPrime(arr)
print(arr)
# 正确的版本
arr1 = [12,3,37,7,91,67,27,45,6]
arr2 = [12,3,37,7,91,67,27,45,6]
def delPrime(arr1):
for element in arr2:
# 质数大于 1
if element > 1:
# 查看因子
for i in range(2, element):
if (element % i) == 0:
break
else:
arr1.remove(element)
delPrime(arr1)
print(arr1)
第六章
1、定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。
例如:
请输入第1个整数:10
请输入第2个整数:15
请输入第3个整数:20
其中最大值为:20
def getMax():
num1 = int(input("请输入第1个整数:"))
num2 = int(input("请输入第2个整数:"))
num3 = int(input("请输入第3个整数:"))
temp = 0 # 临时变量,存放中间产生的第2大数值
if num1 > num2:
temp = num1
else:
temp = num2
if temp>num3:
return "其中最大值为:"+ str(temp)
else:
return "其中最大值为:"+ str(num3)
maxValue = getMax()
print(maxValue)
2、编写函数,求出“1/(1×2)-1/(2×3)+1/(3×4)-1/(4×5)+···”前n项的和,函数以n为参数,它是用户输入的。
def sum(n):
res = 0
while n >= 1:
if n%2 == 0:
res -= 1.0/(n*(n+1))
else:
res += 1.0/(n*(n+1))
n-=1
return res
num = int(input("请输入一个整数:"))
print(sum(num))
3、回文数是一个正向和逆向都相同的整数,如 123454321、9889。编写函数判断一个整数是否是回文数。
def is_palindrome(n):
n = str(n)
m = n[::-1]
return n == m
result = is_palindrome(1247321)
print(result)
4、编写函数,判断输入的三个数字是否能构成三角形的三个边。
def sjx(a, b, c):
if (a + b > c and a + c > b and b + c > a):
return "能构成三角形"
else:
return "不能构成三角形"
result1 = sjx(3, 4, 5)
print(result1)
result2 = sjx(1, 1, 2)
print(result2)
5、编写函数,求两个正整数的最小公倍数。
# 定义函数
def lcm(x, y):
# 获取最大的数
if x > y:
greater = x
else:
greater = y
while(True):
if((greater % x == 0) and (greater % y == 0)):
lcm = greater
break
greater += 1
return lcm
# 获取用户输入
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
print( num1,"和", num2,"的最小公倍数为", lcm(num1, num2))
第七章
1、已知有个列表[1,2,3,4,5],让列表的每个元素加1,把结果不能被2整除的元素筛选出来。
result = filter(lambda x:(x+1)%2, [1, 2, 3, 4, 5])
print(result)
第八章
1、读取一个文件,显示除了以#开头的行以外的所有行。
new = []
f = open('itheima.txt', 'r')#首先要有这个函数
contents = f.readlines()
for ele in contents:
if ele.startswith('#') == False:
print(ele)
f.close()
2、制作一个“密码簿”,其可以存储一个网址(如www.itcast.cn)和一个密码(如123456),请编写程序完成这个“密码簿”的增删查改功能,并且实现文件存储功能。
# 密码薄
passwordBook = {}
def add(password, value):
if password not in passwordBook.keys():
passwordBook[password] = value
save()
else:
print("该密码已存在")
def delete(password):
if password in passwordBook.keys():
del passwordBook[password]
print(passwordBook)
save()
else:
print("该密码不存在")
def modify(password, newValue):
if password in passwordBook.keys():
passwordBook[password] = newValue
print(passwordBook)
save()
else:
print("该密码不存在")
def find(value):
if value in passwordBook.values():
print("该网址存在")
else:
print("该网址不存在")
def save():
f = open("password.txt","w")
f.write(str(passwordBook))
f.close()
def printInfo():
print("密码簿的功能如下:")
print("1.添加")
print("2.删除")
print("3.修改")
print("4.查找")
i = 0
while i<5:
printInfo()
num = int(input("请输入要选择的功能:"))
if num==1:
web = input("请输入存入的网址:")
password1 = input("请输入密码:")
add(password1, web)
print(passwordBook)
elif num==2:
password2 = input("请输入密码:")
delete(password2)
elif num==3:
password3 = input("请输入密码:")
value3 = input("请输入新的网址:")
modify(password3,value3)
elif num==4:
value4 = input("请输入要查找的网址:")
find(value4)
i+=1
3、已知文本文件中存放了若干数字,请编写程序读取所有的数字,排序以后进行输出。
f = open("itheima.txt","r")#首先要有这个文件
content = list(eval(f.read()))
content.sort()
print(content)
4、打开一个英文的文本文件,将该文件中的每一个英文字母加密后写入到一个新的文件。加密的方法是:将A变成B,B变成C,······,Y变成Z,将Z变成A;a变成b,b变成c,······,y变成z,z变成a,其他字符不变化。
f = open("itheima.txt","r")
content = f.read()
newStr = ""
for string in content:
temp = ord(string)
if temp in range(65,91):
if temp == 90:
char1 = chr(temp-25)
newStr += char1
else:
char2 = chr(temp+1)
newStr += char2
elif temp in range(97,123):
if temp == 122:
char3 = chr(temp-25)
newStr += char3
else:
char4 = chr(temp + 1)
newStr += char4
else:
newStr = newStr+string
f.close()
f2 = open("itheima-加密后.txt","w")
f2.write(newStr)
f2.close()
5、打开一个英文文本文件,编写程序读取其内容,并把其中的大写字母变成小写字母,小写字母变成大写字母。
f = open(r'd:\1.txt','r')
s = f.readlines()
f.close()
r = [i.swapcase() for i in s]
f = open(r'd:\2.txt','w')
f.writelines(r)
f.close()
6、编写程序,把包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。
import pickle
d = {'张三':98,'李四':90,'王五':100}
print(d)
f = open('score.dat','wb')
pickle.dump(1,f)
pickle.dump(d,f)
f.close
f = open('score.dat','rb')
pickle.load(f)
d = pickle.load(f)
f.close()
print(d)
第九章
1、假设成年人的体重和身高存在此种关系:
身高(厘米)-100=标准体重(千克)
如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”,其他显示“体重超标”或者“体重不超标”。编写程序,能处理用户输入的异常,并且使用自定义异常类来处理身高小于30cm,大于250cm的异常情况。
class HeightException(Exception):
pass
try:
height = int(input("请输入您的身高:"))
if height<30 or height>250:
raise HeightException
weight = int(input("请输入您的体重:"))
weightS = height-100
if weight > weightS and weight-weightS < 0.05*weightS:
print("体重达标")
elif weight < weightS and weightS-weight < 0.05*weightS:
print("体重达标")
else:
print("体重不达标")
except HeightException:
print("您输入的身高有误")
2、录入一个学生的成绩,把该学生的成绩转换为A优秀、B良好、C合格、D不合格的形式,最后将该学生的成绩打印出来。要求使用assert断言处理分数不合理的情况。
try:
score = int(input("请输入学生的成绩:"))
if score>=90 and score<=100:
print("A:优秀")
elif score>=80 and score<90:
print("B:良好")
elif score>=60 and score<80:
print("C:合格")
else:
assert score>60,"D:不及格"
except Exception as result:
print("低于60分:\n",result)
第十章
1、建一个模块文件。在该文件中,定义一个函数,用于交换两个数的值。
def changeNum1AndNum2(num1, num2):
temp = num1
num1 = num2
num2 = temp
return (num1, num2)
第十一章
1、设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证类的功能。
class Circle:
def __init__(self,tup, radius, color):
self.center = tup
self.radius = radius
self.color = color
def perimeter(self):
return 3.14 * 2 * self.radius
def area(self):
return 3.14 * self.radius * self.radius
circle = Circle((0,0),5,"蓝色")
print(circle.perimeter())
print(circle.area())
2、设计一个课程类,包括课程编号、课程名称、任课教师、上课地点等属性,把上课地点变量设为私有的,增加构造方法和显示课程信息的方法。
class Curriculum:
def __init__(self):
self.number = 1001
self.name = "语文"
self.teacher = "小明"
self.__address = "2号教学楼3层305室"
def __str__(self):
return """
课程编号:%d
课程名称:%s
任课教师:%s
上课地点:%s
"""%(self.number,self.name,self.teacher,self.__address)
curri = Curriculum()
print(curri)
第十二章
1、设计一个表示学生的类:Student,该类的属性有)name(姓名,age(年龄),scores(成绩,包含语文、数学和英语三科成绩,每科成绩的类型为整数),另外此类还有3个方法。
(1)获取学生的方法:get_name(),返回类型为str。
(2)获取年龄的方法:get_age(),返回类型为int。
(3)返回3门科目中最高的分数:get_course(),返回类型为int。
class Student(object):
# 构造方法
def __init__(self, name, age, scores):
self.__name = name # 姓名
self.__age = age # 年龄
self.__scores = scores # 分数
def get_name(self):
return self.__name
def get_age(self):
return self.__age
def get_course(self):
return max(self.__scores)
stu = Student('小丸子', 18, [89, 90, 91])
print("姓名:%s"%(stu.get_name()))
print("年龄:%s"%(stu.get_age()))
print("最高分:%s"%(stu.get_course()))
2、设计一个表示动物的类:Animal,其内部有一个color(颜色)属性和call(叫)的方法。再设计一个表示Fish(鱼)类,该类中有tail(尾巴)和color属性,以及一个call(叫)方法。
提示: 让Fish类继承自Animal类,重写init和call方法。
class Animal(object):
def __init__(self, color):
self.color = color #颜色
def call(self):
print("动物叫")
class Fish(Animal):
def __init__(self, color):
super().__init__(color)
self.tail = True
def call(self):
print("-%s的鱼在吐泡泡-"%self.color)
fish = Fish("蓝色")
fish.call()