python编程小练习题

内容目录

  该博文旨在记录一些日常python基础练习的题目及实现,用于熟练python基础数据结构的用法,以及一些比较好的算法思路。
  
  

# 1. 反转一个三位数

# 反转一个三位数的整数,如输入123,输出321;输入900,输出9

# 代码顺序编写
num = int(input("请输入一个三位数的整数:"))

ge = num%10
shi = num//10%10
bai = num//100

print("反转后的数字是:", ge*100+shi*10+bai)
请输入一个三位数的整数:123
反转后的数字是: 321
# 使用面向对象编程

class Solve():
    def reverse_num(self,num):
        ge = num%10
        shi = num//10%10
        bai = num//100

        return ge*100+shi*10+bai*1

# 代码顺序编写
num1 = int(input("请输入一个三位数的整数num1:"))
num2 = int(input("请输入一个三位数的整数num2:"))

print("num1反转后的数字是:", Solve().reverse_num(num1))
print("num2反转后的数字是:", Solve().reverse_num(num2))
请输入一个三位数的整数num1:123
请输入一个三位数的整数num2:900
num1反转后的数字是: 321
num2反转后的数字是: 9
# 2. 合并数组排序

# 合并两个升序的整数数组A和B,形成一个新的数组,新数组也要有序。
# 举例:A=[1],B=[1],输出[1,1],返回合并后的数组。输入A=[1,2,3,4],B=[2,4,5,6],
# 输出[1,2,2,3,4,4,5,6],返回合并所有元素后的数组。

# 不要脸实现法

A=[1,2,3,4]
B=[2,4,5,6]

print(sorted(A+B))
[1, 2, 2, 3, 4, 4, 5, 6]
A=[1,2,3,4]
B=[2,4,5,6]

A.extend(B)
A.sort()

print(A)
[1, 2, 2, 3, 4, 4, 5, 6]
from heapq import merge

A=[1,2,3,4]
B=[2,4,5,6]

res = list(merge(A, B))

print(str(res))
[1, 2, 2, 3, 4, 4, 5, 6]
# 自己编写算法实现
# 这里面其实可以有很多思考,比如如果为了降低空间复杂度,不使用新的变量result,怎么达到要求,
# 因为列表的长度是变得,所以最好不要在该列表的遍历中(不管是用for还是其他),对列表进行修改操作。
# 这里需要注意避坑。
A = [1,2,3,4]
B = [2,4,5,6]
result = []
i, j = 0,0

while i < len(A) and j < len(B):
    if A[i] < B[j]:
        result.append(A[i])
        i = i+1
    else:
        result.append(B[j])
        j = j+1

result = result + A[i:] + B[j:]
print (str(result))
[1, 2, 2, 3, 4, 4, 5, 6]
# 3. 给定一个字符串和一个偏移量,根据偏移量原地从左向右旋转字符串

# 举例:输入str="abcdefg",offset=3,输出"efgabcd",输入str="abcdefg",offset=0,输出"abcdefg"
# 输入str="abcdefg",offset=1,输出"gabcdef",输入str="abcdefg",offset=2,输出"fgabcde"

in_str = input("输入字符串:")
offset = int(input("请输入偏移数:"))

in_lst = list(in_str)

if offset>len(in_str):
    print("偏移量超过字符串长度!")
elif offset==0:
    print(in_str)
else:
    tmp1 = in_lst[-offset:]
    tmp2 = in_lst[:len(in_lst)-offset]
    print(''.join(tmp1+tmp2))
输入字符串:abcdefg
请输入偏移数:2
fgabcde
# 4. 二分查找

# 给定一个排序的整数数组(升序)和一个要查找的目标整数target,查找到target第一次出现的下标
# (从0开始),如果target不存在于数组中,返回-1.

# 示例:输入数组[1,4,4,5,7,7,8,9,9,10]和目标整数1,输出其所在位置为0,即第一次出现在第0个位
# 置。输入数组[1,2,3,3,4,5,10]和目标整数3,输出位置2,即3第一次出现在第2个位置。

class Solution:
    # 参数nums:整数数组
    # 参数target:要查找的目标数字
    # 返回值:目标数字的第1个位置,从0开始
    def binarySearch(self,nums,target):
        return self.search(nums,0,len(nums)-1,target)
    def search(self,nums,start,end,target):
        if start > end:
            return -1
        mid = (start + end)//2
        if nums[mid] > target:
            return self.search(nums,start,mid,target)
        if nums[mid] == target:
            return mid
        if nums[mid] < target:
            return self.search(nums,mid,end,target)

# 主函数
if __name__ == "__main__":
    my_solution = Solution()
    nums = [1,2,3,4,5,6]
    target = 3
    targetIndex = my_solution.binarySearch(nums,target)
    print("输入:nums = ",nums,"target = ",target)
    print("输出:",targetIndex)
输入:nums =  [1, 2, 3, 4, 5, 6] target =  3
输出: 2

发表回复