python學習(13)
隨機生成a,b之間的一個浮點數
>> random.uniform(1,20)
1.0130916166719703
習題1:生成[“z1”,”y2”,”x3”,”w4”,”v5”]
#coding=utf-8
result = []
for i in range(1,6):
result.append(chr(122-i+1)+str(i))
print(result)
#coding=utf-8
result = []
for i in range(1,6):
result.append(chr(97+i-1)+str(i))
print(result)
習題2:拼接一個字符串的首字母、末尾字母、中間字母為一個字符串
要考慮奇數偶數長度,如果只有1個2個字母的字符串
方式1:直接拼字符串
s = "abcdefghig" result_str = "" result_str += s[0] if len(s)%2 == 1: middle_letter = s[len(s)//2] else: middle_letter = s[len(s)//2-1] middle_letter += s[len(s)//2] print(middle_letter) result_str += middle_letter result_str += s[-1] print("拼接後的字符串: ",result_str)
方式2:利用列表
def join_str(s): result = [] result.append(s[0]) if len(s)%2==1: result.append(s[len(s)//2]) else: result.append(s[len(s)//2-1]) result.append(s[len(s)//2]) result.append(s[-1]) return "".join(result) s = "abcdefghig" s2 = "abcdefghi" print("拼接後的字符串: ",join_str(s)) print("拼接後的字符串: ",join_st
切片沒有越界
>> s = "a"
>> s[5:] #沒有越界
‘‘
>> s[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range>> a = [1]
>> a[0:1] = [1,2,3,4]
>> a
[1, 2, 3, 4]
>> a =[1]
>> a[0:2] = [1,2,3,4]
>> a
[1, 2, 3, 4]>> a = [1]
>> a[0]
1
>> a[0] = [1,2,3,4]
>> a
[[1, 2, 3, 4]]>> a = [1]
>> a[0:7]
[1]
>> a[0:7] = [1,2,3,4]
>> a
[1, 2, 3, 4]>> a
[1, 2, 3, 4]
>> a[0:2] = [7,8,9,10]
>> a
[7, 8, 9, 10, 3, 4]>> a[0] = [55,66]
>> a
[[55, 66], 8, 9, 10, 3, 4]>> a[0:5] = [1]
>> a
[1, 4]
習題3:S = “i am, a boy ”把boy替換為m
利用切片賦值特性
算法:先把字符串轉換為列表
遍歷列表,找到boy字符串
替換boy字符串為m
#coding=utf-8
s = "i am, a boy!!"
list_s = list(s)
sub_length = len("boy")
for i in range(len(list_s)):
if "".join(list_s[i:i+sub_length]) == "boy":
list_s[i:i+sub_length] = "m"#可以用切片直接替換
print("".join(list_s))
習題4:非遞歸實現生成斐波那契數列
#coding=utf-8
def fib(n):
result = []
if n <=0 or not isinstance(n,int):
return result
for i in range(n):
if i < 2:
result.append(1)
else:
result.append(result[i-1] + result[i-2])
return result
print("斐波那契數列: ",fib(5))
print("斐波那契數列: ",fib(-2))
習題5:非遞歸實現求第n項斐波那契數列值
算法:遍歷n,如果n等於0或1直接返回1
如果n >=2,記錄前面兩個項的和,並重新記錄新的第1個,第2個數;
#coding=utf-8
def fib(n):
a,b=1,1
sum = 0
if n <=0 or not isinstance(n,int):
return -1
for i in range(n):
if i < 2:
sum = 1
else:
sum = a + b
a = b
b = sum
return sum
print(fib(5))
習題6:遞歸求兩個數的最大公約數
方式1:
算法:
找出兩個數的較小數(第一次)
如果兩個數除以較小數余數都等於0的話,添加到一個列表中
不然的話繼續調用函數自身,並且num-1傳入到num參數中。
def max_common_divisor(a,b,num=0,result=[]):
if num == 0:
if a < b:
num = a
else:
num = b
if a%num == 0 and b%num == 0:
print(result)
result.append(num)
else:
max_common_divisor(a,b,num-1)
return result#函數遞歸調用結束後才會執行此代碼
print(max_common_divisor(24,120))
??????
方式2:更相減損法
def get(small,big):
if small > big:
small,big = big,small
if small == big:
return small
return get(small,big-small)
print(get(30,24))
方式3:輾轉相除法
def?gain(small,?big):
????if?small?>?big:
????????small,?big?=?big,?small
????if?small?==?0:
????????return?big
????return?gain(small,?big?%?small)
習題7:利用遞歸,處理嵌套列表,生成列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
定義全局變量:(盡量不使用全局變量)
l = [1,2,[3,4,[5,6,7,[8,9,[10,11]]]]]
result = []
def func(p):
global result
for v in p:
if not isinstance(v,list):
result.append(v)
else:
func(v)
return result
print(func(l))
引用傳參:
def get_list(l,result=[]):
for v in l:
if not isinstance(v,list):
result.append(v)
else:
get_list(v)
return result
l = [1,2,[3,4,[5,6,7,[8,9,[10,11]]]]]
print(get_list(l))
python學習(13)