-
任務:
# 請分別使用循環和遞歸的形式定義函數,求出1~100的和。
#?循環的方式: def?sum_xunhuan(x): ????sums?=?0 ????for?i?in?range(1,?x+1): ????????sums?+=?i; ????return?sums; #?遞歸的方式: def?sum_digui(x): ????if?x?==?0: ????????return?x ????return?x?+?sum_digui(x-1) y?=?sum_xunhuan(100)?? z?=?sum_digui(100) print(y,?z)
查看全部 -
浮點,字符串,整數,二進制查看全部
-
函數內部調用其他函數,是非常常見的,通過合理拆分邏輯,可以降低程序的復雜度。
如果在一個函數內部調用其自身,這個函數就是遞歸函數。
計算階乘 n! = 1 * 2 * 3 * ... * n,用函數 fact(n)表示:
def?fact(n): ????if?n==1: ????????return?1 ????return?n?*?fact(n?-?1)
fact(n)可以表示為 n * fact(n-1),只有n=1時需要特殊處理。
可以拆解fact(5)計算的詳細邏輯:
===>?fact(5) ===>?5?*?fact(4) ===>?5?*?(4?*?fact(3)) ===>?5?*?(4?*?(3?*?fact(2))) ===>?5?*?(4?*?(3?*?(2?*?fact(1)))) ===>?5?*?(4?*?(3?*?(2?*?1))) ===>?5?*?(4?*?(3?*?2)) ===>?5?*?(4?*?6) ===>?5?*?24 ===>?120
遞歸函數的優點是定義簡單,邏輯清晰。使用遞歸函數需要注意防止棧溢出。
函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出。RecursionError: maximum recursion depth exceeded in comparison
查看全部 -
有時候函數是沒有返回結果的,這個時候從函數獲取到的是一個空值None。
對list_sum()這個函數進行簡單的修改,在函數內把結果打印出來,不通過return返回結果。任務:
# 定義一個函數sub_sum(),這個函數接收一個列表作為參數,函數返回列表所有奇數項的和以及所有偶數項的和。
#?coding=utf-8 L?=?[0,?1,?2,?3,?4,?5,?6,?7,?8] def?sub_sum(L): ????sum_even?=?0 ????sum_odd?=?0 ????for?i?in?range(len(L)): ????????if?i?%?2?==?0: ????????????sum_even?+=?L[i] ????????if?i?%?2?!=?0: ????????????sum_odd?+=?L[i] ????return?sum_odd,?sum_even ???? result?=?sub_sum(L) sum_odd?=?result[0] sum_even?=?result[1] print('奇數和?=?{}'.format(sum_odd)) print('偶數和?=?{}'.format(sum_even))
查看全部 -
在dict中,每一項包含一個key和一個value,key和value是一一對應的,使用花括號{}表示這是一個dict,然后key和value之間使用冒號:分割,并且每一組key:value的最后,以逗號,表示這一組的結束。
查看全部 -
判斷順序不了解
查看全部 -
要定義只有一個元素的tuple,需要在元素后面添加一個逗號,否則會出現優先級問題
查看全部 -
count()統計tuple中某個元素出現的次數 ,元組名稱.tuple(查詢 元素名稱)
index()方法可以返回指定元素的下標,當一個元素多次重復出現時,則返回第一次出現的下標位置。
查看全部 -
if-elif-else
if?score?>=90: ????print('90+') elif?score?>=80: ????print('80+') else: ????print()
for
s?=?'ABCD' for?ch?in?s: ????print(ch)
查看全部 -
字符串模板format
temp?=?'Hello?{}' result?=?temp.format('world')???==>?Hello?world #制定順序 result=?'Hello?{0},?hello?{1}'.format('world','python') #命名 result=?'Hello?{a},?hello?'.format(a='world',b='python')
字符串切片
s='ABC' ab?=?s[0:2]??????==>AB
查看全部 -
地板除????(得到整數部分)
10//2.5?==>4.0 10//3?==>?3
小數點位數 round
#?round(數,保留位數) num?=?10?/?3????==>?3.3333333333333335 #round保留兩位 round(num,?2)??==>3.33
短路計算
a?=?'python' print('hello,',?a?or?'world')??==>?python b?=?'' print('hello,',?b?or?'world')????==>world
在計算a and b時,如果 a 是 False,則根據與運算法則,整個結果必定為 False,因此返回 a;如果 a 是 True,則整個計算結果必定取決與 b,因此返回 b。
在計算a or b時,如果 a 是 True,則根據或運算法則,整個計算結果必定為 True,因此返回 a;如果 a 是 False,則整個計算結果必定取決于 b,因此返回 b。
raw字符串
r'...'???#單行 r'''...'''?#多行
查看全部 -
元組——tuple,用()將元素括起來,有序容器,內容固定
元組數據類型可以把不是元組的容器轉換為元組,比如將列表轉換成元組,也可將元組轉換為列表,列表內容可變
查看全部 -
定義一個函數要使用 def 語句,依次寫出函數名、括號()、括號中的參數和冒號:,然后,在縮進塊中編寫函數體,函數的返回值用 return 語句返回。
return語句表示返回的意思,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,并將結果返回。
任務:
# 請定義一個square_of_sum()函數,它接收一個list,返回list中每個元素平方的和。
#?Enter?a?code def?square_of_sum(list1): ????sum?=?0 ????for?i?in?list1: ????????sum?+=?(i*i) ????return?sum L?=?[1,?2,?3,?4] x?=?square_of_sum(L) print(x)
查看全部 -
可以使用函數,把重復的邏輯代碼封裝起來。
把封裝重復邏輯代碼的過程就做抽象,抽象是數學中非常常見的概念。
函數就是最基本的一種代碼抽象的方式。
Python內置的大部分函數參考網址:https://docs.python.org/3/library/functions.html
要調用一個函數,需要知道函數的名稱和參數。需要注意的是,傳遞的參數數量一定要和函數要求的一致,不然將會引起錯誤。
如果傳入的參數數量是對的,但是參數的類型不能被函數所接受,也會引起錯誤。
int()函數可以將合法的其它類型數據轉換為整數,str()函數可以將其它類型的數據轉換為字符串。
任務:
# sum()函數接收一個list作為參數,并返回list所有元素之和。請計算 1*1?+ 2*2 + 3*3 + ... + 100*100。
#?Enter?a?code list1?=?[] for?i?in?range(1,?101): ????list1.append(i*i) sum1?=?sum(list1) print(sum1)
查看全部 -
1. 使用remove()方法刪除元素以外,還可以使用discard()方法刪除元素。
當元素不存在時,使用discard()并不會引發錯誤,所以使用discard()是更加高效的一個方法。
2. set也提供了clear()方法,可以快速清除set中的所有元素。
3.?set提供方法判斷兩個set之間的關系,比如判斷其中一個set是否為另外一個set的子集的issubset()方法或者超集的issuperset()方法。
#?判斷s1是否為s2的子集 s1.issubset(s2)?#?==>?True #?判斷s2是否為s1的超集 s2.issuperset(s1)?#?==>?True
4.?set提供isdisjoint()方法,可以快速判斷兩個集合是否有重合,如果有重合,返回False,否則返回True。
任務
已知兩個集合s1、s2,請判斷兩個集合是否有重合,如果有,請把重合的元素打印出來。s1 = set([1, 2, 3, 4, 5])????s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
#?Enter?a?code s1?=?set([1,?2,?3,?4,?5]) s2?=?set([1,?2,?3,?4,?5,?6,?7,?8,?9]) same??=?set([]) for?i?in?s1: ??for?j?in?s2: ????if?i?==?j: ??????same.add(i) print(same)
#?Enter?a?code s1?=?set([1,?2,?3,?4,?5]) s2?=?set([1,?2,?3,?4,?5,?6,?7,?8,?9]) same?=?set([]) for?i?in?s1: ????if?i?in?s2: ????????same.add(i) print(same)
查看全部
舉報