python刷题
题目:第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))
二、总结
按N个数输入可以通过for循环。
题目:第3章-20 逆序的三位数 (10 分)
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
一、代码
N=input()
print(int(N[::-1]))
#最简格式如下
# print(int(input()[::-1])
二、总结
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")
二、心得
通过 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.设置临时变量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.定义输入为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))
别人的代码
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)))
原文链接: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.通过函数实现统计
题目:第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.通过prime() 和 guess()两个函数实现
2.熟悉素数的判断
3.注意判断素数的右范围:判断素数的右区间可定义为
int(math.sqrt(s) +1),别漏了后面的 1
这里注意转化为int类型,防止float和int类型不同引发错误。