python算法学习——第1天

1、3,5,7的倍数判定

在这里插入图片描述

num = int(input())
if num%3==0 and num%5==0 and num%7==0:
    print('Yes')
else:
    print('No')

2、鸡兔同笼

鸡兔同笼问题,从键盘读取脚数,头数,输出鸡数和兔数。
在这里插入图片描述

foot = int(input())
head = int(input())
rabbit = (foot-head*2)/2
print("%d\n%d"%(head-rabbit,rabbit))

3、计算有n个字符串中最长的字符串长度

编写程序,用于计算有n(1<n<10)个字符串中最长的字符串的长度。前导空格不要计算在内!
在这里插入图片描述
这里我定义了一个列表用来存放处理后的字符串的长度。

# 前导空格不计算在内,输入的时候采用字符串的lstrip()处理左边的字符串,再将长度存储在列表中。
# 求出列表的最大值就是字符串的最大长度
n = int(input())
li = []
for i in range(n):
    s = input()
    li.append(len(s.lstrip()))
print("length={}".format(max(li)))

也可以定义两个列表,一个用来存输入的字符串,另一个用来存处理后的对应字符串长度。

n=eval(input())
a=[]
b=[]
for i in range(n):
    a.append(input().strip())
    b.append(len(a[i]))
print('length=',max(b),sep='')

这两种写法本质其实是一样的。

4、输出10个不重复的英文字母

随机输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来。 如没有10个英文字母,显示信息“not found”

输入格式:
在一行中输入字符串

输出格式:
在一行中输出最左边的10个不重复的英文字母或显示信息“not found"
输入样例1:

poemp134

输出样例1:

not found

输出样例2:

This is a test example

输出样例2:

Thisaexmpl

# 要求:随机输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来。
# 如没有10个英文字母,显示信息“not found”
# String模块 ascii_letters 和 digits 方法:ascii_letters是生成所有字母,
# 从a-z和A-Z,digits是生成所有数字0-9
from string import digits  # 所有数字
from string import ascii_letters as al #所有字母
def prt(s): # 筛选函数
    re='' #
    for i in s:
        if i in al and i.lower() not in re and i.upper() not in re: # 判断字符是否是字母并且是否重复,并筛选出来
            re += i
    return re
st = input().translate(str.maketrans('','',digits)) # 去除字符串中所有的数字
re = prt(st)
if len(re)<10:
    print("not found")
else:
    print(re[:10])

maketrans()方法:https://www.runoob.com/python3/python3-string-maketrans.html
translate()方法:https://www.runoob.com/python3/python3-string-translate.html

5、统计一段文字的单词个数并按字母顺序排序输出

现需要统计若干段文字(英文)中的不同单词数量。
如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。

注1:单词之间以空格(1个或多个空格)为间隔。
注2:忽略空行或者空格行。
注3:单词大小写敏感,即’word’与’WORD’是两个不同的单词 。 ###输入说明 若干行英文,最后以!!!为结束。

###输出说明 不同单词数量。 然后输出前10个单词(按字母顺序),如果所有单词不超过10个,则将所有的单词输出。

输入样例:

Failure is probably the fortification in your pole
It is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
when you Are wondering whether new money it has laid
background Because of you, then at the heart of the
most lax alert and most low awareness and left it
godsend failed
!!!

输出样例:

49
Are
Because
Failure
It
a
alert
and
are
as
at

def prt(li):
    for i in li:
        print(i)
sent=""
s=input()
while s!="!!!!!":
    sent=sent + " " + s
    s = input()
li = [list(i) for i in list(set(sent.split()))] # 列表推导式;set()集合去重;(这里列表元素是列表)
li.sort()     #排序
li=[''.join(i) for i in li] # 将子列表转换为字符串
print(len(li))
prt(li[:10]) if len(li)>=10 else prt(li) # 在一定条件下调用函数

使用 while 判断输入,输入存放在sent 变量中,对于sent 进行切割(split( )方法)、去重(可以用集合去重)、排序处理,最后存在一个列表中,输出长度和对应的内容。
列表推导式http://blog.itpub.net/69914838/viewspace-2640257/

6、字典合并

字典合并。输入用字符串表示两个字典,输出合并后的字典,字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!

输入格式:
在第一行中输入第一个字典字符串 在第二行中输入第二个字典字符串

输出格式:
在一行中输出合并的字典,输出按字典序。"1"的ASCII吗为49,大于1,排序时1在前,"1"在后,其它的也一样。

输入样例1:

{1:3,2:5}
{1:5,3:7}

输出样例1:

{1:8,2:5,3:7}

输入样例2:

{“1”:3,1:4}
{“a”:5,“1”:6}

输出样例2:

{1:4,“1”:9,“a”:5}

from collections import Counter
dict1 = eval(input())
dict2 = eval(input())
dic = dict(Counter(dict1) + Counter(dict2))  # 用Counter()进行字典合并,然后恢复dict形式
sort_dic = dict(sorted(dic.items(),key=lambda x:ord(x[0]) if type(x[0])==str else x[0]))
s = str(sort_dic).replace(" ","").replace("'","\"")
print(s)

Counter类https://www.cnblogs.com/Eva-J/articles/7291842.html
字典(Dictionary) items()方法https://www.runoob.com/python/att-dictionary-items.html

7、最大公约数&最小公倍数

本题要求从键盘输入两个整数(以逗号间隔),编程求出这两个数的最大公约数和最小公倍数

说明:求最大公约数可用辗转相除法,最小公倍数用两数的积除以最大公约数
在这里插入图片描述

a,b = map(int,input().split(","))
if a<b:
    a,b = b,a
lcm = a*b   #辗转相除求最大公约数
gcd = a%b
while(gcd):
    a,b = b,gcd
    gcd = a%b
lcm /= b    # 最小公倍数=两个数的乘积除以最大公约数
print("GCD:%d, LCM:%d"%(b,lcm))

8、输出全排列

输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。
在这里插入图片描述

n = int(input())
import itertools
items = map(str,range(1,n+1))
for p in itertools.permutations(items):
    print("".join(p))

要点:itertools.permutations 返回可迭代对象的所有数学全排列方式。

9、输出<=n的全部回文数

数字121从左往右读与从右往左读是一样的,这种数称为回文数。请使用for循环以及切片方法设计一个程序, 找出>=0并且<=n的全部回文数。

注意:单个的数字0,数字1,… 数字9也认为是回文数。
在这里插入图片描述

def IsF(s):
    for i in range(len(s)):
        if s[i]!=s[len(s)-i-1]:
            return 0
    return 1

n = int(input())
for i in range(n+1):
    if(IsF(str(i))):
        print(i)

要点:将数字转化为字符串,for循环遍历对比即可。

10、重复元素判定

每一个列表中只要有一个元素出现两次,那么该列表即被判定为包含重复元素。
编写函数判定列表中是否包含重复元素,如果包含返回True,否则返回False。
然后使用该函数对n行字符串进行处理。最后统计包含重复元素的行数与不包含重复元素的行数。
在这里插入图片描述

n = int(input())
t,f = 0,0
for i in range(n):
    li = input().split()
    se = set(li)
    if len(li)==len(se):
        f += 1    # 不包含重复元素的个数
    else:
        t += 1    # 包含重复元素的个数
print("True=%d, False=%d"%(t,f))

要点:可以先用 set() 去重,然后再比较对应列表和集合的长度。

猜你喜欢

转载自blog.csdn.net/weixin_43624626/article/details/113064389
今日推荐