这一周有一道有意思的题目,等会会出来单独的解析
剩下题目难度不高,适合作为练习
目录
6-1 写函数求满足要求三位数的个数 (5 分)
6-2 编写函数统计指定数字的个数 (5 分)
6-3 判断用户传入的列表长度并完成切片 (10 分)
6-4 奇偶求和 (10 分)
7-1 求某月的天数 (10 分)
7-2 sdut-分段计算居民水费 (10 分)
7-3 有效括号判断 (30 分)
7-4 打印数字实心矩形 (10 分)
7-5 sdut-运输计费问题 (10 分)
7-6 超速罚款 - 实验4 条件与分支 -《Python编程实验》 (10 分)
6-1 写函数求满足要求三位数的个数 (5 分)
要求实现一个函数,统计给定区间内的三位数中至少有两位数字相同的完全平方数(如144、676)的个数。
函数接口定义:
search(n);
其中传入的参数n是一个三位数的正整数。函数search返回[101, n]区间内所有满足条件的数的个数。
裁判测试程序样例:
n = int(input())
cnt = search(n)
print ('count={}'.format(cnt))
输入样例:
500
500
结尾无空行
输出样例:
count=6
结尾无空行
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 18:52
def search(n):
sum = 0
for i in range(11, 33):
if pow(i, 2) <= n:
if str(pow(i, 2)).count('0') == 2 or str(pow(i, 2)).count('1') == 2 or str(pow(i, 2)).count(
'2') == 2 or str(pow(i, 2)).count('3') == 2 or str(pow(i, 2)).count('4') == 2 or str(
pow(i, 2)).count('5') == 2 or str(pow(i, 2)).count(
'6') == 2 or str(pow(i, 2)).count('7') == 2 or str(pow(i, 2)).count('8') == 2 or str(pow(i, 2)).count(
'9') == 2:
sum += 1
return sum
6-2 编写函数统计指定数字的个数 (5 分)
本题要求实现一个统计整数中指定数字的个数的简单函数。
CountDigit(number,digit )
其中number是整数,digit为[1, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。
函数接口定义:
函数接口定义:int CountDigit (number, digit );
参数number是整数,参数digit为[1,9]区间的整数,函数返回number中digit出现的次数。
裁判测试程序样例:
number,digit = list(map(int,input().split()))
cnt = CountDigit(number,digit)
print ("Number of digit {0} in {1}: {2}".format(digit,number,cnt))
输入样例:
-21252 2
结尾无空行
输出样例:Number of digit 2 in -21252: 3
结尾无空行
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 19:19
def CountDigit(number, digit):
sum = 0
for i in str(number):
if i == str(digit):
sum += 1
return sum
6-3 判断用户传入的列表长度并完成切片 (10 分)
编写一个函数,判断用户传入的列表长度是否大于2,如果大于2,只保留前两个,并将新内容返回给调用者,否则输出None.
函数接口定义:def func(list1)裁判测试程序样例:
list1 = eval(input()) print(func(list1))输入样例:
[1, 2, 3, 4]
结尾无空行
输出样例:[1, 2]
结尾无空行
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 19:30
def func(list1: list):
if len(list1) < 2:
return 'None.'
else:
return list1[:2]
6-4 奇偶求和 (10 分)
输入一个完全由数字字符组成的字符串s,分别统计其中出现的奇数和偶数字符数值之和
如输入‘123456789’
输出 oddsum=25,evensum=20
函数接口定义:def f(n): def p(t): def q(t):
其中函数f(n),功能是判断n的奇偶性,n为奇数,返回1,偶数返回0, 函数p(t)的功能是求字符串t中偶数数字的和, 函数q(t)的功能是求字符串t中奇数数字的和
裁判测试程序样例:
s=input()
print('oddsum={},evensum={}'.format(p(s),q(s)))
输入样例:
在这里给出一组输入。例如:
123456789
结尾无空行
输出样例:在这里给出相应的输出。例如:
oddsum=25,evensum=20
结尾无空行
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 19:36
def f(n):
if n % 2:
return 1
else:
return 0
def p(t):
sum = 0
for i in str(t):
n = int(i)
if f(n):
sum += n
return sum
def q(t):
sum = 0
for i in str(t):
n = int(i)
if f(n) == 0:
sum += n
return sum
7-1 求某月的天数 (10 分)
输入年份year、月份month,判断该月的天数。闰年:能被4整除但不能被100整除或者能被400整除的年份是闰年。
输入格式:
测试数据有多组,处理到文件尾。对于每组测试,输入两个整数,表示年份year和月份month。
输出格式:
对于每组测试,输出对应年月的天数。
输入样例:
2020 2
2020 4
输出样例:
29
30
29 30
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 19:46
try:
while True:
list1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
list2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
year, mouth = map(int, input().split())
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print(list2[mouth - 1])
else:
print(list1[mouth - 1])
except EOFError:
pass
7-2 sdut-分段计算居民水费 (10 分)
为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关,请编写程序实现水费的计算。
(1)当x不超过15吨时,y=4x/3;
(2)超过后,y=2.5x−17.5。
输入格式:在一行中给出非负实数x。
输出格式:在一行输出应交的水费,精确到小数点后2位。
输入样例1:
12
结尾无空行
输出样例1:
16.00
结尾无空行
输入样例2:
16
结尾无空行
输出样例2:
22.50
结尾无空行
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 19:52
def y(x):
if x > 15:
print("%.2f" % ((2.5 * x) - 17.5))
else:
print("%.2f" % ((4 * x) / 3))
x = float(input())
y(x)
7-3 有效括号判断 (30 分)
Alan最近眼神不好使,经常分不清楚括号,所以想请你帮忙,给定一个只包括 '(',')','{','}','[',']' 的字符串,想让你帮忙编写程序确定括号是否都是正常闭合。
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 空字符串被认定为True
输入空字符串或一行只包含'(',')','{','}','[',']' 的字符串。
输出格式:如果所有括号正确闭合,输出“True”,否则输出“False”。
输入样例:在这里给出一组输入。例如:
()
结尾无空行
输出样例:在这里给出相应的输出。例如:
True
结尾无空行
输入样例:
在这里给出一组输入。例如:
{[()]()}
结尾无空行
输出样例:
在这里给出相应的输出。例如:
True
结尾无空行
输入样例:
在这里给出一组输入。例如:
{{()[]}
结尾无空行
输出样例:
在这里给出相应的输出。例如:
False
结尾无空行
答案:
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 20:17
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/16 18:58
def op(str1: str):
str2 = []
if str1.count('(')!=str1.count(')') or str1.count('[')!=str1.count(']') or str1.count('{')!=str1.count('}') :
return 0
for i in str1:
if i == '(' or i == '[' or i == '{':
str2.append(i)
elif i == ')':
if str2[len(str2) - 1] != '(':
return 0
else:
str2.pop()
elif i == ']':
if str2[len(str2) - 1] != '[':
return 0
else:
str2.pop()
elif i == '}':
if str2[len(str2) - 1] != '{':
return 0
else:
str2.pop()
return 1
try:
str1 = input()
if op(str1):
print('True')
else:
print("False")
except :
print('True')
7-4 打印数字实心矩形 (10 分)
打印数字和星号组成的实心矩形,外框是数字,内部是星号。
输入格式:输入一个整数n(0 打印一个数字矩形,矩形的边框都是整数n,要求行和列都是n个数字。(注意:没有空行)而矩形内部都是星号。 在这里给出一组输入。例如: 结尾无空行 在这里给出相应的输出。例如: 结尾无空行 在这里给出一组输入。例如: 结尾无空行 在这里给出相应的输出。例如: 结尾无空行 在这里给出一组输入。例如: 结尾无空行 在这里给出相应的输出。例如: 结尾无空行 答案: 某运输公司对用户计算运费。路程(S)越远,每公里运费越低。标准如下: 其中,基本运输费用为:每吨每公里1元。 现请你帮助该运输公司设计计费程序,计算运输费用。 每次运输的载重(吨)、里程(公里),中间有一个空格。 输出其运输费用,精确到元。 结尾无空行 结尾无空行 结尾无空行 答案: 开车超速是要罚款的,某国相应法律如下: 请编写程序,程序从输入的第1行读取车速(整数),从输入的第2行读取限速值(整数),然后使用条件分支语句进行判断,输出如表所示的处罚结论。 车速 如表所示的处罚结论 结尾无空行 结尾无空行 答案:5
55555
5***5
5***5
5***5
55555
2
22
22
输入样例3:
1
输出样例3:
1
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 20:19
n = int(input())
list1 = []
list2 = [str(n), str(n)]
for i in range(n):
list1.append(str(n))
for i in range(1, n - 1):
list2.insert(1, '*')
str1 = ''.join(list1)
str2 = ''.join(list2)
if n > 2:
l = 1
for i in range(n):
if l == 1 or l == n:
print(str1)
l += 1
else:
print(str2)
l += 1
else:
for i in range(n):
print(str1)
7-5 sdut-运输计费问题 (10 分)
1 200
200
10 2500
输出样例2:
22500
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 20:44
def cost(w, s):
if w > 0:
if 0 <= s < 250:
print(round(w * s))
elif 250 <= s < 500:
print(round(0.98 * w * s))
elif 500 <= s < 1000:
print(round(0.95 * w * s))
elif 1000 <= s < 2000:
print(round(0.92 * w * s))
elif 2000 <= s < 3000:
print(round(0.90 * w * s))
elif 3000 <= s:
print(round(0.85 * w * s))
else:
print(0)
else:
print(0)
w, s = input().split(" ")
w, s = float(w), float(s)
cost(w, s)
7-6 超速罚款 - 实验4 条件与分支 -《Python编程实验》 (10 分)
情况 处罚 车速 ≤ 限速 程序输出:未超速 超速比 ≤ 10% 程序输出:超速警告 10% <超速比≤ 20% 程序输出:罚款100元 20% <超速比≤ 50% 程序输出:罚款500元 50% <超速比≤ 100% 程序输出:罚款1000元 超速比 > 100% 程序输出:罚款2000元
限速值149
100
罚款500元
解题思路: 请参考《Python编程实验》(待出版)。
该书是高等教育出版社《Python编程基础及应用》教材的配套实验指导书。# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 21:08
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/10/18 20:44
def cost(w, s):
if w > 0:
if 0 < w <= (0.1 * s):
print('超速警告')
elif (0.1 * s) < w <= (0.2 * s):
print('罚款100元')
elif (0.2 * s) < w <= (0.5 * s):
print('罚款500元')
elif (0.5 * s) < w <= s:
print('罚款1000元')
else:
print('罚款2000元')
else:
print("未超速")
w = int(input())
s = int(input())
w=w-s
cost(w, s)



