以题代练掌握Python知识点,在代码中理解思路,不做过多叙述。
1.实数根
题目:设a、b、c为整数,有一元二次方程ax^2+bx+c=0(a≠0),当b2-4ac≥0,方程有两个不同的实数根,当b2-4ac<0时,方程无实数根。当有两个不同实数根时,输出实数根;当不存在实数根时,输出“方程无实数根”
思路:作简单的判断即可。
from math import sqrt a=int(input("a:")) b=int(input("b:")) c=int(input("c:")) d=b*b-4*a*c if(d<0): print("方程无实数根") elif(d>0): print((-b+sqrt(d))/2*a,(b+sqrt(d))/2*a)
2.奇偶校验码
奇偶校验码是一种增加二进制传输系统可靠性的简单且广泛采用的方法,该方法通过增加一个校验位使得传输的二进制码中“1”的个数恒为奇数或偶数,因此该校验码也分为“奇校验”和“偶校验”。
“奇校验”的原理:在发送端发送的每个字节二进制码后增加一个校验位(0或1),使得“1”的个数为奇数;接收端接收并统计每个字节及其校验位中“1”的个数,若为偶数,则意味着传输过程中存在差错。
例如:
10110 则对于奇校验来说,校验位为0,传输错误
根据以上原理,编写一个Python程序,对接收到的9位二进制编码进行“奇校验”,判断其传输的正误,若判断正确则将前一个字节的编码转成十六进制并输出。
思路:做简单的判断,再针对每个情况单独分析。
s=input("输入9位二进制编码:") count=0 for i in s: if i=='1': count+=1 if count%2==0: flag=1 #如果偶数个1.则奇校验位为1 print("传输正确") x=hex(int(s,2)).replace("0x","") print(x) else: flag=0 print("传输错误") ''' int(s, 2):将二进制字符串 s 转换为对应的整数,其中 2 表示这是一个二进制数。 hex(...):这一步将上一步得到的整数转换为十六进制表示的字符串。 .replace("0x", ""):.replace 方法用于去掉字符串中的前缀 "0x",这是因为在 Python 中,使用 hex 函数得到的十六进制字符串通常以 "0x" 开头(例如,"0x2B") '''
3.密码强度
编写python程序,实现如下功能:输入要检测的密码,输出密码强度结果。
密码字符分为数字字符、字母和其他符号三类。
密码强度的检测方法为:若密码位数少于8位,则不进行强度检测,给出提示“密码位数不能少于8位,请重新输入!”。
若密码位数在8位及以上,则进行强度检测:若密码字符属于同一类字符,则密码强度为“弱”;
若密码字符属于不同的二类字符,则密码强度为“中等”;
若密码字符属于不同的三类字符,则密码强度为“强”。
例如:
请输入要检测的密码:12abcd5!
输出:强
思路:做条件判断,比上面两题稍微复杂一点。
s = input("请输入要检测的密码:") count = shuzi = zimu = other = 0 for i in s: if i != "": count += 1 if count < 8: print("密码位数不能少于8位,请重新输入!") else: for i in s: if i.isdigit(): # 使用字符串的内置方法 isdigit() 和 isalpha() 来判断字符是否是数字或字母 shuzi = 1 elif i.isalpha(): zimu = 1 else: other = 1 if shuzi + zimu + shuzi == 1: print("弱") if shuzi + zimu + shuzi == 2: print("中") if shuzi + zimu + shuzi == 3: print("强")
4.大于平均成绩
题目:输入一组学生成绩,请输出大于平均成绩的分数。
例子:90 88 83 77 96
输出样例:大于平均成绩的分数:90 88 96
思路:累加算出总数及平均分,进行比较后循环输出。
要注意的是在输入时需将字符串更改为数值
scores_string = input("请输入学生成绩: ") scores = [int(x) for x in scores_string.split()] sum = 0 for score in scores: sum += score average = sum / len(scores) print("大于平均成绩的分数: ", end="") for score in scores: if score > average: print(score, end=" ")
scores = [int(x) for x in scores_str.split()]
是一个列表推导式
scores_str.split()
:这将把输入的成绩字符串按空格分割成一个字符串列表。[int(x) for x in scores_str.split()]
:遍历scores_str.split()
返回的字符串列表,并将每个元素转换为整数类型。最终得到一个整数列表。
5.递归
题目:请用递归方法完成 3!+6!+9!+……+n!的和。
思路:先对n做判断,当n不是3的倍数时结束输出。编写两个函数,一个函数用于实现某个数的阶乘,另一个函数用于实现阶乘的累加。
def sum(n): if n==3: return jc(3) else: return jc(n)+sum(n-3) def jc(n): if n == 1: return 1 else: return n*jc(n-1) n = int(input("输入一个3的倍整数:")) if n%3 == 0: print("公式的和为:",sum(n)) else: print("输入错误!")
切记:函数必须先定义,才能调用,否则会报错。
6.统计
题目:字典 city 中存放了每个学生选修过的课程,内容为{“Tom”:[“Python”,“日语”],“John”:[“日语”,“C++”,“美术”],“Alice”:[“C++”,“日语”,“Pyhon”,“体育”]},统计如下信息。
示例:
请输入要统计的课程:日语
输出:
Tom同学修过2课程。
John同学修过3课程。
Alice同学修过4课程。
修过日语课程的学生有3人,他们是Tom、John、Alice。
考察对字典中键值对的操作及迭代
courses = {"Tom":["Python","日语"],"John":["日语","C++","美术"],"Alice":["C++","日语","Python","体育"]} course = input("请输入要统计的课程:") count = 0 students = [] for student,courses_taken in courses.items(): # 字典的 items() 方法可以返回一个包含所有键值对的列表,这个语句相当于遍历键值对 print("{}同学修过{}门课程。".format(student,len(courses_taken))) if course in courses_taken: count+=1 students.append(student) # 将当前迭代的学生姓名 student 添加到 students 列表的末尾 if count > 0: student_names = ",".join(students) # 将列表 students 中的元素用逗号连接起来,变成一个字符串 print("修过{}课程的学生有{}人,他们是{}。".format(course,count,student_names)) else: print("没人修过{}。".format(course))
7.打折
题目:一家商场在降价促销,如果购买金额不高于200元,会给10%的折扣;如果购买金额高于200元,会给20%的折扣。
输入消费额(整数),显示折扣后的应付金额。
思路:简单的条件判断。
n = int(input("输入消费额:")) if n > 200: print(0.8*n) else: print(0.9*n)
8.找数字
1)程序运行后,给出文字提示:“请输入一个正整数:”
2)输入一个整数n按回车后,程序输出从1-n所有整数中既是3的倍数又是5的倍数的数。
3)不要超过5行代码。
思路:联合判断。
n = int(input("请输入一个正整数:")) for i in range (1,n+1): if i%3==0 and i%5==0: print(i,end=" ")
9.猜数字
随机给出一个在1至100间的整数,进行猜数游戏,共5次,每次猜数给出反馈,若猜小了,则输出“猜小了”,若猜大了,则输出“猜大了”,若猜中,则输出“猜对了”并退出程序,如果5次都没有猜到,则在第五次输出“你好笨”
思路:使用 if - elif 语句实现
import random x = random.randint(1,100) count = 0 while 1: a = int(input("你猜的数字是:")) count += 1 if a < x and count != 5: print("猜小了") elif a > x and count != 5: print("猜大了") elif a == x: print("猜对了") break elif a != x and count == 5: print("你好笨") break
10.理财
小敏有10万元本金,想要购买银行保证收益型理财产品。每年到期后连本带利仍购买此种理财。
请你帮助小敏分析,在年收益率不变的情况下,多少年后小敏的累计收益能超过本金?
例如:
请输入年利率:5.15%
14 年后收益超过本金。
思路:使用迭代解决
# 迭代 nll = input("请输入年利率:") nll = nll.replace('%','') # 去除百分号 nll = float(nll)/100 # 除以100 count = sum = 0 x= 10 while sum < 10: sum += x * nll x += x*nll count += 1 print(count)
11.出租车收费
某市出租车收费标准如下:
(1)3公里内(含3公里),收费8元
(2)超过3公里但未超过6公里部分,按1.5元/公里收费
(3)超过6公里部分,按2.25元/公里收费。
根据以上标准,输入出租车行驶的公里数,请计算顾客需付费多少元?
思路:多重条件判断。
s = int(input()) if s <= 3: sum = 8 elif s<=6: sum = 8 + (s-3)*1.5 else: sum = 12.5 + (s-6)*2.25 print(sum)
12.处罚
为了保障空气质量,减少雾霾,某市决定当空气污染严重时,实行汽车单双号限行,违反规定的车辆将予以处罚。如何让高清摄像头自动判断车牌的单双号,交警犯了愁,请编写程序。
提示:①所有车牌号中都含有数字,并且车牌号的长度都是6;
②以车牌中最后一位阿拉伯数字的奇、偶来决定单双号。
思路:截取字符串最后一位进行判断即可。
s = input() x = s[-1] if int(x) % 2 == 0: print("双号") else: print("单号")
13.身高
题目:现在从键盘输入一组同学的身高(用","隔开),分别统计平均身高,高于平均升高的人数,低于平均身高的人数,并将身高降序排列输出。
示例输入:1.75,1.80,1.68,1.72,1.73
平均身高: 1.736 cm
高于平均身高2人
低于平均身高3人
思路:使用列表及其内置函数。
heights = input("请输入一组同学的身高(用逗号隔开):") heights_list = heights.split(",") # 将输入的身高字符串拆分成列表 heights_list = [float(height) for height in heights_list] # 将身高列表中的元素转换为浮点数 average_height = sum(heights_list) / len(heights_list) # 计算平均身高 above_average_count = sum(height > average_height for height in heights_list) # 统计高于平均身高的人数 below_average_count = sum(height < average_height for height in heights_list) # 统计低于平均身高的人数 sorted_heights = sorted(heights_list,reverse=True) # 将身高列表降序排序 print("平均身高{}cm".format(average_height)) print("高于平均身高{}人".format(above_average_count)) print("低于平均身高{}人".format(below_average_count)) print("身高降序排列: {}".format(sorted_heights))
拓展:sorted()
函数有一个 reverse
参数,用于控制排序的顺序。当 reverse=True
时,表示将列表按照降序排列;反之,当 reverse=False
或者不指定该参数时,表示按照升序排列。
14.素数
题目:输出100以内素数,并且每行输出5个,每个占位2个字符,用空格分隔。
思路:编写函数判断是否为素数,再对格式进行处理。
from math import sqrt def sushu(n): if n < 2: return 0 for i in range(2,int(sqrt(n))+1): if n%i == 0: return 0 return 1 count = 0 for i in range(2,101): if sushu(i): print("{:2d}".format(i), end=" ") count += 1 if count % 5 ==0: print("\n")