25道Python练手题(附详细答案),赶紧收藏!_python题库

count = len(pop_list)
print(‘没排序之前的列表’,pop_list)

for i in range(count-1):
for j in range(count-i-1):
if pop_list[j] > pop_list[j + 1]: # 如果要降序就是改成 < 号
pop_list[j],pop_list[j+1] = pop_list[j+1],pop_list[j]
print(‘排好序的列表为’,pop_list)

排好序的列表为 [15, 15, 31, 37, 41, 82]

排好序的列表为 [12, 14, 19, 29, 37]


##### 题目 9:二分查找法


二分法是一种效率比较高的搜索方法


回忆之前做过的猜数字的小游戏,预先给定一个小于 100 的正整数 x,让你猜,猜测过程中给予大小判断的提示,问你怎样快速地猜出来?我们之前做的游戏给定的是 10 次机会,如果我们学会二分查找法以后,不管数字是多少,最多只需要 7 次就能猜到数字


* 二分查找法


首先先猜 50,如果猜对了,结束;如果猜大了,往小的方向猜,再猜 25;如果猜小了,往大的方向猜,再猜 75;…每猜测 1 次就去掉一半的数,这样我们就可以逐步逼近预先给定的数字.这种思想就是二分法。


二分法适用情况


* 必须是有序的序列。
* 对数据量大小有要求。
* 数据量太小不适合二分查找,与直接遍历相比效率提升不明显。
* 数据量太大也不适合用二分查找,因为数组需要连续的存储空间,若数据量太大,往往找不到存储如此大规模数据的连续内存空间


算法思路:


假设有一个有序列表:[5,7,11,22,27,33,39,52,58]


请问数字 11 是否在此列表中,如果在它的索引值为多少?


* 首先我们取有序列表的中间位置 27 和 11 进行比较 我们发现 11 是小于 27 的
* 所以我们排除 27 右边的数字,保留列表为:[5,7,11,22]
* 接着我们取 [5,7,11,22] 位置中间的 7 和 11 比较 发现 11 是大于 7 的 所以我们排除 7 左边的数字,保留列表为:[11,22]
* 最后我们取 11 和 22 的中间位置
* 刚好到了 11 这时候就可以返回 11 的索引值了,如果没有找到就提示不存在


###### 第1种 纯算法的方式



arr_list = [5,7,11,22,27,33,39,52,58]
number = 11
count = 0
left = 0
right = len(arr_list)-1
while left<=right:
middle = (left+right)//2
count += 1
if number > arr_list[middle]:
left = middle +1
elif number < arr_list[middle]:
right = middle - 1
else:
print(f’数字{number}已找到,索引值为{middle}‘)
break
else:
print(f’数字{number}没有找到’)
print(f’一共用了{count}次查找’)

数字11已找到,索引值为2, 一共用了3次查找


###### 第2种 递归函数的方式



arr_list = [5,7,11,22,27,33,39,52,58]

def binary_search(number,left,right):
if left <= right:
middle = (left + right) // 2
if number < arr_list[middle]:
right = middle - 1
elif number > arr_list[middle]:
left = middle + 1
else:
return middle
return binary_search(number,left,right)
else:
return -1

print(binary_search(11,0,len(arr_list)-1))


##### 题目 10:选择排序


基本思想:从未排序的序列中找到一个最小的元素,放到第一位,再从剩余未排序的序列中找到最小的元素,放到第二位,依此类推,直到所有元素都排序完毕


* 若列表为 [6, 8, 3, 5, 9, 10, 7, 2, 4, 1],先找到 1 最小 调换到第 1 个位置
* 得到列表[1, 8, 3, 5, 9, 10, 7, 2, 4, 6],接着是 2 最小 调换到第 2 个位置
* 得到列表[1, 2, 3, 5, 9, 10, 7, 8, 4, 6],接着是 3 最小 位置不变
* 得到列表[1, 2, 3, 5, 9, 10, 7, 8, 4, 6],接着是 4 最小 调换到第 4 个位置
* 得到列表[1, 2, 3, 4, 9, 10, 7, 8, 5, 6],接着是 5 最小 调换到第 5 个位置
* 得到列表[1, 2, 3, 4, 5, 10, 7, 8, 9, 6],接着是 6 最小 调换到第 6 个位置
* 得到列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],接着是 7 最小 位置不变
* 得到列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],接着是 8 最小 位置不变
* 得到列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],接着是 9 最小 位置不变
* 得到列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],接着是 10 最小 位置不变,排序完成



import random as rd

sec_list = [rd.randint(1,100) for i in range(8)]

sec_list = [91,30,93,98,26,98,20,90]

length = len(sec_list)
print(f’未排序的列表为:{sec_list}')

for i in range(length -1):
min_index = i
for j in range(i + 1,length):
if sec_list[min_index] > sec_list[j]:
min_index = j
sec_list[min_index],sec_list[i] = sec_list[i],sec_list[min_index]
print(f’第{i+1}轮排好序是:{sec_list}‘)
print(f’最终排好序的列表为:{sec_list}’)

未排序的列表为:[91, 30, 93, 98, 26, 98, 20, 90]

第1轮排好序是:[20, 30, 93, 98, 26, 98, 91, 90]

第2轮排好序是:[20, 26, 93, 98, 30, 98, 91, 90]

第3轮排好序是:[20, 26, 30, 98, 93, 98, 91, 90]

第4轮排好序是:[20, 26, 30, 90, 93, 98, 91, 98]

第5轮排好序是:[20, 26, 30, 90, 91, 98, 93, 98]

第6轮排好序是:[20, 26, 30, 90, 91, 93, 98, 98]

第7轮排好序是:[20, 26, 30, 90, 91, 93, 98, 98]

最终排好序的列表为:[20, 26, 30, 90, 91, 93, 98, 98]


##### 题目 11:剪刀石头布


* 游戏开始,初始状态下用户和电脑都有 100 分,赢一局+10 分,输一局-10 分。
* 当用户为 0 分时,游戏结束,提示游戏结束,比赛输了
* 当用户为 200 分时,游戏结束,提示游戏结束,赢得比赛、每轮比赛都输出当前的分数
* 1 代表剪刀 2 代表石头 3 代表布



import random as rd

print(‘=’ * 60)
print(’ ’ * 20, ‘剪刀石头布游戏’)
print(‘1代表剪刀 2代表石头 3代表布’)

game_info = {1: “剪刀”, 2: “石头”, 3: “布”}
score = 100

while True:
robots_choice = rd.randint(1, 3)
user_choice = input(“请出拳”)
if user_choice not in ‘123’:
print(‘出拳错误,请重新出拳’)
continue
user_choice = int(user_choice)
print(‘’ * 60)
print(f’电脑出{game_info[robots_choice]}‘)
print(f’你出{game_info[user_choice]}’)
print('
’ * 60)
if user_choice == 1 and robots_choice == 3 or user_choice == 2 \
and robots_choice == 1 or user_choice == 3 and robots_choice == 2:
score += 10
print(f’你赢得本轮游戏,当前分数为{score}‘)
elif user_choice == robots_choice:
print(f’本轮游戏平局,当前分数为{score}’)
else:
score -= 10
print(f’你输了本轮游戏,当前分数{score}')
if score >= 200:
print(‘游戏结束,你赢得比赛’)
break
elif score <= 0:
print(‘游戏结束,你输了’)
break


##### 题目 12:快乐数


在给定的数字下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必定为 1


比如数字:19


* 第 1 轮:(1\_1)+(9\_9) =1 + 81 = 82
* 第 2 轮:(8\_8)+(2\_2) =64 + 4 = 68
* 第 3 轮:(6\_6)+ (8\_8) =36 + 64 = 100
* 第 4 轮:(1\_1) + (0\_0) + (0\*0) = 1



def sum_square(n):
sum = 0
for i in str(n):
sum += int(i) ** 2
return sum

list1 = []
n = int(input(‘请输入数字:’))
while sum_square(n) not in list1:
n = sum_square(n)
list1.append(n)

if n == 1:
print(‘是快乐数’)
else:
print(‘不是快乐数’)


##### 题目 13:猜年龄(一)


小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的 6 倍“。小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过 8 岁啊。“ 请你写出:小明的较小的妹妹的年龄。



for i in range(1,100):
for j in range(1,i):
if ij == 6(i+j) and i-j<8:
print(i,j)

15 10


##### 题目 14:猜年龄(二)


美国数学家维纳(N.Wiener)智力早熟,11 岁就上了大学。他曾在 1935~1936 年应邀来中国清华大学讲学。


一次,他参加某个重要会议,年轻的脸孔引人注目。


于是有人询问他的年龄,他回答说:


“我年龄的立方是个 4 位数。我年龄的 4 次方是个 6 位数。这 10 个数字正好包含了从 0 到 9 这 10 个数字,每个都恰好出现 1 次。“


请你推算一下,他当时到底有多年轻?



for i in range(10,30):
i3 = str(i ** 3)
i4 = str(i ** 4)
if len(i3) == 4 and len(i4) == 6:
if len(set(i3+i4)) == 10:
print(i)
print(i3 + i4)

18

5832104976 舍去


##### 题目 15:split 算法实现


split 是 python 字符串内置的一个非常有用的方法


* 它可以将一个字符串通过分隔符切成我们想要的列表
* 比如现在我们有个字符串 life-is-short-you-need-python 每一个单词之间使用分隔符“-”进行分割
* 当我们去调用字符串 split 的方法之后传入我们的分隔符“-”,那我们就会得到一个列表列表里面每个元素其实就是通过分隔符切出来的子字符串
* 那这个算法该怎么样去实现呢?python 内置的 split 方法是通过 C 语言实现的,我们今天去写一个函数,去实现和 split 相同的功能
* 我们先来讲下算法该怎么样去实现,这个算法需要我们对字符串进行迭代,我们先去定义一个初始化的指针,因为我们切片的时候需要从哪一个开始的位置进行切
* 所以我们先要初始化一个指针我们可以定义一个指针变量,默认值为 0,紧接着我们开始对字符串进行迭代
* 当碰到第一个分隔符的时候,我们是不是会获取到当前分隔符的索引,那这个时候,我们就把初始的指针开始到分隔符结束对字符串进行切片
* 因为我们字符串是遵守左闭右开的,你的结束索引写的是分隔符的索引,所以只会切到 life,我们并把它添加到列表里面
* 紧接着添加完之后呢,我们需要把初始化的指针修改一下位置,修改到哪个地方呢?修改到我们第一次碰到的分隔符的下一个位置也就是 i,紧接着继续进行迭代
* 迭代之后发现第二个分隔符,是不是还有一个分隔符的索引,这个时候我们继续向字符串进行切片,切片的开始位置是你的 i 这个位置的指针,结束的位置是第二个 - 的指针,那遵循左闭右开,所以我们 is 这个单词,也可以添加进列表
* 就这样一直到最后呢,当我们去迭代到最后一个字符 n 的时候,发现后面是没有横杆分隔符了,这个时候我们需要进行处理一下,需要进行去判断一下,如果我们迭代到的字符是最后一个字符,那么我们进行切片的时候,就应该从哪个地方切呢?
* 从 p 开始 ,如果切到 n,我们只能取到 pytho,少切一个 n,所以到 n + 1 的位置,好,知道这个流程我们就用代码去实现这个算法



def split_s(string, sep=“”, num=0):
split_words = []
last_index = 0
count = 0
for index, char in enumerate(string):
if count == num and num > 0:
split_words.append(string[last_index:len(string)])
break
if char == sep:
split_words.append(string[last_index:index])
last_index = index + 1
count += 1
elif index + 1 == len(string):
split_words.append(string[last_index:index + 1])
return split_words

print(split_s(“life-is-short-you-need-python”,‘-’))

[‘life’, ‘is’, ‘short’, ‘you’, ‘need’, ‘python’]

print(split_s(“life-is-short-you-need-python”,‘-’,2))

[‘life’, ‘is’, ‘short-you-need-python’]


##### 题目 16:大衍数列


中国古代文献中,曾记载过“大衍数列”,主要用于解释中国传统文化中的太极衍生原理 它的前几项是:0、2、4、8、12、18、24、32、40、50… 其规律是:偶数项,是序号平方再除 2,奇数项,是序号平方减 1 再除 2。打印大衍数列的前 100 项



for x in range(1,101):
if x % 2 == 0: # 偶数
a = int((x ** 2) / 2)
else: # 奇数
a = int((x ** 2 - 1) / 2)
print(a)

0

2

4

8

12

18

24

32

40

50


##### 题目 17:单词分析


小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词


现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数 其实就是让你输入一段字符串后,得到当前字符串出现最多的字母和它的次数



输入:HelloWorld
输出:
l # 小写字母 l
3 # 小写字母 l,出现了3次,出现次数最多


* 我们可以对当前的字符串进行循环迭代,然后把字符串当前每个字符当作 key 值,把它存到字典里面,如果当前 key 在字典里面,我们就让它加一
* 如果不在那我们就让它的次数初始化为 1,最终我们再从字典找到次数最多的 key 值和 value 值



def analyse_words(words):
word_dict = {}
for i in words:
if i in word_dict:
word_dict[i] += 1
else:
word_dict[i] = 1
max_key = max(word_dict,key=word_dict.get)
print(max_key)
print(word_dict[max_key])
# l
# 3
analyse_words(‘helloworld’)


##### 题目 18:利用栈打印菱形


输入边长 n,打印对应边长的菱形


分析:


* 打印几行
* 每一行打印几个空格,几个星星
* 前几行打印之前加入到栈,利用栈的后进先出原则打印后几行的内容



def diamond(n):
stack = []
for i in range(1, 2 * n):
if i <= n:
p_str = ’ ’ * (n - i) + ‘*’ * (2 * i - 1)
if i != n:
stack.append(p_str)
print(p_str)
else:
print(stack.pop())

diamond(5)

为了区分我把空格换成了点

…*

…***

…*****

.*******

*********

.*******

…*****

…***

…*


##### 题目 19:深入理解递归函数


* 什么是递归函数?递归函数就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。
* 需要注意:递归函数必须有结束条件。


设计递归函数三要素:


* 明确你这个函数想要干什么
* 寻找递归结束条件
* 找出函数的等价关系式



def p(n):
if n == 0:
return
print(‘递归前->’,n)
p(n-1)
print(‘递归后->’,n)
p(5)

递归前-> 5

递归前-> 4

递归前-> 3

递归前-> 2

递归前-> 1

递归后-> 1

递归后-> 2

递归后-> 3

递归后-> 4

递归后-> 5


##### 题目 20:斐波那契递归函数


斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…


这个数列,前两项都是数字 1,从第三项开始,每一项数字是前两项数字之和


数学表达式:f(n) = f(n-1)+f(n-2)



def fib(n):
if n<=2:
return 1
return fib(n-1)+fib(n-2)

print(fib(10)) # 55
print(fib(2)) # 1


递归与栈的关系 递归函数原理:每一次调用都会把当前调用压入到栈里,最后按照后进先出的原则,不停返回返回 由递归程序的执行过程,我们得知递归程序的调用是一层层向下的,而返回过程则恰好相反,一层层向上。


换个说法:最先一次的函数调用在最后返回,而最后一次的函数调用则是最先返回。这就跟栈的“后进先出”次序是一样的。因此,在实现递归调用的时候,通常就会使用栈来保存每一次调用的现场数据:


当一个函数被调用的时候,系统会把调用时的现场数据压入到系统调用栈,压入栈的现场数据称为栈帧。当函数返回时,要从调用栈的栈顶取得返回地址,恢复现场,弹出栈帧,按地址返回。


##### 题目 21:三个数取最大数


己知数字 a,b,c 分别为 10,6,18 找出 a,b,c 中最大的数字(不借助函数以及列表等方式) 我们知道函数 max 可以直接获取到最大值,或者可以把数字添加到列表里,通过排序也能获取到最大数字,我们单纯使用 if 分支来实现



a, b, c = 10, 6, 18
if a > b:
max_num = a
else:
max_num = b
if max_num < c:
max_num = c

print(max_num) # 18


##### 题目 22:因子之和“完数”


* 什么是因子?因子就是所有可以整除这个数的数字,包括 1 但不包括这个数自身。比如 8 的因子有 1,2,4
* 什么是完数?一个数如果恰好等于它的因子之和,这个数就称为“完数”,打印输出 1000 以内的完数,例如 6=1+2+3,6 就是“完数



def factor_sum(n):
s_sum = 0
for i in range(1, n):
if n % i == 0:
s_sum += i
return s_sum

for j in range(1, 1000):
if j == factor_sum(j):
print(j)
# 6
# 28
# 496


##### 题目 23:递归阶乘求和


一个正整数的阶乘(factorial)是所有小于及等于该数的正整数之积,并且 0 的阶乘为 1


如 5!=1\_2\_3\_4\_5 计算 1!+2!+3!+4!+5!+…+10! 数学表达式:f(n) = n\*f(n-1):



def factor(n):
if n < 2:
return 1
return n * factor(n - 1)

s_sum = 0
for i in range(1, 11):
s_sum += factor(i)
print(s_sum) # 4037913


##### 题目 24:有效的括号


给定一个只包括’(‘,’)‘,’{‘,’}‘,’[‘,’]’ 的字符串,判断字符串是否有效。


有效字符串需满足:


* 左括号必须用相同类型的右括号闭合
* 左括号必须以正确的顺序闭合
* 空字符串可被认为是有效字符串
* 示例 1:


输入:“()”


输出:True


* 示例 2:


输入:“()[]{}”


输出:True


* 示例 3:


输入:“(]”


输出:False


* 示例 4:


输入:“([)]”


输出:False


* 解法一:字符串替换法 在字符串中找成对的()、[]、{},找到后替换成空 使用 while 循环,不停判断是否存在成对的小括号中括号大括号,如果存在就使用 replace 替换成空 直到无法再替换的时候,再判断下当前的字符串是否为空,如果为空说明字符串是有效的,如果不为空说明字符串是无效的



def valid_str(string):
if len(string) % 2 == 1:
return False
while ‘()’ in string or ‘[]’ in string or ‘{}’ in string:
string = string.replace(‘()’, ‘’)
string = string.replace(‘[]’, ‘’)
string = string.replace(‘{}’, ‘’)
return string == ‘’

print(valid_str(‘()’)) # True
print(valid_str(‘()[]{}’)) # True
print(valid_str(‘()[]{[()]}’)) # True
print(valid_str(‘()[]{[(}]}’)) # False


* 解法二:利用栈的后进先出原则 先去定义一个空栈,对当前栈进行循环遍历,遇到左括号我们就把当前的左括号添加到栈里面,遇到右括号,我们就和栈顶元素进行比对 看它们是不是成对的括号,如果是,就把当前的元素出栈,直到字符串遍历结束之后,我们再来看下字符串是不是空的,如果是空的说明字符串是有效的,如果不为空说明字符串是无效的



def valid_str(string):
if len(string) % 2 == 1:
return False
stack = []
char_dict = {
‘)’: ‘(’,
‘}’: ‘{’,
‘]’: ‘[’
}
for char in string:
if char in char_dict:
# 右括号
if not stack or char_dict[char] != stack.pop():
return False
else:
# 左括号
stack.append(char)
return not stack

print(valid_str(‘(){}[({[]})]’)) # True
print(valid_str(‘(){}[({[)})]’)) # False
print(valid_str(‘’)) # True


##### 题目 25:回文数的两种解法


回文数是指正序(从左向右)和倒序(从右向左)都是一样的整数。例如,1221 是回文,而 1222 不是。


* 解法一:通过逆转字符串进行比对



def is_palindrome(x):
if x < 0 or x > 0 and x % 10 == 0:
return False
str_x = str(x)
return str_x == str_x[::-1]

print(is_palindrome(121)) # True
print(is_palindrome(120)) # False


* 解法二:反转一半数字和前半部分的数字进行比较


流程


* 对于整数 x,将后半部分反转,保存到变量 reverted
* 每次循环 x%10 拿到末尾数字
* 然后 x/10 去除末尾的数字
* 循环结束条件 x<=reverted
* 数字长度(奇数) 12321
* 数字长度(偶数) 1221



def is_palindrome(x):
if x < 0 or x > 0 and x % 10 == 0:
return False
reverted = 0
while x > reverted:
# 我们看下 1221
# 第一次循环我们需要把末尾数字1取出来 第二次取末尾数字2 我们需要把21变成12
reverted = reverted * 10 + x % 10
# 把x的末尾数字删除掉
x //= 10
return x == reverted or x == reverted // 10

print(is_palindrome(1221)) # True
print(is_palindrome(1223)) # False
print(is_palindrome(123321)) # True


#### 如何正确学习 Python


小编这次带来的,是从朋友那里薅到的一套完整的学习路线图,以及配套学习资料,它涵盖了Python学习的方方面面,且文献全彩,字迹清晰,很适合我们学习观看。


![](https://img-blog.csdnimg.cn/1a69722d9b2246ff84f53e75b300dca8.png)  
 ![](https://img-blog.csdnimg.cn/79d307359b0c4b719a3f4eb9e95e908e.png)


下面来看看资料详细内容:


#### 一、Python基础


基础真的蛮重要的,因为Python的易应用性很容易让大家产生我什么都会了的感觉,但实际上还是不怎么会。


![在这里插入图片描述](https://img-blog.csdnimg.cn/80f25e3057b64eb796978d0405774b93.png#pic_center)![](https://img-blog.csdnimg.cn/569279d8f7da4eb3895768433687e7c6.png#pic_center)


**相关的视频学习资料:**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/942245e23e13446e873cc7708ff68c34.png#pic_center)


#### 二、爬虫阶段


应该有很多人都对爬虫感兴趣吧?


爬虫不只是爬虫工程师会用到,业余时间也可以用来爬点自己想要的东西,又或者是做兼职也是可以的,比如日常办公自动化、电商抓取商品信息、分析销售数据做报表等等。


大部分爬虫都是按“发送请求——获得页面——解析页面——抽取并储存内容”这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。


所以爬虫的简要学习路径大概有:


* 学习 Python 包并实现基本的爬虫过程
* 了解非结构化数据的存储
* 学习scrapy,搭建工程化爬虫
* 学习数据库知识,应对大规模数据存储与提取
* 掌握各种技巧,应对特殊网站的反爬措施
* 分布式爬虫,实现大规模并发采集,提升效率


![](https://img-blog.csdnimg.cn/f21020bb93e043e8b2ce38e174a7cbcd.png#pic_center)


**相关的视频学习资料:**  
 ![请添加图片描述](https://img-blog.csdnimg.cn/4d1d34be93ec4ea4adbaffc0e3c97c2a.png)


#### 三、Python数据分析


数据分析也是当下的一大热门方向,用Python来做的话比其他语言强很多。


但往往只会数据分析还是差点意思,如果能具备爬虫能力来爬取数据就更好了。(分析爬虫抓取的数据,分析规律,用于商业化)


![在这里插入图片描述](https://img-blog.csdnimg.cn/5ec752a43a654b93997d554c23434a10.png#pic_center)


相关的学习资料:


![](https://img-blog.csdnimg.cn/515f3793039b49e496684c7ab472f3c4.png#pic_center)


#### 四、数据库与ETL数仓


企业需要定期将冷数据从业务数据库中转移出来存储到一个专门存放历史数据的仓库里面,各部门可以根据自身业务特性对外提供统一的数据服务,这个仓库就是数据仓库。


传统的数据仓库集成处理架构是ETL,利用ETL平台的能力,E=从源数据库抽取数据,L=将数据清洗(不符合规则的数据)、转化(对表按照业务需求进行不同维度、不同颗粒度、不同业务规则计算进行统计),T=将加工好的表以增量、全量、不同时间加载到数据仓库。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值