Python练习

集合相似度

【问题描述】

集合相似度是常见的方法,比如:给定两个整数集合,它们的相似度定义为:Nc /Nt×100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。

【输入形式】

输入第一行给出一个正整数N(≤50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(≤10^4),是集合中元素的个数;然后跟M个[0,10 ^ 9]区间内的整数。

【输出形式】

计算第一组与其他每一个集合的相似度,输出其中相似度最高的那个集合。格式为保留小数点后2位的百分比数字。

【样例输入】

3
3 99 87 101
4 87 101 5 87
6 99 101 18 5 135 18

【样例输出】

87 101 5 87
50.00%

【说明】

Nc是两个集合都有的不相等整数的个数,指交集中元素的个数;
Nt是两个集合一共有的不相等整数的个数,指并集中元素的个数。

【代码】

n=int(input())//获取一个正整数n,表示集合一共有n个
list1=input().split()//split()将输入的字符串以空格分隔
list1.pop(0)//pop(0)指每次弹出列表的第一个元素,pop()指每次弹出列表最后一个元素
lista=set(list1)//利用set()将重复元素去掉
max=0
list5=[]//创建空列表
//遍历集合
for x in range(n-1):
    list2=input().split()
    list2.pop(0)
    listb=set(list2)//取出第二个集合
    list3=lista.intersection(listb)//list3为lista和listb的交集,即第一个和第二个集合的交集
    i=len(list3)//得到该交集的长度(元素个数),即Nc
    list4=lista.union(listb)//list4为lista和listb的并集,即第一个和第二个集合的并集
    j=len(list4)//得到该并集的长度(元素个数),即Nt
    k=i/j//求出集合相似度
    if k>max:
        max=k
        list5=list2//把相似度最高的集合保存到list5中
//遍历列表,获取列表中的元素
for y in range(len(list5)-1):
    print(list5[y],end=" ")
print(list5[len(list5)-1])//为什么要把这个单独写?因为这一步后面没有空格
maxx=format(max,'.2%')//百分数的写法之一
print(maxx)

Python如何输出百分比

  1. 方法一:先转化为浮点数,再处理成百分数格式
print("%.2f%%"%25)
print('{:.2f}%'.format(25))//输出结果均为25.00%
  1. 方法二:使用参数格式化
print({:.2%}'.format(0.25))//输出结果为25.00%

用人名查电话

【问题描述】

定义一个电话簿,里头设置以下联系人:

‘mayun’:‘13309283335’,
‘zhaolong’:‘18989227822’,
‘zhangmin’:‘13382398921’,
‘Gorge’:‘19833824743’,
‘Jordan’:‘18807317878’,
‘Curry’:‘15093488129’,
‘Wade’:‘19282937665’

现在输入人名,查询他的号码。

【输入形式】

人名,是一个字符串。

【输出形式】

电话号码。如果该人不存在,返回"not found"

【样例输入】

mayun

【样例输出】

13309283335

【代码】

key=input()//获取输入的键,input()里的都是字符串形式
dict={ 'mayun':'13309283335',
    'zhaolong':'18989227822',
    'zhangmin':'13382398921',
    'Gorge':'19833824743',
    'Jordan':'18807317878',
    'Curry':'15093488129',
    'Wade':'19282937665'
   }
if key in dict: //键是否在字典中
    print(dict.get(key))//get()返回指定键的值
else:
    print("not found")

input()

均是字符串

电话号码

【问题描述】假设电话号码的模式为:3个数字,一个短横线,4个数字,一个短横线和4个数字。如:186-7123-4567。编写程序,用以检查输入的字符串是否匹配电话号码模式,若匹配返回True,否则返回False。

【样例输入】

186-7123-4567

【样例输出】

True

【样例输入】

186–123-4567

【样例输出】

False

【代码】

call=input()
if call[0:3].isdigit() and call[4:8].isdigit() and call[9:13].isdigit() and call[3]=="-" and call[8]=="-":
    print("True")//isdigit()用来判断字符串中是否只包含数字
else:
    print("False")

找不同

【问题描述】

9个同学一起做游戏,每个人报一个[1,20]区间上的正整数,请你编程求出有多少个不同的数。

【输入形式】

输入1行,输入9个[1,20]区间上的整数,每个整数之间以空格为分隔符

【输出形式】

输出1个数,表示输入的9个数中不同数的个数。

【样例输入】

1 2 3 3 2 2 7 8 9

【样例输出】

6

【代码】

number=input()
num=set(number)//set()创建集合,因为集合里的元素不可重复,所以在这一过程中会自动删去重复元素
print(len(num)-1)//长度即为元素个数

在生词本查单词的译文

【问题描述】

先输入多个英文单词及其译文,接着输入英文单词,输出该单词的译文。

【输入形式】

第一行是整数n,表示n个英文单词及其译文。

接下来输入n行是英文单词和译文,中间用空格隔开。

接下来输入的一行是一个英文单词。

【输出形式】

输出最后输入的英文单词的译文。如果没有检索到该单词,输出"not found"。

【样例输入】

3

word zi

go qu

input shuru

go

【样例输出】

qu

【样例说明】

qu是go单词的译文。

【代码】

import re//正则表达式
import sys
n=int(input())//表示n个英文单词及其译文
for a in range(1,n+1):
    text=input()
    s=re.findall(r'.\S+',text)//findall()列表返回所有匹配,“.”匹配除换行符\n以外的任意1个字符。text匹配text自身。+匹配前式1或无限次。\S匹配除空格以外的字符。
word=input()//输入想要检索的单词
key=[]
index=[]
for i in range(n):
    key.append(s[0])
    index.append(s[1])
d=dict(zip(key,index))
if word in d:
    print(d.get(word))
else:
    print("not found")

高校类型统计

【问题描述】列表 ls 中存储了我国 39 所 985 高校所对应的学校类型,请以这个列表为数据变量,编写 代码,统计输出各类型的数量,要求按类别字母顺序输出。

ls = ["Comprehensive", "Polytechnic", "Comprehensive", "Comprehensive", "Comprehensive", \

  "Comprehensive", "Comprehensive", "Comprehensive", "Comprehensive", "Comprehensive",\

  "Normal", "Polytechnic", "Comprehensive", "Polytechnic", "Comprehensive", "Comprehensive", \

  "Comprehensive", "Comprehensive", "Comprehensive","Polytechnic",\

  "Polytechnic", "Polytechnic", "Polytechnic", "Normal", "Comprehensive", \

  "Agricultural and Forestry", "Polytechnic", "Comprehensive", "Polytechnic", "Polytechnic", \

  "Polytechnic", "Comprehensive", "Polytechnic", "Comprehensive", "Comprehensive", \

  "Polytechnic", "Agricultural and Forestry", "Nationalities", "Military"]

【样例输入】

【样例输出】

Agricultural and Forestry 2

Comprehensive 20

Military 1

Nationalities 1

Normal 2

Polytechnic 13

【代码】

ls = ["Comprehensive", "Polytechnic", "Comprehensive", "Comprehensive", "Comprehensive", \

 "Comprehensive", "Comprehensive", "Comprehensive", "Comprehensive", "Comprehensive",\

"Normal", "Polytechnic", "Comprehensive", "Polytechnic", "Comprehensive", "Comprehensive", \

"Comprehensive", "Comprehensive", "Comprehensive","Polytechnic",\

 "Polytechnic", "Polytechnic", "Polytechnic", "Normal", "Comprehensive", \

 "Agricultural and Forestry", "Polytechnic", "Comprehensive", "Polytechnic", "Polytechnic", \

 "Polytechnic", "Comprehensive", "Polytechnic", "Comprehensive", "Comprehensive", \

 "Polytechnic", "Agricultural and Forestry", "Nationalities", "Military"]
mydict = {}//创建字典
for i in ls:
    mydict[i] = mydict.get(i,0)+1//get(key,index)返回指定键的值
data = list(mydict.items())//items()返回字典的键值对
data.sort()//sort()排序
[print(i[0],i[1]) for i in data]

找因子(判断素数的方法)

【问题描述】

输入一个大于1的整数,返回一个列表,包含所有能够整除该整数的因子(不包含1和它本身),并且从小到大排序。如果这个数是素数,则输出“(整数) is prime”。

【样例输入】

number:6

【样例输出】

[2, 3]

【样例输入】

number:5

【样例输出】

5 is prime

【代码】

a=int(input("number:"))
flag=1
list=[]
for i in range(2,a):
    if a%i==0:
        flag=0
        list.append(i)
if flag==1:
    print("%d is prime"%a)
else:
    print(list)

出现最多次的整数

【问题描述】

输入一组无序的整数,编程输出其中出现次数最多的整数及其出现次数。

【输入形式】

先从标准输入读入整数的个数(大于等于1,小于等于100),然后在下一行输入这些整数,各整数之间以一个空格分隔。

【输出形式】

在标准输出上输出出现次数最多的整数及其出现次数,两者以一个空格分隔;若出现次数最多的整数有多个,则按照整数升序分行输出。

【样例输入】

10

0 -50 0 632 5813 -50 9 -50 0 632

【样例输出】

-50 3

0 3

【样例说明】

输入了10个整数,其中出现次数最多的是-50和0,都是出现3次。

【代码】

list=input()
L=list.split()//split()将输入的字符串以空格分隔
L.sort()//排序,默认升序
num=[]
max=0
for i in range(len(L)):
    num[i]=L.count(L[i])//num列表中存放的是每个数出现的次数
max=max(num)//利用max求出最大值
for a in range(len(L)):
    if max==num[a]:
        b=L[a]//这一步是用来看出现最多的是哪几个
c=set(b)//搞成集合,去重
print("%d %d"%c%max)

凯撒加密

【问题描述】

凯撒密码是古罗马凯撒大帝用来保护重要军情的加密系统。这套密码系统在现在看来很低级,但是在古罗马时期还是发挥了重要作用的。凯撒密码的根本思想是按照字母表排列顺序将明文中每个字母变换成其后第n个字母。这里,n(n=1~25)被称作秘钥。请编写程序,针对不同的输入字符串和移动位数,输出经过凯撒加密之后的字符串。

【输入形式】

第一个输入参数是移动的位数n,中间间隔一个空格之后,第二个输入参数是待加密的原文字符串

【输出形式】

加密后的密文字符串。注意,只加密字母,且不改变字母大小写。待加密的字符串可能存在比如"hello world"的形式,若与第一个参数一起以input的方式输入,在调用split()的时候要注意,会将待加密字符串也一并分割了。split()方法有参数指定分割多少项,建议采用,请上网搜索说明文档。

【样例输入】

5 NUDT

【样例输出】

SZIY

【样例说明】

输入参数中第一个参数’5’表示移动位数n=5,然后将第二个输入参数中每个字母都向后移动5位,得到输出字符串。

【代码】

n,psw = input().split(' ',1)//split()方法有参数指定分割多少项
newpsw = []
for i in psw:
    num = ord(i)+eval(n)//ord()以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,返回值是对应的十进制整数,eval()返回传入字符串的表达式的结果。,即变量赋值时,等号右边的表达示是写成字符串的格式,返回值就是这个表达式的结果
    if 90 < num < 97 or num > 122:
        num = num-26
    if num == 32+eval(n):
        newpsw.append(chr(num-eval(n)))
    if 65 <= num <= 90 or 97 <= num <= 122:
        newpsw.append(chr(num))
print( "".join(newpsw))//join()合并成一个新的字符串

求折点

【问题描述】

给定n个整数表示一个商店连续n天的销售量。如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点。其他的天都不是折点。如下图中,第3天和第6天是折点。

在这里插入图片描述

给定n个整数a1, a2, …, an表示销售量,请计算出这些天总共有多少个折点。

为了减少歧义,我们给定的数据保证:在这n天中相邻两天的销售量总是不同的,即ai-1≠ai。注意,如果两天不相邻,销售量可能相同。

【输入形式】

输入的第一行包含一个整数n。

第二行包含n个整数,用空格分隔,分别表示a1, a2, …, an。

【输出形式】

输出一个整数,表示折点出现的数量。

【样例输入】

7

5 4 1 2 3 6 4

【样例输出】

2
3 low
6 high

【样例说明】

2 2个折点
3 low 第三天第一个拐点为高到低到高
6 high 第六天第二个拐点为低到高到低

【代码】

n=int(input())
x=input()
y=x.split()//样例输入时以空格隔开了
num=0
for i in range(1,n-1):
    if y[i]<y[i-1] and y[i]<y[i+1]:
        a=str(i+1)+" low"//str()转换成字符串
        num=num+1
    elif y[i]>y[i-1] and y[i]>y[i+1]:
        b=str(i+1)+" high"//str()转换成字符串
        num=num+1
    else:
        s=0
print(num)
print(a)
print(b)

找数对

【问题描述】

输入一组数到列表nums,请找到列表中任意两个元素相加能够等于9的元素,形成一个元组,使其小数在前大数在后,如:(2,7), (1,8)。重复的元组元素只保留一个,结果按元组第一个元素从小到大顺序输出。

【样例输入】

numbers:3,4,5,7,2,8,1

【样例输出】

[(1, 8), (2, 7), (4, 5)]

【难点解析】可以一开始定义一个空列表Lst,然后每次将符合要求的,例如Lst.append((1,8))追加一个元组的方式(看清楚里面(1,8)的写法),把元组作为列表的元素插入列表。

【代码】

n=input("numbers:")
a=n.split(",")
a=[eval(i) for i in a]
Lst=[]
for i in range(0,len(a)):
    for j in range(i+1,len(a)):
        if a[i]+a[j]==9:
            x=a[i]
            y=a[j]
            if x>=y:
                x,y=y,x
                Lst.append((x,y))//追加一个元组的方式
            else:
                Lst.append((x,y))
        else:
            flag=0
Lst=list(set(Lst))
Lst.sort()//排序,按(x,y)中的x的大小排序
print(Lst)

读者第几次出现

【问题描述】

涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。

【输入形式】

输入的第一行包含一个整数n,表示涛涛的记录条数。

第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。

【输出形式】

输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。

【样例输入】

5

1 2 1 1 3

【样例输出】

1 1 2 3 1
  
【代码】

n=int(input())
key=input().split()
dict={i:0 for i in key}//创建字典,将值全部初始化为0
a=[]
for i in key:
    dict[i]+=1//dict[i]返回的结果是对应的值
    a.append(str(dict[i]))
print(" ".join(a))

打酱油(数学题)

【问题描述】

小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。

【输入形式】

输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。

【输出形式】

输出一个整数,表示小明最多可以得到多少瓶酱油。

【样例输入】

40

【样例输出】

5

【样例说明】

把40元分成30元和10元,分别买3瓶和1瓶,其中3瓶送1瓶,共得到5瓶。

【样例输入】

80

【样例输出】

11

【样例说明】

把80元分成30元和50元,分别买3瓶和5瓶,其中3瓶送1瓶,5瓶送2瓶,共得到11瓶。

【代码】

//以下代码中的//表示做除法取整数
n=int(input())
if n<30:
    print(n//30)
elif n>=30 and n<50:
    print((n-30)//10+4)
else:
    print(n//50*7+(n-(n//50)*50)//30*4+(n-(n//50)*50-(n-(n//50)*50)//30*30)//10)

求中间数(运用flag)

【问题描述】

在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。

给定一个整数序列,请找出这个整数序列的中间数的值。

【输入形式】

输入的第一行包含了一个整数n,表示整数序列中数的个数。

第二行包含n个正整数,依次表示a1, a2, …, an。

【输出形式】

如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。

【样例输入】

6

2 6 5 6 3 5

【样例输出】

5

【样例说明】

比5小的数有2个,比5大的数也有2个。

【样例输入】

4

3 4 6 7

【样例输出】

-1

【样例说明】

在序列中的4个数都不满足中间数的定义。

【样例输入】

5

3 4 6 6 7

【样例输出】

-1

【样例说明】

在序列中的5个数都不满足中间数的定义。

【代码】

n=int(input())
shu=input().split()
shu=[eval(i) for i in shu]
a=0
b=0
for i in range(n):
    flag=1
    for j in range(n):
        if shu[i]>shu[j]:
            a=a+1
        elif shu[i]<shu[j]:
            b=b+1
    if a==b:
        print(shu[i])
        break
    else:
        a=b=0
        flag=0
if flag==0:
    print(-1)

循环编程题

【问题描述】

已知y=1+1/3+1/5+…+1/2n-1:

求y<3时的最大n值以及最大n值对应的y值(y值保留小数点后2位)。

【样例输入】

【样例输出】

n=XXX,y=X.XX

【样例说明】

X代表求出的数。

【评分标准】

用循环完成,直接输出不得分。

【代码】

n=1
y=0
while(y<3):
    sum=1/(2*n-1)
    y=y+sum
    n=n+1
print("n=%d,y=%.2f"%(n-2,y-sum))

小玉游泳

【问题描述】

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。

【输入形式】输入一个数字(不一定是整数,小于100m),表示要游的目标距离。。

【输出形式】输出一个整数,表示小玉一共需要游多少步。

【样例输入】4.3

【样例输出】3

【代码】

from math import *
x=float(input())
s=2
sum=0
i=0
while(sum<x):
    sum=sum+pow(0.98,i)*s
    i=i+1
print("%d"%i)

随机密码

【问题描述】

请编写程序,生成随机密码。具体要求如下:‪‪‪‪‪‫‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪

(1)使用 random 库,采用 10作为随机数种子。‪‪‪‪‪‫‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪

提示:random.seed(10)

(2)密码允许字符如下:

s="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*"‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪

(3)密码长度固定为 10 个字符。

【样例输入】

【样例输出】

e30bA8!Jue

【代码】

from random import *
s='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*'
a=[]
i=1
seed(10)
while(i<=10):
    b=s[randint(0,len(s)+1)]
    a.append(b)
    i=i+1
c=''.join([str(i) for i in a])
print(c)

密码正确吗

【问题描述】试编写一个程序判断6位密码是否正确,若密码正确输出right,密码不正确输出wrong,如果输入的密码有非数字字符则输出wrong(用字符串的isdigit()方法判断是否是纯数字字符串)。密码规则是: 第i位数字是第i-1位数字加1后的3次方的个位数( 2<=i<=6)。
【输入形式】一个六位密码
【输出形式】“right” 或者"wrong"
【样例输入】272727
【样例输出】right
【样例说明】密码272727中第2位的7是第1位的2加1后的3次方的个位数。又,(7+1)的3次方为512,其个位数为2),以此类推。
【代码】

from math import *
pat=str(input())
i=2
//先判断密码是否符合密码规则
if int(pat[i-1])==pow(int(pat[i-2])+1,3)%10 and i<=6:
    i=i+1
    flag=1
else:
    flag=0
if len(pat)==6 and pat.isdigit() and flag==1: //isdigit()判断是否是纯数字字符串
    print("right")    
else:
    print("wrong")

猴子吃桃问题

【问题描述】猴子吃桃问题:
猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第n天吃以前发现只剩下一个桃子,
编写程序实现:据输入的天数计算并输出猴子共摘了几个桃子

【输入形式】输入的一行为一个非负整数,表示一共吃的天数。

【输出形式】输出的一行为一个非负整数,表示共摘了几个桃子,若输入的数据不合法(如:负数或小数),则输出"illegal data"。

【样例输入】3
【样例输出】10

【样例输入2】0
【样例输出2】0
【代码】

from math import *
n=eval(input())
sum=0
if n>0 and isinstance(n,int): //isinstance()用于判断一个对象是否是一个已知类型
    for i in range(n-1):
        sum=sum+pow(1/2,i)//重点是找出规律
    x=(2*sum+2)/(2-sum)
    print("%d"%x)
elif n==0:
    print(0)
else:
    print("illegal data")

翻译密码(ASCII码)

【问题描述】翻译密码。为了保密,常不采用明文,而用密文,即按一定规则将字符转换为另一字符,收报人则按相反的规律转换得到原来的字符。本程序规则为:字母ascii码加5,其他字符不变,对原文进行加密,并显示密文。字母的最后5个加5不是字母了,处理规则为循环成前5个。比如“X”的密文为“C”。

【样例输入】

please input text:I love haha.
【样例输出】

N qtaj mfmf.

【样例说明】ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符

【代码】

s=str(input("please input text:"))
for i in s:
    if 65<=ord(i)<=85 or 97<=ord(i)<=117:
        a=ord(i)+5
        b=chr(a)
    elif 86<=ord(i)<=99 or 118<=ord(i)<=122:
        a=ord(i)-21
        b=chr(a)
    else:
        b=i
    print(b,end="")

Python判断可逆素数

【问题描述】若将某一素数的各位数字的顺序颠倒后得到的数仍是素数,则此素数称为可逆素数
【输入形式】用户在第一行输入一个整数。
【输出形式】程序输出yes或是no,yes表示此数是可逆素数,no表示不是。用户输入的数必须为正整数。注意:yes或是no全是小写输出。
【样例输入】23
【样例输出】no
【样例说明】用户输入23,23各位数字颠倒之后得到32,23是素数,但32不是素数,所以23不是可逆素数。
【代码】

n=int(input())
s=n%10*10+n/10//把数逆过来,应该还可用reverse()逆置函数
flag=1
for k in range(2,int(s)):
    if int(s)%k==0:
        flag=0
if flag==1:
    print("yes")
else:
    print("no")

求矩阵两对角线之和

【问题描述】求4*4矩阵两对角线之和。第一行全1,第二行全2,第三行全3,第四行全4
【输入形式】无输入
【输出形式】20
【代码】

L=[[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]]
a=L[0][0]+L[1][1]+L[2][2]+L[3][3]
b=L[0][3]+L[1][2]+L[2][1]+L[3][0]
print(a+b)

11整除

【问题描述】

有如下结论:如果一个整数的奇数位上的数字之和与偶数位上的数字之和的差能被11整除,那么这个数能被11整除;(注:每个整数从个位开始计算位数;以123456为例,奇数位之和为6+4+2=12,偶数位之和为5+3+1=9)

请利用上述结论,任意给出一个6位整数,输出其奇数位上数字之和,偶数位上数字之和,并判断其能否被11整数。

【输入形式】

输入一个6位的正整数;

【输出形式】

按顺序输出一个奇数位之和、偶数位之和,输出最终的判断能否被11整除;

【样例输入】

Please input a 6-digital integer:654321

【样例输出】

9

12

FALSE

【代码】

a=str(input("Please input a 6-digital integer:"))
b=int(a[5])+int(a[3])+int(a[1])//偶数位
c=int(a[4])+int(a[2])+int(a[0])//奇数位
print(b)
print("\n")
print(c)
if (b-c)%11==0 or (c-b)%11==0:
    print("TRUE")
else:
    print("FALSE")

积最大的分解

【问题描述】从键盘输入一个正整数n(n>1),该正整数可以分解成两个正整数k1和k2之和(允许k1和k2相等)。请编写一个函数求使两个正整数的乘积最大的分解方案,并返回乘积max。
【输入形式】标准输入的一行表示正整数n
【输出形式】标准输出的一行表示最大乘积max,若输入的数据不合法(如:负整数、0或1),输出"illegal input"。
【样例输入】20
【样例输出】100
【样例说明】20=10 + 10,此时积最大,为100。
【代码】

list=[]
n=int(input())
if n<0 or n==0 or n==1:
    print("illegal input")
else:
    for k1 in range(1,n):
        k2=n-k1
        list.append(k1*k2)//在列表中添加元素
    a=max(list)//找出列表中的最大值
    print(a)

统计正负数个数

【问题描述】从键盘输入非0整数,以输入0为输入结束标志,求平均值,统计正数负数个数
【输入形式】

每个整数一行。最后一行是0,表示输入结束。

【输出形式】

输出三行。
第一行是平均值。第二行是正数个数。第三行是负数个数。

【样例输入】
1
1
1
0

【样例输出】
1
3
0
【代码】

a=0
b=0
c=0
sum=0
while 1:
    c+=1
    i=eval(input())
    sum+=i
    if i>0:
        a+=1
    elif i<0:
        b+=1
    else:
        break
print(sum/(c-1))
print(a)
print(b)

矩阵–各列求最大值

【问题描述】编写程序实现:用3*5的整型矩阵a接收标准输入的数据,计算数组a的每列元素的最大值,并将第i列最大值存入max相应的第i个元素。
【输入形式】标准输入的每一行表示矩阵a中的一行数据,以空格作为间隔。
【输出形式】标准输出的一行表示max中的元素,用空格作为间隔;若输入数据不合法(如:小数或某一行数据少于5个),则输出"illegal input"。
【样例输入】
1 2 3 4 5
6 7 8 9 0
3 5 7 9 1
【样例输出】6 7 8 9 5
【代码】

ju=[]
for r in range(3):
    row=[]
    line=input()
    n=line.split()
    if len(n)<5:
        print("illegal input")
        exit(0)
    for s in n:
        if s.count(".")==1:
            print("illegal input")
            exit(0)
        t=int(s)
        row.append(t)
    ju.append(row)
list=[] 
for c in range(5):
    z=ju[0][c]
    for r in range(1,3):
        if ju[r][c]>z:
            z=ju[r][c]
    list.append(z)
for x in list:
    print(x,end=" ")

杨辉三角形

【问题描述】
在屏幕上显示如下杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

【输入形式】
从键盘输入整数n(n>=0且n<=12)
【输出形式】
在屏幕上输出n+1行杨辉三角形。

【输入样例】
3
【输出样例】
------***1

----***1***1

–***1***2***1

***1***3***3***1

其中-和*都是空格位

即每个数字占四位!

【输出样例说明】

每个数字占四位。这意味着,数字12的输出形式是12, 这里代表两个空格。数字330的输出形式是330。这里代表一个空格。

要输出占4格的数字num,使用以下语句:

print("%4d" % num)

%4d是指输出一个整数,其中的4表示占4格。

【代码】

n=int(input())
num_list=[1]
for i in range(n+1):
    for j in range(n-i):
        print(" ",end="")//输出空格数
    for num in num_list:
        print("%4d"%num,end="")
    print()//换行
    num_list=[1]+[num_list[j]+num_list[j+1] for j in range(len(num_list)-1)]+[1]

解密码(ASCII码)

【问题描述】

有一行电文,已按下面规律译成密码:
A–Z a–z
B–Y b–y
C–X c–x

即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母; 非字母字符不变。编写程序把密码译回原文,并输出密码和原文。

【输入形式】

输入一串密码(长度为10,可包含数字、字母)

【输出形式】

首先输出密码,然后换行后输出原文

【样例输入】

4sdf&13TBD

【样例输出】

4sdf&13TBD

4hwu&13GYW

【代码】

s=input()
newstr=''
for i in s:
    if 'A'<=i<='Z':
        position=ord(i)-65
        new=chr(26-position-1+65)
        newstr+=new
    elif 'a'<=i<='z':
        position=ord(i)-97
        new=chr(26-position-1+97)
        newstr+=new
    else:
        newstr+=i
print(s)
print(newstr)

输入整数x,y,z,判断x3+y3+z^3和1000的关系

【问题描述】输入整数x,y,z,若x3+y3+z3>1000,则输出x3+y3+z3-1000的结果,否则输出三个数之和。

【输入形式】

用eval()函数结合input()函数同时输入3个整数,输入数字时用逗号分隔
【输出形式】

数字结果
【样例输入】

please input three numbers:1,2,3

【样例输出】

6
【样例说明】注意次方运算符的写法不是问题描述中的^。

【代码】

from math import *
x,y,z=eval(input("please input three numbers:"))
sum=pow(x,3)+pow(y,3)+pow(z,3)//学会使用pow()函数
if sum>1000:
    print("%d"%(sum-1000))
else:
    print("%d"%(x+y+z))

统计字符串中非英文字母个数

【问题描述】统计字符串s中非英文字母的个数并输出。

【输入形式】字符串s

【输出形式】非英文字母的个数

【输入示例】a1b2

【输出示例】2

【代码】

s=input()
i=0
letter=0
sum=0
while i<len(s):
    a=s[i]
    if a.isalpha(): //isalpha()判断字符串中字母的个数
        letter+=1
    else:
        sum+=1
    i=i+1
print(sum)

字符串中字母大小写互换

【问题描述】编写程序,功能是把输入的字符串的大写字母变成小写字母,小写字母变成大写字母,非字母的字符不作变换。输出变换后的结果。
【输入形式】字符串,包含字母和非字母字符。
【输出形式】字符串,字母的大小写已经发生变换。
【样例输入】abcABC
【样例输出】ABCabc
【代码】

s=input()
print(s.swapcase())//swapcase()可以实现大小写互换

删除子串

【问题描述】编写程序实现在字符串s中删除子字符串c的功能
说明:不考虑去掉子字符串c后形成的新的子字符串c。
例如:字符串s为abcabcd,子串c为bc,则调用该函数后,结果字符串s为aad。
【输入形式】输入的第一行表示字符串s,第二行表示子串c。
【输出形式】输出的一行表示处理后的结果。
【样例输入】
abcabcd
bc
【样例输出】
aad
【代码】

s=str(input())
c=str(input())
print(s.replace(c,''))//直接用一个replace()就搞定啦

判断三角形,并判断是何种三角形

【问题描述】输入三个数,判断它们能否构成一个三角形。若能,则输出三角形是等边三角形、直角三角形,还是普通三角形;若不能,则输出“不能组成三角形”提示信息。

【输入形式】

输入3条边长的时候可以结合eval()和input()函数一次性输入3个值,输入数字时用逗号分隔

【输出形式】

false或者equilateral triangle或者right triangle或者ordinary triangle

【样例输入】

please input three numbers:3,4,5

【样例输出】

right triangle

【代码】

a,b,c=eval(input("please input three numbers:"))
if a+b>c and a+c>b and b+c>a:
    if a==b and b==c and a==c:
        print("equilateral triangle")
    elif a*a+b*b==c*c or a*a+c*c==b*b or b*b+c*c==a*a:
        print("right triangle")
    else:
        print("ordinary triangle")
else:
    print("false")

通过年份和月份,求该月天数

【问题描述】输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。

【输入形式】

输入年份和月份的时候可以结合eval()和input()函数一次性输入2个值,输入数字时用逗号分隔

【输出形式】

对应的天数,2月时要判断是否是闰年

【样例输入】

year,month:2100,2
【样例输出】

28

【样例说明】
能被4整除但不能被100整除的为闰年,或者能被400整除的为闰年

【代码】

x,y=eval(input("year,month:"))
L=[1,3,5,7,8,10,12]//这几个月有31天
if x%4==0 and x%100!=0 or x%400==0: //判断是否为闰年
    if y==2:
        a=29
        print(a)
    elif y in L:
        a=31
        print(a)
    else:
        a=30
        print(a)
else:
    if y==2:
        a=28
        print(a)
    elif y in L:
        a=31
        print(a)
    else:
        a=30
        print(a)

适婚问题!

【问题描述】

输入年龄和性别,判断你当前的个人情况!男性小于30岁显示:young,30岁到36岁之间显示:marriageable age,大于36岁显示:old。

女性小于25岁显示:young,25岁到30岁之间显示:marriageable age,大于30岁显示:old。

【样例输入1】

sex(F or M):F

age:28

【样例输出1】

marriageable age

【样例输入2】

sex(F or M):M

age:28

【样例输出2】

young

【样例输入3】

sex(F or M):H

age:28

【样例输出3】

wrong

【样例说明】输入F或f代表女性;M或m代表男性,输入性别有误时提示wrong。考虑用嵌套的if语句来实现。

【代码】

a=str(input("sex(F or M):"))
b=int(input("age:"))
if a=='F' or a=='f':
    if b<25:
        print("young")
    elif 25<=b<=30:
        print("marriageable age")
    else:
        print("old")
elif a=='M' or a=='m':
    if b<30:
        print("young")
    elif 30<=b<=36:
        print("marriageable age")
    else:
        print("old")
else:
    print("wrong")

停车费

【问题描述】进入停车场开始计费。停车时间小于0.5小时不收费;每小时收费5元;不足1小时按1小时收费;最多收费50元也就是10小时以上都是50元。
【输入形式】

输入停车时间
【输出形式】

0或者50或者25
【样例输入】

time:4.1
【样例输出】

25
【样例说明】样例输入中的下划线表示具体输入的数字
【代码】

from math import *
time=eval(input("time:"))
if time <0.5:
    money=0
    print(money)
elif 0.5<=time<=10:
    money=ceil(time)*5//ceil()对浮点数向上取整,floor()对浮点数向下取整
    print(money)
else:
    money=50
    print(money)

骑车还是走路

【问题描述】

在华农校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为30秒;停车锁车的时间为20秒;步行每秒行走2米,骑车每秒行走4米。请判断走不同的距离去办事,是骑车快还是走路快。

若一次办事要行走的距离为整数,单位为米。对输入的整数,如果骑车快,输出一行“Bike”;如果走路快,输出一行“Walk”;如果一样快,输出一行“All”。

【输入形式】

输入一个正整数
【输出形式】

Bike或者Walk或者All

【样例输入】

Please input a number of distance:40
【样例输出】

Walk

【样例输入】

Please input a number of distance:200
【样例输出】

All

【样例说明】

样例输入中的下划线表示具体输入的数字

【代码】

s=eval(input("Please input a number of distance:"))
walk=s/2
bike=s/4+30+20
if walk>bike:
    print("Bike")
elif walk<bike:
    print("Walk")
else:
    print("All")

电话号码

【问题描述】假设电话号码的模式为:3个数字,一个短横线,4个数字,一个短横线和4个数字。如:186-7123-4567。编写程序,用以检查输入的字符串是否匹配电话号码模式,若匹配返回True,否则返回False。

【样例输入】

186-7123-4567

【样例输出】

True

【样例输入】

186–123-4567

【样例输出】

False

【代码】

hao=str(input())
if (hao[0:2]).isdigit() and hao[3]=="-" and (hao[4:8]).isdigit() and hao[8]=="-" and (hao[9:]).isdigit():
    print("True")
else:
    print("False")

录取研究生

【问题描述】某高校录取研究生的要求是,每门课成绩不低于60分,总成绩不低于340分,370分以下为自费。编一程序实现输入一个学生的四门课成绩,试判断该生为该校录取的情况(没有录取“not”、自费“pay”、公费“free”三种情况)。

【输入形式】

输入四门课的成绩,成绩均为0~150之间的整数。输入4门课成绩的时候可以结合eval()和input()函数一次性输入4个值,输入数字时用逗号分隔

【输出形式】

not或者pay或者free

【样例输入】

four scores:55,120,110,120
【样例输出】

not

【代码】

a,b,c,d=eval(input("four scores:"))//一次性输入多个值的方法
sum=a+b+c+d
if a>=60 and b>=60 and c>=60 and d>=60 and sum>=370:
    print("free")
elif a>=60 and b>=60 and c>=60 and d>=60 and 340<=sum<370:
    print("pay")
else:
    print("not")

歌德巴赫猜想

【问题描述】

证明在偶数n以内,歌德巴赫猜想是成立的。歌德巴赫猜想是:任何一个充分大的偶数都可以表示为两个素数之和。例如,4=2+2 6=3+3 8=3+5 50=3+47。

【输入形式】

输入偶数n
【输出形式】

对每一个偶数4, 6, 8, …, n,依次输出一行。该行内容是<偶数>=<素数1>+<素数2>,要求素数1<=素数2.
【样例输入】

6
【样例输出】

4=2+2

6=3+3

【代码】

s=int(input())//在s以内
a=4
while a<=s:
    for i in range(2,a): 
        x=1
        y=1
        for j in range(2,i): //判断i是否为素数
            if(i%j==0):
                x=0 //x相当于flag,为0表示不是素数
        if x==1:
            n=a-i //当x不是素数时,判断另外一个数是不是素数
            for m in range(2,n):
                if(n%m==0):
                    y=0//y相当于flag,为0表示不是素数
            if y==1:
                print("%d=%d+%d"%(a,i,n))//a分解成i和n
                break
    a=a+2//更新成新的偶数,继续判断

计算圆周长和圆面积

【问题描述】输入圆的半径r,计算圆周长和圆面积,保留2位小数

【输入形式】

Please enter radium:

【输出形式】

【样例输入输出】
Please enter radium: 10

Circumference is 62.83

Round area is 314.16

【样例说明】

注意:圆周率取math库中的常数量pi,另外输出用%f,保留2位小数

import math

后面就可以用math.pi来调用数学库里面的圆周率数值了

【代码】

import math
radium=float(input('Please enter radium:'))
Circumference=2*math.pi*radium
area=math.pi*radium*radium
print('Circumference is %.2f' % Circumference)
print('Round area is %.2f' % area)

数值运算

【问题描述】
获得用户输入一个数值四则运算字符串,计算结果,保留2位小数

【输入形式】
用户输入 10+1

【输出形式】
输出 11.00

【样例输入】
1/20

【样例输出】
0.05

【样例说明】
可以使用“%”或者format函数进行小数位数格式化

【代码】

a=input("")
b=eval(a[:])//eval()可以将参数计算出来
print("{:.2f}".format(b))

温度转换程序

【问题描述】在温度刻画的不同体系中,摄氏度以1标准大气压下水的结冰点为0度,沸点为100度。华氏度以1标准大气压下水的结冰点为32度,沸点为212度。如何利用程序辅助进行摄氏度和华氏度之间的转换,结果保留1位小数。

设计算法:根据华氏和摄氏温度定义,其单位刻度对应温度关系为(212-32)/(100-0)=1.8,转换公式如下:

C = ( F – 32 ) / 1.8

F = C * 1.8 + 32

【输入形式】输入温度加温度制式的代表字母,摄氏温度对应字符是c或C,华氏温度对应字符是f或F

【输出形式】转换后的温度加温度制式的代表字母

【样例输入输出1】

What is the temperature?82F

The converted temperature is 27.8C

【样例输入输出2】

What is the temperature?28C

The converted temperature is 82.4F

【样例说明】下划线表示输入,结果保留1位小数
【代码】

val=input("What is the temperature?")
if val[-1] in['c','C']:
    f=1.8*float(val[0:-1])+32
    print("The converted temperature is %.1f"%f,end="F")
elif val[-1] in['f','F']:
    c=(float(val[0:-1])-32)/1.8
    print("The converted temperature is %.1f"%c,end="C")
else:
    print("False!")

3位整数逆序

【问题描述】输入一个3位正整数,将它逆序输出。假设输入的3位整数是938,则输出839.

【样例输入】

938
【样例输出】

839

【样例输入】

120
【样例输出】

21
【代码】

//本题关键是要考虑全面
a = str(input())
if a[-1]==0:
    b=int(a[::-2])
    print(b)
elif int(a)%100==0:
    b=a[0]
    print(b)
else:
    b=int(a[::-1])
    print(b)

数字英文形式转换

【问题描述】
阿拉伯数字和英文字母的转换

【输入形式】
输入123

【输出形式】
输出对应的bcd

【样例输入】
0123456789

【样例输出】
abcdefghij

【代码】

num = input()
zi = "abcdefghij"//因为最多只有10个数字,即0123456789,所以写到j就可以了
for i in range(len(num)):
    numsplit = int(num[i])
    print(zi[numsplit],end='')
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值