2022年 11月 8日

《Python 程序设计》题目集

python刷题

  • 题目:第3章-19 找最长的字符串 (15 分)
  • 一、代码
  • 二、总结
  • 题目:第3章-20 逆序的三位数 (10 分)
  • 一、代码
  • 二、总结
  • 题目:第3章-21 判断回文字符串 (15 分)
  • 一、代码
  • 二、心得
  • 题目:第3章-22 输出大写英文字母 (15 分)
  • 一、代码
  • 二、心得
  • 题目:第4章-1 生成3的乘方表 (15 分)
  • 一、代码
  • 二、心得
  • 题目:第4章-2 统计素数并求和 (20 分)
  • 一、代码
  • 二、心得
  • 题目:第4章-3 猴子吃桃问题 (15 分)
  • 一、代码
  • 二、心得
  • 题目:第4章-4 验证“哥德巴赫猜想” (20 分)
  • 一、代码
  • 二、心得

题目:第3章-19 找最长的字符串 (15 分)

本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。

输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。

输出格式:
在一行中用以下格式输出最长的字符串:

The longest is: 最长的字符串

如果字符串的长度相同,则输出先输入的字符串。

输入样例:

5
li
wang
zhang
jin
xiang

输出样例

The longest is: zhang

一、代码

N=int(input())
Maxstr=""
for i in range(0,N):
    str=input()
    if len(str)>len(Maxstr):
        Maxstr=str
print("The longest is: {}".format(Maxstr))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、总结

按N个数输入可以通过for循环。

题目:第3章-20 逆序的三位数 (10 分)

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:
每个测试是一个3位的正整数。

输出格式:
输出按位逆序的数。

输入样例:

123

输出样例:

321

一、代码

N=input()
print(int(N[::-1]))

#最简格式如下
# print(int(input()[::-1])
  • 1
  • 2
  • 3
  • 4
  • 5

二、总结

1.注意最后转化为int():防止输出001(去除00)
2.[::-1] :逆序输出

题目:第3章-21 判断回文字符串 (15 分)

输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。

输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出格式:
输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No。

输入样例1:

level

输出样例1:
level
Yes

这里是引用

输入样例2:

1 + 2 = 2 + 1 =

输出样例2:

1 + 2 = 2 + 1 = No

一、代码

str=input()
r_str=str[::-1]
print(str)
if str==r_str:
    print("Yes")
else:
    print("No")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、心得

通过 str[::-1] 实现逆序赋值

题目:第3章-22 输出大写英文字母 (15 分)

本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。

输入格式:
输入为一个以回车结束的字符串(少于80个字符)。

输出格式:
按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。

输入样例1:

FONTNAME and FILENAME

输出样例1:

FONTAMEIL

输入样例2: fontname and filrname

输出样例2:

Not Found

一、代码

str=input()
t_str=""
for i in str:
    if i.isupper() and i not in t_str:
        t_str+=i
if len(t_str)==0:
    print("Not Found")
else:
    print(t_str)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、心得

1.设置临时变量t_str来存储大写字母
2.i.isupper() 判断 i 是否为大写字母,是返回True,否则返回False
3.not in 的使用:不在某个…里面

题目:第4章-1 生成3的乘方表 (15 分)

输入一个非负整数n,生成一张3的乘方表,输出3
​0
​​ ~3
​n
​​ 的值。可调用幂函数计算3的乘方。

输入格式:
输入在一行中给出一个非负整数n。

输出格式:
按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。

输入样例:

3

输出样例:

pow(3,0) = 1

pow(3,1) = 3

pow(3,2) = 9

pow(3,3) = 27

一、代码

num=int(input())
for i in range(0,num+1):
    print("pow(3,{}) = {}".format(i, pow(3, i)))

  • 1
  • 2
  • 3
  • 4

二、心得

1.定义输入为int类型: 变量名=int(input())
2.range(0,num+1),注意左为闭区间,右为开区间。

题目:第4章-2 统计素数并求和 (20 分)

本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31

输出样例:

7 143

一、代码

自己的代码,有点乱

begin,end=map(int,input().split())
sum=0
count=0
temp=0
for i in range(begin,end+1):
    if i==2:
        count+=1
        sum+=i
    else:
        for t in range(2, i):
            if i % t == 0:
                temp=1
                break
        if temp!=1 and i!=1:
            count += 1
            sum += i
        temp=0
if begin==1 and end==1:
    count=sum=0
print("{} {}".format(count,sum))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

别人的代码

def isPrime(num):
    num=int(num)
    for i in range(2,num):
        if num%i==0 :
            return False
    if(num!=1):
        return True
def cnt(a, b):
        cnt=0
        for i in range(a, b + 1):
            if isPrime(i):
                cnt=cnt+1
        return cnt
def sum(a,b):
    sum=0
    for i in range(a,b+1):
        if isPrime(i):
            sum+=i
    return sum
m,n=input().split()
m=int(m)
n=int(n)
print('{:d} {:d}'.format(cnt(m,n),sum(m,n)))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

原文链接:https://blog.csdn.net/qq_43733499/article/details/102583113

二、心得

对素数依然没有完全真正掌握,没有形成自己的思维,打代码头脑没有很清晰…

题目:第4章-3 猴子吃桃问题 (15 分)

一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:
输入在一行中给出正整数N(1<N≤10)。

输出格式:
在一行中输出第一天共摘了多少个桃子。

输入样例:

3

输出样例:

10

一、代码

def count(c):
    N=1
    while c>1:
        N=(N+1)*2
        c=c-1
    return N
day=int(input())
print(count(day))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、心得

1.通过函数实现统计

题目:第4章-4 验证“哥德巴赫猜想” (20 分)

数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:

24

输出样例:

24 = 5 + 19

一、代码

import math
def prime(s): # 判断是否为素数
    if s==1: # s==1的情况
        return False
    else:
        for i in range(2, int(math.sqrt(s))+1):  # 剩下的所有情况
            if s % i == 0:
                return False
        return True

def guess(d):
    for i in range(2, int(d/2+1)):
        end = d - i
        if prime(end) and prime(i):
            print("{} = {} + {}".format(d,i,end))
            return 0

digit=int(input())
guess(digit)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

二、心得

1.通过prime() 和 guess()两个函数实现
2.熟悉素数的判断
3.注意判断素数的右范围:判断素数的右区间可定义为
int(math.sqrt(s) +1),别漏了后面的 1
这里注意转化为int类型,防止float和int类型不同引发错误。