Python刷题
题目:第4章-9 查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
首先在屏幕上显示以下菜单:
[1] apple [2] pear [3] orange [4] grape [0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。
输入格式:
输入在一行中给出用户连续输入的若干个编号。
输出格式:
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。
输入样例1:
3 -1 0 2
输出样例1:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00
输入样例2:
1 2 3 3 4 4 5 6 7 8
输出样例2:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 3.00
price =2.50
price = 4.10
price = 4.10
price = 10.20
一、代码:
def menu():
print("[1] apple")
print("[2] pear")
print("[3] orange")
print("[4] grape")
print("[0] exit")
def price(m):
if m==1:
print("price = 3.00")
elif m==2:
print("price = 2.50")
elif m==3:
print("price = 4.10")
elif m == 4:
print("price = 10.20")
elif m!=0:
print("price = 0.00")
menu()
lst= list(map(int,input().split()))# 队列输入,并且以空格间隔输入
count=0
for i in lst:
if i==0:
break
price(i)
count+=1
if count==5:
break
二、心得
1.通过函数实现菜单和价格选择
2.多个数据的输入可以通过列表实现:list(map(int,input().split()))
题目:第4章-10 最大公约数和最小公倍数 (15 分)
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
一、代码
def maxgys(a,b):
if a%b == 0: # 不断取余直到为0
return b
else:
return maxgys(b,a%b)
n,m=map(int,input().split())
print("{:d} {:d}".format(maxgys(n,m),n*m//maxgys(n,m))) # //表示取整除,否则存在类型不同报错
二、心得
1.掌握最大公约数和最小公倍数的求法
2.// 取整除符号表达,如12//5,输出 2
题目:第4章-11 判断素数 (20 分)
判断一个给定的正整数是否素数
输入格式:
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于1000000 的需要判断的正整数
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No
输入样例:
在这里给出一组输入。例如:
2
11
111
输出样例:
在这里给出相应的输出。例如:
Yes
No
一、代码
def sushu(a):
a=int(a)
if a==1:
return False
elif a==2:
return True
else:
for i in range(2,a): # 不能包含到本身,及不能a+1
if a%i ==0:
return False # else不能写在这里同一层次,否则一旦不能整余就直接return True
if a!=1: # 另开判断,用是否为1作为条件
return True
num= int(input())
for i in range(num):
p=int(input())
if sushu(p):
print("Yes")
else:
print("No")
二、心得
1.掌握素数如何判断
2.按n个数输入的实现格式,通过for循环
3.注意类型转化 a=T(a) :将a强制转化为T类型
题目:第4章-12 求满足条件的斐波那契数 (30 分)
斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。
输入格式:
在一行输人一个正整数n(n>=10)。
输出格式:
在一行输出大于n的最小斐波那契数。
输入样例:
在这里给出一组输入。例如:
10
输出样例:
在这里给出相应的输出。例如:
13
一、代码
def Fol(first,second,m):
m=int(m)
t=0
t=first
first=second
second=t+second
if second>=m:
print(second)
return 0
Fol(first,second,m)
p=int(input())
Fol(1,1,p)
二、心得
掌握并熟练斐波拉数的算法
1 1 2 3 5 8…
题目:第4章-13 求误差小于输入值的e的近似值 (20 分)
自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。ei代表前i项求和。输入误差范围error,当
ei+1-ei<error,则表示e的近似值满足误差范围。
输入格式:
在一行输入误差范围,误差小于等于0.01。
输出格式:
在一行输出e的近似值(保留6位小数)。
输入样例1:
在这里给出一组输入。例如:
0.01
输出样例1:
在这里给出相应的输出。例如:
2.716667
输入样例2:
在这里给出一组输入。例如:
0.000000001
输出样例2:
在这里给出相应的输出。例如:
2.718282
一、代码
err=float(input())
Sum=float(1)
a=i=int(1)
while err<=1/a:
Sum+=1/a
a*=(i+1)
i+=1
print('{:.6f}'.format(Sum+1/a))
二、心得
1.注意类型转化
2.阶乘表达,while循环 a=(i+1) i+=1*
题目:第4章-14 统计字符 (15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。
输入样例: aZ &
09 Az
输出样例:
letter = 4, blank = 3, digit = 2, other = 1
一、代码
s=[]
count=0;letters=0;space=0;digit=0;others=0
while True:
b=list(input())
count=count+1
s.extend(b) # extend(b) 将b列表元素拷贝到s中
if len(s)+count>10:
count=count-1
break
for c in s:
if c.isalpha(): # 判断是否为字母
letters+=1
elif c.isspace(): # 判断是否为空格
space+=1
elif c.isdigit(): # 判断是否为数字
digit+=1
else:
others+=1 # 判断是否为其他
print("letter = {}, blank = {}, digit = {}, other = {}".format(letters,space+count,digit,others))
二、心得
1.熟悉列表的基本函数:extend()
2.掌握字符串的基本函数
题目:第4章-15 换硬币 (20 分)
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
输入样例:
13
输出样例:
fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count= 4
一、代码
count = 0
x = int(input()) # x∈(8,100)
a = x // 5
for m in range(a, 0, -1): # fen5
b = (x - (m * 5)) // 2
for n in range(b, 0, -1): # fen2
c = x - (5 * m) - (2 * n) # fen1
if m > 0 and n > 0 and c > 0: # 每种硬币至少有一枚
print("fen5:{}, fen2:{}, fen1:{}, total:{}".format(m, n, c, m + n + c))
count += 1
print("count = {}".format(count))
二、心得
1.了解题目目的
题目:第4章-16 jmu-python-判断是否构成三角形 (10 分)
输入三角形的三边,判断是否能构成三角形。若能构成输出yes,否则输出no。
输入格式:
在一行中直接输入3个整数,3个整数之间各用一个空格间隔,没有其他任何附加字符。
输出格式:
直接输出yes或no,没有其他任何附加字符。
输入样例1:
3 4 5
输出样例1:
yes
输入样例2:
1 2 3
输出样例2:
no
一、代码
a,b,c=map(int,input().split())
if a+b<=c or a+c<=b or b+c<=a:
print("no")
else:
print("yes")
二、心得
1.懂得三角形判断。
题目:第4章-17 水仙花数(20 分) (20 分)
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1×1×1+5×5×5+3×3×3。
本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤5)
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
153
370
371
407
一、代码
n=int(input())
for i in range(10**(n-1), 10**n): # 10**(n) 10的n次幂
ls=list(map(int, list(str(i)))) # str(i)转换为string类型,在转化为列表,在转化为int赋值给ls
s=0
for j in ls:
s+=j**n
if s==i:
print(i)
二、心得
1.某个数的n次幂表示:T(n) T的n次幂**
2.数据类型转换
3.map()函数的熟悉使用
题目:第4章-18 猴子选大王 (20 分)
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入格式:
输入在一行中给一个正整数N(≤1000)。
输出格式:
在一行中输出当选猴王的编号。
输入样例:
11
输出样例:
7
一、代码
n=int(input())
if n == 1:
print(1)
else:
monkey=[i for i in range(1,n+1)] # monkey为列表,i为成员,i来自for循环里
# print(monkey)
while len(monkey) >= 3:
monkey.pop(2) # 将下标为2,即第三个成员删除
monkey.append(monkey.pop(0)) # 将第一个成员提到最后
monkey.append(monkey.pop(0)) # 将更新后的第一个成员再次提到最后
print(monkey[1]) # 少于三个打印第一个成员即是所求
二、心得
1.掌握列表巧妙的赋值 monkey=[i for i in range(1,n+1)]
2**.a.pop(index) ,a.append(value)** 熟悉使用,一个是删除,一个是在尾部插入
题目:第4章-19 矩阵运算 (20 分)
给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入格式:
输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
输入样例:
4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1
输出样例:
35
一、代码
n=int(input())
s=0
for i in range(1,n+1):
m=list(map(int,input().split()))
if i==1:
m.pop(-i)
s=s+sum(m)
elif i==n:
s=s
else:
m.pop(-i)
m.pop(-1)
s=s+sum(m)
print(s)
二、心得
1.掌握列表巧妙的赋值 m=list(map(int,input().split()))
2**.a.pop(index) ,a.append(value)** 熟悉使用,一个是删除,一个是在尾部插入
题目:第4章-20 求矩阵各行元素之和 (15 分)
本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间
以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
输入样例:
3 2
6 3
1 -8
3 12
输出样例:
9
-7
15
一、代码
m,n=map(int,input().split())
for i in range(1,m+1):
lst=list(map(int,input().split()))
print(sum(lst))
二、心得
1.列表自带sum(lst)求和函数