一、常用输入语句
输入数字
1、输入一个数
num = input()
2、输入两、三个数,用空格隔开
x, y = map(int, input().split())
3、输入数字数组
nums = [int(i) for i in input().split()]
4、输入二维数组
str_lst = []
n = 3
for i in range(n):
nums = [int(j) for j in input().split()]
str_lst.append(nums)
print(str_lst)
输入字符串
1、输入字符串数组
str = list(input().split())
2、输入二维字符串数组
str_lst = []
n = 3
for i in range(n):
nums = [j for j in input().split()]
str_lst.append(nums)
print(str_lst)
3、无穷大的表示
INF = float('inf')
4、字典的输入
dic = {}
for i in range(3):
a, b = [j for j in input().split()]
dic[a] = b
print(dic)
5、集合的创建
集合的的创建只能用set()创建,不可以直接s = {}, 会被误以为是字典。
s = set()
s = {'a', 'b', 'c'}
print(s)
二、常用输出语句
1、输出之间用空格隔开
join方法,要求它所连接的序列元素必须都是字符串类型。
a = [1, 2, 3, 4]
print(" ".join(map(str, a)))
2、输出后不换行
a = [1, 2, 3, 4]
for i in a:
print(i, end = ' ')
3、四舍五入成int
a = 3.14
print(int(a + 0.5))
b = 3.67
print(int(b + 0.5))
4、保留几位小数
法一:%
a = 3.1415926
print("%.2f"%a)
法二:round
使用round(num):
小数位数等于5时,看整数是奇数还是偶数;
奇数向上取整,偶数向下取整,其他使用四舍五入。
print(rount(3.12)) #3
print(rount(3.78)) #4
print(rount(4.78)) #5
print(rount(3.5)) #4
print(rount(4.5)) #4
使用round(num, 保留几位小数):
保留位数的下一位等于5时,看整数是奇数还是偶数
奇数向下保留,偶数向上保留,其他使用四舍五入
print(rount(3.125, 1)) #3.1
print(rount(3.126, 2)) #3.13
print(rount(3.125, 2)) #3.12
print(rount(4.125, 2)) #3.13
5、用format函数输出多个值
a = 3
b = 7
c = 10
print("{} + {} = {}".format(a, b, c))
6、输出对齐
name = "Alice"
age = 10
print("Name:{:*<10} Age:{}".format(name, age))
三、排序
数组排序
1、一维数组
sort会改变原列表,返回nums.sort()返回的是None
sorted()不会改变原列表
nums = [1, 6, 3, 2, 5, 4]
nums.sort()
#逆序排序
nums.sort(reverse = True)
print(nums)
nums1 = [2, 6, 9, 0, 3]
print(sorted(nums1))
print(nums1)
2、二维数组根据某一个元素排序
nums = [[2, 4, 6], [3, 7, 0], [1, 5, 6]]
print(sorted(nums, key = lambda x:x[2]))
字典排序
dic = {'A':'1', 'F':'7', 'C':'5'}
#根据键排序
print(sorted(dic.items(), key = lambda x:x[0]))
#根据值排序
print(sorted(dic.items(), key = lambda x:x[1]))
四、日期库
1、日期+时间
datetime.datetime(year, month, day, hour, minute, second, microsecond)
2、日期
datetime.date(year, month, day)
3、时间
datetime.time(hour, minute, second, microsecond)
4、把一个day数字变为可加减的时间差
datetime.timedelta(dat)
5、表示星期几,0:周一, 6:周日
weekday()
import datetime
daytime1 = datetime.datetime(2001, 5, 7, 5, 7, 45, 5)
print(daytime1) #输出:2001-05-07 05:07:45.000005
day1 = datetime.date(2024, 4, 8)
print(day1) #输出2024-09-28
time1 = datetime.time(5, 7, 45, 5)
print(time1) #输出05:07:45.000005
datetime.timedelta(1)
day1.weekday()
print(day1.weekday())
五、二分法
二分搜索从中间的元素着手,如果这个元素就是目标元素,那就例即停止搜索,如果不是,则可以利用列表的特性,排除一半的元素,如果目标元素比中间的元素大,就可以直接排除列表左半部分和中间的元素。
使用场景:已知一个有序序列,要找某个数,求需要查找的次数或该数的索引值
法1:
#纯算法
arr_list = [5, 7, 11, 22, 27, 33, 39, 52, 58]
num = 11
left = 0
right = len(arr_list) - 1
count = 0
while left <= right:
middle = (left + right) // 2
count += 1
if num < arr_list[middle]:
right = middle - 1
elif num > arr_list[middle]:
left = middle + 1
else:
print("这个数{}的索引是{}".format(arr_list[middle], middle))
break
else:
print("找不到")
print("查找次数为" + str(count) + "次")
#递归
#题目描述:用递归函数实现二分查找数组元素。补充:要求给定数组采用如下代码定义:
#///int data[200];
# for(i = 0; i < 200; i++)
# data[i] = 4 * i + 6;
#///
def binary_search(arr, target, left, right):
if left <= right:
middle = (left + right) // 2
if target < arr[middle]:
right = middle - 1
elif target > arr[middle]:
left = middle + 1
else:
return middle
return binary_search(arr, target, left, right)
else:
return -1
data = []
for i in range(200):
data.append(4 * i + 6)
num = int(input())
l = 0
r = len(data) - 1
print(binary_search(data, num, l, r))