这一周题目出来了,我看着我应该是最早做完的,所以就算审核之后应该时间还够,还是建议前九个题作为之前知识的复习题来做,最后一个题可以先学习列表的增删之后做,因为很简单,基础题目,对于巩固知识是不错的。


目录

7-1 统计数字 (10 分)

7-2 sdut-求满足条件的斐波那契数 (10 分)

7-3 平均值 (10 分)

7-5 计算 1+2+3+...+m。 (10 分)

7-6 sdut-循环-乘法运算 (10 分)

7-7 sdut-入门-7 A+B for Input-Output Practice (VII) (10 分)

7-8 三七二十一 (10 分)

7-9 菱形 (10 分)

7-10 删除列表中的重复值(高教社,《Python编程基础及应用》习题4-8) (5 分)



7-1 统计数字 (10 分)

输入一个字符串,统计其中数字字符的个数。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个仅由字母和数字组成的字符串(长度不超过80)。

输出格式:

对于每组测试,在一行上输出该字符串中数字字符的个数。

输入样例:

2
ac520ac520
a1c2m3sdf

输出样例:

6
3

答案: 

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 19:41
n=int(input())
sum=0
while n:
    sum=0
    n-=1
    m=input()
    for i in m:
        if i.isdigit():
            sum+=1
    print(sum)

7-2 sdut-求满足条件的斐波那契数 (10 分)

斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。

输入格式:

在一行输人一个正整数n(n>=10)。

输出格式:

在一行输出大于n的最小斐波那契数。

输入样例:

10

结尾无空行

输出样例:

13

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 19:45
n = int(input())
s1 = s2 = s3 = 1
while True:
    s1 = s2
    s2 = s3
    s3 = s1 + s2
    if s3 > n:
        break
print(s3)

7-3 平均值 (10 分)

在一行上输入若干整数,每个整数以一个空格分开,求这些整数的平均值。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个字符串(仅包含数字字符和空格)。

输出格式:

对于每组测试,输出以空格分隔的所有整数的平均值,结果保留一位小数。

输入样例:

1
1 2 3 4 5 6 7 8 9 10

输出样例:

5.5

答案: 

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 19:54
n = int(input())
for i in range(n):
    sum = 0
    m = 0
    str1 = input().split()
    for i in str1:
        sum += float(i)
        m += 1
    print("%.1f" % (sum / m))

7-4 最小回文数 (10 分)

若一个数正向看和反向看等价,则称做回文数。例如:6,2552,12321均是回文数。 给出一个正整数n,求比n大的最小的回文数。(n和运算结果均不会超出int类型范围)

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入1个正整数n。

输出格式:

对于每组测试数据,输出比n大的最小回文数。

输入样例:

2
12
123456

输出样例:

22
124421

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 19:59
n= int(input())
for i in range(n):
    m=int(input())
    for l in range(m+1,m*2+1):
        ty1=1                                       #判断是不是回文数
        str1=str(l)
        for o in range(len(str1)//2):
            if str1[o]!=str1[len(str1)-o-1]:
                ty1=0
                break
        if ty1:
            print(l)
            break

7-5 计算 1+2+3+...+m。 (10 分)

输入一个正整数m(0<=m<=100),计算 1+2+3+...+m 的值。

输入格式:

多组输入。

在一行输入一个正整数m。

输出格式:

对应每一行输入,在一行中按照格式“sum=S”输出对应的和S.

输入样例:

10
100

结尾无空行

输出样例:

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

sum=55
sum=5050

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 20:07
try:
    while True:
        sum = 0
        n = int(input())
        for i in range(1, n + 1):
            sum += i
        print("sum=%d" % sum)
except EOFError:
    pass

7-6 sdut-循环-乘法运算 (10 分)

接收一个正整数N,然后打印输出:N个等式,形如:i(1->N)N=iN 格式的数据。

输入格式:

只有一个正整数N(N<=100)。

输出格式:

输出共N行数据,形式如:i (1->N)*N=? 格式的表达式。

输入样例1:

4

结尾无空行

输出样例1:

1*4=4
2*4=8
3*4=12
4*4=16

结尾无空行

输入样例2:

5

结尾无空行

输出样例2:

1*5=5
2*5=10
3*5=15
4*5=20
5*5=25

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 20:12
n = int(input())
for i in range(1, n + 1):
    print("%d*%d=%d" % (i, n, i * n))

7-7 sdut-入门-7 A+B for Input-Output Practice (VII) (10 分)

你的任务是计算a + b。

输入格式:

输入将由一系列整数a和b组成,用一个空格分隔,每行有一对整数。

输出格式:

对于每一对输入整数a和b,应该输出a和b的和,后面跟着一个空行。

输入样例:

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

1 5
10 20

输出样例:

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

6

30

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 20:14
try:
    while True:
        n,m=map(int,input().split())
        print("%d\n"%(n+m))
except EOFError:
    pass

7-8 三七二十一 (10 分)

某天,诺诺看到三七二十一(3721)数,觉得很神奇,这种数除以3余2,而除以7则余1。例如8是一个3721数,因为8除以3余2,8除以7余1。现在给出两个整数a、b,求区间[a,b]中的所有3721数,若区间内不存在3721数则输出“none”。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入两个整数a,b(1≤a<b<2000)。

输出格式:

对于每组测试,在一行上输出区间[a,b]中所有的3721数,每两个数据之间留一个空格。如果给定区间不存3721数,则输出“none”(引号不必输出)。

输入样例:

2
1 7
1 100

输出样例:

none
8 29 50 71 92

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 20:17
n = int(input())
for i in range(n):
    sum = 0
    m1, m2 = map(int, input().split())
    for i in range(m1, m2 + 1):
        if i % 3 == 2 and i % 7 == 1:
            if sum >= 1:
                print(" %d" % i, end='')
            else:
                print(i, end='')
            sum += 1

    if sum == 0:
        print("none")
    else:
        print()


7-9 菱形 (10 分)

输入一个整数n,输出2n-1行构成的菱形,例如,n=5时的菱形如输出样例所示。

输入格式:

测试数据有多组,处理到文件尾。每组测试输入一个整数n(3≤n≤20)。

输出格式:

对于每组测试数据,输出一个共2n-1行的菱形,具体参看输出样例。

输入样例:

5

输出样例:

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 20:23
try:
    while True:
        n=int(input())
        for i in range(1,n+1):
            for q in range(n-i):
                print(" ",end='')
            for q in range(i*2-1):
                print("*",end='')
            print()
        for i in range(n-1,0,-1):
            for q in range(n-i):
                print(" ",end='')
            for q in range(i*2-1):
                print("*",end='')
            print()
except EOFError:
    pass

7-10 删除列表中的重复值(高教社,《Python编程基础及应用》习题4-8) (5 分)

输入一个列表,删除其中的重复值,再输出。

要求

假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个。 不同元素在列表中的相对位置不应被改变。

输入格式:

[元素1, 元素2, ... , 元素n]

输出格式:

[元素1,元素2, ... , 元素k]

输入样例:

[4,3,2,3,2,4,True]

结尾无空行

输出样例:

[3, 2, 4, True]

结尾无空行

提示:将形如"[1,3,5]"的字符串转换成列表可以使用eval()函数。
注意:不要在遍历列表的同时对列表进行增删改操作,这样会引起混乱,导致不正确的结果!

注意,输出格式应与输出样例一致,涉及空格,逗号等。

请接着往下看:你的程序真的对了吗?

多数读者的解题思路是制造一个v列表的复制品以避免在遍历v的同时删除v中的元素。该解决方案可以通过本题设置的全部测试。但这并不意味着该解决方案是“完全正确”的。请尝试下述输入:

[1,7,6,7,7,True,'a',9.8,'a',True]


很遗憾,程序将产生错误的输出:

[6, 7, 9.8, 'a', True]

产生这种意外结果的原因是:在Python里1和True是相等的! 0和False也是相等的! 在使用列表的count()函数,index()函数,remove()函数时,1和True, 0和False被不加区分地对待。

下述代码的执行结果证实了这一点:

v = [1,True,2,True,0,False]
print("count of 1:", v.count(1), ",count of True:", v.count(True))
print("count of 0:", v.count(0), ",count of False:", v.count(False))
print("index of True:",v.index(True), ",index of False",v.index(False))
v.remove(True)
print("after v.remove(True):",v)

其执行结果为:

count of 1: 3 ,count of True: 3     #1,True都同时为1或True
count of 0: 2 ,count of False: 2    #0,False都同时为0或False
index of True: 0 ,index of False 4  #下标0的1被视为True
after v.remove(True): [True, 2, True, 0, False]   #1被当作True移除了


这个问题的完美解决方案,请参考拟出版的《Python编程 实验》一书。
该书是高等教育出版社《Python编程基础及应用》教材的配套实验指导书。

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/9/27 20:30

list1 = eval(input())
list1.reverse()
list2 = ['']
for i in list1:
    if i not in list2:
        list2.insert(0, i)
list2.pop()
print(list2)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐