Python习题四

发布于:2022-11-02 ⋅ 阅读:(493) ⋅ 点赞:(0)

6-1 写函数求满足要求三位数的个数

要求实现一个函数,统计给定区间内的三位数中至少有两位数字相同的完全平方数(如144、676)的个数。

函数接口定义:

search(n);

其中传入的参数n是一个三位数的正整数。函数search返回[101, n]区间内所有满足条件的数的个数。

裁判测试程序样例:

/* 请在这里填写答案 */

n = int(input())
cnt = search(n)
print ('count={}'.format(cnt))

输入样例:

500

输出样例:

count=6

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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
#方法二
def search(n):
    cnt=0
    for i in range(101,n+1):
        a=int(pow(i,0.5))
        if a*a==i and len(set(str(i)))<=2:
            cnt=cnt+1
return cnt

6-2 编写函数统计指定数字的个数

本题要求实现一个统计整数中指定数字的个数的简单函数。

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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
def CountDigit(number, digit):
    sum = 0
    for i in str(number):
        if i == str(digit):
            sum += 1
    return sum
#方法二
def CountDigit(number,dight):
    nums=str(number)
    cnt=nums.count(str(dight))
return cnt

6-3 判断用户传入的列表长度并完成切片

编写一个函数,判断用户传入的列表长度是否大于2,如果大于2,只保留前两个,并将新内容返回给调用者,否则输出None.

函数接口定义:

def func(list1)

裁判测试程序样例:

list1 = eval(input())
print(func(list1))

输入样例:

[1, 2, 3, 4]

输出样例:

[1, 2]

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
def func(list1: list):
    if len(list1) < 2:
        return 'None.'
    else:
        return list1[:2]
#方法二
def func(ls):
    if len(ls)>2:
        ls=ls[:2]
    else:
        ls="None."
return ls

6-4 奇偶求和

输入一个完全由数字字符组成的字符串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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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
#方法二
def f(n):
    a=0
    if n%2!=0:
        a=1
    return a

def q(t):
    sum=0
    for i in t:
        if f(int(i))==0:
            sum+=int(i)
    return sum

def p(t):
    sum=0
    for i in t:
        if f(int(i))==1:
            sum+=int(i)

    return sum

7-1 求某月的天数

输入年份year、月份month,判断该月的天数。闰年:能被4整除但不能被100整除或者能被400整除的年份是闰年。

输入格式:

测试数据有多组,处理到文件尾。对于每组测试,输入两个整数,表示年份year和月份month。

输出格式:

对于每组测试,输出对应年月的天数。

输入样例:

2020 2
2020 4

输出样例:

29
30

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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

#方法二
while True:
    try:
        a,b=map(int,input().split())
        if str(b) in ['1','3','5','7','8','10','12']:
            day=31
        elif str(b) in ['4','6','9','11']:
            day=30
        elif a%4==0 and a%100!=0 or a%400==0:
            day=29
        else:
            day=28
        print(day)
    except:
        break

7-2 sdut-分段计算居民水费

为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
def y(x):
    if x > 15:
        print("%.2f" % ((2.5 * x) - 17.5))
    else:
        print("%.2f" % ((4 * x) / 3))
x = float(input())
y(x)
#方法二
n=eval(input())
if n<=15:
    print("{:.2f}".format(4/3*n))
else:
    print("{:.2f}".format(2.5*n-17.5))

7-3 有效括号判断

Alan最近眼神不好使,经常分不清楚括号,所以想请你帮忙,给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,由于不小心输入错误,Alan还输入了几个空格。想让你帮忙编写程序确定括号是否都是正常闭合。

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 空字符串被认定为True
  4. 空格可以去掉

输入格式:

输入空字符串或一行只包含’(‘,’)‘,’{‘,’}‘,’[‘,’]’ 以及空格的字符串。

输出格式:

如果所有括号正确闭合,输出“True”,否则输出“False”。

输入样例:

在这里给出一组输入。例如:

()

输出样例:

在这里给出相应的输出。例如:

True

输入样例:

在这里给出一组输入。例如:

{[()]()}

输出样例:

在这里给出相应的输出。例如:

True

输入样例:

在这里给出一组输入。例如:

{{()[]}

输出样例:

在这里给出相应的输出。例如:

False

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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')
#方法二
x=input()
while True:
    s=x
    x=x.replace("()","").replace("[]","").replace("{}","").replace(" ","")
    if len(x)==len(s):
        break
print("{}".format("False" if s else "True"))

7-4 打印数字实心矩形

打印数字和星号组成的实心矩形,外框是数字,内部是星号。

输入格式:

输入一个整数n(0<n<10)。

输出格式:

打印一个数字矩形,矩形的边框都是整数n,要求行和列都是n个数字。(注意:没有空行)而矩形内部都是星号。

输入样例:

在这里给出一组输入。例如:

5

输出样例:

在这里给出相应的输出。例如:

55555
5***5
5***5
5***5
55555

输入样例2:

在这里给出一组输入。例如:

2

输出样例2:

在这里给出相应的输出。例如:

22
22

输入样例3:

在这里给出一组输入。例如:

1

输出样例3:

在这里给出相应的输出。例如:

1

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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)
#方法二
n=input()
print(n*int(n))
for i in range(int(n)-2):
    print(n+"*"*(int(n)-2)+n)
if int(n)>=2:
    print(n*int(n))

7-5 sdut-运输计费问题

某运输公司对用户计算运费。路程(S)越远,每公里运费越低。标准如下:

图片

其中,基本运输费用为:每吨每公里1元。

现请你帮助该运输公司设计计费程序,计算运输费用。

输入格式:

每次运输的载重(吨)、里程(公里),中间有一个空格。

输出格式:

输出其运输费用,精确到元。

输入样例1:

1 200

输出样例1:

200

输入样例2:

10  2500

输出样例2:

22500

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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)
#方法二
a,b = map(eval,input().split())

if a>0:
    if 0<=b<250:
        print(round(a*b*1.0))
    elif 250<=b<500:
        print(round(a * b*0.98))
    elif 500<=b<1000:
        print(round(a * b * 0.95))
    elif 1000<=b<2000:
        print(round(a * b * 0.92))
    elif 2000<=b<3000:
        print(round(a * b * 0.90))
    elif 3000<=b:
        print(round(a * b * 0.85))
    else:
        print(0)
else:
    print(0)

7-6 超速罚款 - 实验6 条件与分支 -《Python编程基础及应用实验教程》

开车超速是要罚款的,某国相应法律如下:

情况 处罚
车速 ≤ 限速 程序输出:未超速
超速比 ≤ 10% 程序输出:超速警告
10% <超速比≤ 20% 程序输出:罚款100元
20% <超速比≤ 50% 程序输出:罚款500元
50% <超速比≤ 100% 程序输出:罚款1000元
超速比 > 100% 程序输出:罚款2000元

请编写程序,程序从输入的第1行读取车速(整数),从输入的第2行读取限速值(整数),然后使用条件分支语句进行判断,输出如表所示的处罚结论。

输入格式:

车速

限速值

输出格式:

如表所示的处罚结论

输入样例:

149
100

输出样例:

罚款500元

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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)
#方法二
a=int(input())
b=int(input())
if a<=b:
    print("未超速")
elif (a-b)/b<=0.1:
    print("超速警告")
elif (a-b)/b<=0.2:
    print("罚款100元")
elif (a-b)/b<=0.5:
    print("罚款500元")
elif (a-b)/b<=1.0:
    print("罚款1000元")
else:
    print("罚款2000元")