python学习——算法训练,从入门开始

python刷题训练集
第一天

1.取近似值

def func():
	num = float(input())
	res = num + 0.5
	f = int(res)
	print(f)

func()

2.提取不重复整数
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是 0 。

a = input()
a = a[::-1] #翻转字符串
num = []
for i in a:
    if i in num: #重复的就跳过,不写进列表里
        continue
    else:
        num.append(i)
        print(i,end='')

3.截取字符串
输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出

while True:
    try:
        ss = input()
        k = int(input())
        for m in range(k):
            print(ss[m],end="")
    except:
        break

4.输入n个整数,输出最小的k个
输入n个整数,找出其中最小的k个整数并按升序输出

while True:

	try:
	
	    m, n = [int(i) for i in input().split()] 
	    num_list = [int(j) for j in input().split()]
	    
	    num_list.sort()
	    new_list = num_list[:n]
	    print(' '.join([str(i) for i in new_list]))
	    
	except:
	    break

5.输入整型数组和排序标识,对其元素按照升序或降序进行排序

n = int(input())
l = list(map(int, input().split()))   #将输入的字符串转换成列表
m = int(input())
        
if m == 0:
    l.sort()
    l = map(str,l)    #将列表转会字符串
    print(' '.join(l))
elif m == 1:
    l.sort(reverse = True)
    l = map(str,l)
    print(' '.join(l))

6.计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)

while True:
    try:
        in_str = input()
        if len(in_str) > 5000 or len(in_str) == 0:
            raise Exception

        last = in_str.strip().split(" ")[-1]
        leng = len(last)
        print(leng)
        break
    except Exception:
        print("字符串非空且长度小于5000,请再次输入:")

7.计算某字符出现次数
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

def ge_num():
    fir_line = input()
    sec_line = input()
    if len(sec_line) == 0 or len(sec_line) >1:
        return "第二行填入一个字符:"
    leng = len(fir_line.strip().lower().split(sec_line.lower()))-1

    return leng
print(ge_num())

8.字符串分隔
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

while True:
    try:
        l = input()
        for i in range(0, len(l), 8): #0-字符串的长度,按8个单位拆分
            print("{0:0<8s}".format(l[i:i+8]))
    except:
        break

9.进制转换
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

while True:
    try:
        number = input()
        n = len(number)
        dic = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
        final = 0
        for i in range(2,n):
            final += dic[number[i]]*(16**(n-i-1))
        print(final)
    except:
        break

10.质数因子
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

import math
n = int(input())
for i in range(2, int(math.sqrt(n))+1):
	# 一个数可以被它所有的质因子表示
    # 这里仅考虑不大于根号下n的因子
    # 因为当n被所有不大于根号下n的【质】因子整除后,要么余1,要么余2,
    # 要么会剩下一个且仅会剩下一个大于等于根号下n小于等于n的质数
    #(不可能出现两个不相等且同时大于根号下n的质因子a和b,这会导致a*b>n)

    while n % i == 0:
        # 第一个能被整除的一定是最小的质数因子(如果是合数,一定有2<=x
        # 后续能被整除的也一定是质数,若是合数,则合数的质因子肯定出现在之前,不成立
        print(i, end=' ')  # 得到的每个i都是n的质因子(即列举重复的质因子)
        n = n // i  # n不断变小,确保没有i这个质因子
        # 双除号:输出整数
if n > 2:
    print(n)

11.合并表记录
先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

n= int(input())
d = {}
for i in range(n):
    ab = input().split(" ")
    a,b = int(ab[0]), int(ab[-1])
    if a not in d:
        d[a] = b
    elif a in d:
        d[a] = d[a] + b
for i in sorted(d.keys()):
    print(i,d[i])

12.字符个数统计
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

def count_character(str):
    string = (set(str))  # 去重后以字符串的形式
    count = 0                   # 开始计数
    for item in string:
        if 0 <= ord(item) <= 127: # ASCII码范围要求
            count += 1         # 计数
    return count 

str = input()
print(count_character(str))

13.数字颠倒
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

n = input()
n = n[::-1]
print(n)

14.字符串反转
接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

n = input()
n = n[::-1]
print(n)

15.字符串排序
给定 n 个字符串,请对 n 个字符串按照字典序排列。

n = int(input())
d = []
for i in range(n):
    a = input()
    d.append(a)
d.sort()
for i in range(n):
    print(d[i])

16.求int型正整数在内存中存储时1的个数
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。

bin_num = int(input().strip())
res = 0
while bin_num:
    res+=1
    bin_num &= bin_num-1
print(res)

17.句子逆序
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

s=input().split()  #接收输入内容
s1=s[::-1]  #把输入内容倒序排列
for x in s1:
    print(x,end=" ")  #输出元素之间用空格分隔

你可能感兴趣的:(python,哈希算法)