python题目练习

1.计算对称平方数

题目描述

打印所有不超过n(n<256)的,其平方具有对称性质的数,如11*11=121。

输入描述

输出描述

每行一个数,表示对称平方数

def f(n):
    flag = True
    sum = n * n
    sum_str_list = [i for i in str(sum)]
    a, b = divmod(len(str(sum)), 2)
    for i in range(0,len(sum_str_list)//2):
        if b > 0:
            if sum_str_list[len(sum_str_list)//2-i-1] == sum_str_list[len(sum_str_list)//2+i+1]:
                continue
            else:
                flag = False
                break
        else:
            if sum_str_list[len(sum_str_list)//2-i-1] == sum_str_list[len(sum_str_list)//2+i]:
                continue
            else:
                flag = False
                break
    if flag:
        print(n)

    else:
        pass


if __name__ == '__main__':
    for i in range(1, 257):
        f(i)
View Code

2、找出所有三位数组合

题目描述

有1、2、3、4四个数字,要求任选三个,组成一个三位数,每位数字各不相同,输出所有三位数组合。

输入描述

输出描述

打印所有三位数组合

a_list = ['1','2','3','4']


def get_num_list(num,arg):
    arg.remove(num)
    return arg

for a in a_list:
    for b in get_num_list(a,a_list.copy()):
        if b == a:
            continue
        else:
            for c in get_num_list(b,a_list.copy()):
                if c == a or c == b :
                    continue
                else:
                    print(c + a + b)
                    print(a + c + b)
                    print(c + b + a)
                    print(a + b + c)
                    print(b + a + c)
                    print(b + c + a)
View Code

2、找出所有三位数组合(改良)

上述程序输出有点繁琐,改良如下。

1 for i in range(1,5):
2     for j in range(1,5):
3         for k in range(1,5):
4             if i!=k and i!=j and j!=k:
5                 print(i,j,k)

3、斐波那契数列

题目描述

打印0,1,1,2,3,5,......

输入描述

输出描述

输出0,1,1,3,5,......规律的数

def feibo(n):
    if n == 0:
        return 0
    if n==1:
        return 1
    return feibo(n-1)+feibo(n-2)

for i in range(10):
    print(feibo(i))

 

3、字符串查找

题目描述

给一字符串,查找字符串出现最多的字符,并打印该字符。

输入描述

 输入一个字符串

输出描述

输出该字符传出现次数最多的字符

def get_str_dict(string):
    str_dict = {}
    for s in string:
        if s in str_dict.keys():
            str_dict[s] += 1
        else:
            str_dict[s] = 1
    return str_dict

def get_max_str_value(str_dict):
    count = 0
    s_char = ''
    for key, value in str_dict.items():
        if value > count:
            count = value
            s_char = key
    return s_char, count


if __name__ == "__main__":
    string = input('>>:').strip()
    str_dict = get_str_dict(string)
    s,count = get_max_str_value(str_dict)
    print(s,count)

 

4、日期累加

题目描述

设计一个程序能计算一个日期加上若干天后是什么日期。

输入描述

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出描述

输出m行,每行按yyyy-mm-dd的个数输出。
import sys
import datetime

def add_time(year,month,day,add_days):
    in_time = datetime.date(year=year,month=month,day=day)

    add_time = datetime.timedelta(days=add_days)
    out_time = in_time + add_time
    print(out_time)


if __name__ == "__main__":
    n = sys.stdin.readline().strip()
    for i in range(int(n)):
        in_str = sys.stdin.readline().strip().split()
        add_time(int(in_str[0]), int(in_str[1]),int(in_str[2]),int(in_str[3]))

  

5、贴邮票

题目描述

某人有8 角的邮票5 张,1 元的邮票4 张,1 元8 角的邮票6 张,用这些邮票中的一张或若干张可以得到多少中不同的邮资?

输入描述

输出描述

输出一行,表示题目所求。
a_list = []
for i in range(6):
    for j in range(5):
        for k in range(7):
            a_list.append(i*8+j*10+k*18)
print(len(set(a_list)))

6.图片验证码生成

import random
from io import BytesIO

from PIL import Image, ImageDraw, ImageFont


class CodeImage(object):

    _source = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

    _mode = 'RGB'

    _bg_color = (255, 255, 240)

    def __init__(self,size=(90, 30)):
        # 初始化画布,初始化画笔
        self._size = size
        self.image = Image.new(self._mode, self._size, self._bg_color)
        self.draw = ImageDraw.Draw(self.image, self._mode)


    def get_color(self):
        '''获取随机rgb'''
        return (random.randint(64, 200), random.randint(0,200), random.randint(0, 200))

    def get_str(self, length):
        '''获取随机字符串'''
        code = random.sample(self._source, length)
        return ''.join(code)

    def get_point(self):
        '''获取坐标'''
        point = (random.randrange(self._size[0])+1,random.randrange(self._size[1]+1))
        return point

    def draw_text(self,code):
        '''画文本内容'''
        length = len(code)
        font = ImageFont.truetype('Monaco.ttf', self._size[1]-3)
        x = 10
        y = 0
        for i in range(length):
            x = i * (self._size[0]/length) + 5
            self.draw.text(xy=(x,y),text=code[i],font=font,fill=self.get_color())

    def draw_point(self, num):
        '''画干扰点'''
        for i in range(num):
            self.draw.point(xy=self.get_point(), fill=self.get_color())

    def draw_line(self):
        '''画干扰线'''
        for i in range(random.randrange(4)):
            self.draw.line((self.get_point(),self.get_point()), fill=self.get_color())

    def save_image(self,num=500):
        code = self.get_str(4)
        self.draw_text(code)
        self.draw_line()
        self.draw_point(num)
        self.image.save('code.jpg')
        return code

    def save_image_io(self,num=500,image_format='png'):
        '''保存图片为io流'''
        code = self.get_str(4)
        self.draw_text(code)
        self.draw_line()
        self.draw_point(num)
        fp = BytesIO()
        self.image.save(fp=fp,format=image_format)
        return code,fp


CodeImage().save_image()

7、两数之和

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

输入描述

nums = [2, 7, 11, 15], target = 9

输出描述

[0,1]
 def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            num = target - nums[i]
            for j in range(i+1,len(nums)):
                if nums[j] == num:
                    return [i,j]
        return []  

 方式二

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        adict = {}
        for i,item in enumerate(nums):
            num = target - item
            if num in adict.keys():
                return [i,adict.get(num)]
            adict.update({item:i})
        return []  

  



原文地址:https://www.cnblogs.com/snow-wolf-1/p/10558872.html