Python习题五

7-1 统计数字

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

输入格式:

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

输出格式:

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

输入样例:

2
ac520ac520
a1c2m3sdf

输出样例:

6
3

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
n=int(input())
sum=0
while n:
    sum=0
    n-=1
    m=input()
    for i in m:
        if i.isdigit():
            sum+=1
    print(sum)
#方法二
n=int(input())
for i in range(n):
    print(sum([1 for i in input() if i.isdigit() ]))

7-2 sdut-求满足条件的斐波那契数

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

输入格式:

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

输出格式:

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

输入样例:

10

输出样例:

13

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
n = int(input())
s1 = s2 = s3 = 1
while True:
    s1 = s2
    s2 = s3
    s3 = s1 + s2
    if s3 > n:
        break
print(s3)
#方法二
n=int(input())
a,b,c=1,1,0
while c<n:
    c=a+b
    a=b
    b=c
print(c)

7-3 平均值

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

输入格式:

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

输出格式:

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

输入样例:

1
1 2 3 4 5 6 7 8 9 10

输出样例:

5.5

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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))
#方法二
n=int(input())
for i in range(n):
    s=input().split()
    print(sum(map(int,s))/len(s))

7-4 最小回文数

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

输入格式:

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

输出格式:

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

输入样例:

2
12
123456

输出样例:

22
124421

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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
#方法二
n=int(input())
for i in range(n):
    s=str(int(input())+1)
    while s[:]!=s[::-1]:
        s=str(int(s)+1)
    print(int(s))

7-5 计算 1+2+3+…+m

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

输入格式:

多组输入。

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

输出格式:

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

输入样例:

10
100

输出样例:

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

sum=55
sum=5050

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
try:
    while True:
        sum = 0
        n = int(input())
        for i in range(1, n + 1):
            sum += i
        print("sum=%d" % sum)
except EOFError:
    pass
#方法二
while True:
    try:
        m=int(input())
        print('sum={}'.format(int(m*(1+m)/2)))
    except:
        break

7-6 sdut-循环-乘法运算

接收一个正整数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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
n = int(input())
for i in range(1, n + 1):
    print("%d*%d=%d" % (i, n, i * n))
#方法二
n=int(input())
for i in range(n):
    print("{}*{}={}".format(i+1,n,n*(i+1)))

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

你的任务是计算a + b。

输入格式:

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

输出格式:

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

输入样例:

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

1 5
10 20

输出样例:

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

6

30

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
try:
    while True:
        n,m=map(int,input().split())
        print("%d\n"%(n+m))
except EOFError:
    pass
#方法二
while True:
    try:
        m,n=map(int,input().split())
        print(m+n,end='\n\n')
    except:
        break

7-8 三七二十一

某天,诺诺看到三七二十一(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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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()
#方法二
n=int(input())
for i in range(n):
    a,b=map(int,input().split())
    lst=[j for j in range(a,b+1)  if j%3==2 and j%7==1]
    if lst:
        print(*lst)
    else:
        print("none")

7-9 三七二十一

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

输入格式:

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

输出格式:

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

输入样例:

5

输出样例:

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

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
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
#方法二
while True:
    try:
        n = int(input())
        for i in range(n):
            print(" "*(n-i-1)+"*"*(2*i+1))
        for i in range(n-2, -1, -1):
            print(" "*(n-i-1)+"*"*(2*i+1))
    except:
        break

7-10 三七二十一

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

要求

假设列表中存在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移除了

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

#方法一
list1 = eval(input())
list1.reverse()
list2 = ['']
for i in list1:
    if i not in list2:
        list2.insert(0, i)
list2.pop()
print(list2)
#方法二
li = eval(input())
re = []
for item in li[::-1]:
    if item  not in re:
        re.append(item)
print(re[::-1])

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值