題目1:打印一個(gè)九九乘法表
需求分析:
99乘法表的樣子臊恋?
思路:
1、兩層循環(huán)用
2虱肄、外層循環(huán)range(1,10)
3致板、內(nèi)層循環(huán)range(1,i+1)
4、完成乘法的表達(dá)式
5咏窿、內(nèi)層循環(huán)結(jié)束后外層每循環(huán)一次就打印一次換行
答案:
for i in range(1,10):
for j in range(1,i+1):
print(f'{j}', '*', f'{i}', '=', i * j, end=' ')
print()
題目2:在 0~99 之間隨機(jī)抽取一個(gè)偶數(shù)
需求分析:
1斟或、偶數(shù)就是可以被2整除的數(shù)
2、范圍是0-99
3集嵌、隨機(jī)
思路:
1萝挤、使用random
2御毅、random.randint(a, b) 返回一個(gè)隨機(jī)整數(shù) N,范圍是:a <= N <= b
3怜珍、隨機(jī)抽取一個(gè)端蛆,所以取到滿足條件的就要跳出循環(huán)
答案:
import random
while True:
a = random.randint(0,99)
if a % 2 ==0:
print(a)
break
題目3:編寫一個(gè)雙色球的開獎模擬程序。
需求分析:
1酥泛、雙色球有紅藍(lán)兩種顏色的球
2今豆、中獎號碼是6個(gè)隨機(jī)紅球加一個(gè)隨機(jī)
3、紅球是1-33
4柔袁、籃球是1-16
思路:
1呆躲、隨機(jī)取多個(gè)用random.sample(population, k)
2、紅球和籃球拼起來就是開獎結(jié)果
3捶索、range(a,b)
從a
開始到b-1
答案:
import random
while True:
red = random.sample(range(1,34),6)
blue = random.sample(range(1,17),1)
break
print("本期開獎結(jié)果為:",red ,' ', blue)
題目4:計(jì)算 1000000 以內(nèi)所有偶數(shù)的和插掂。
需求分析:
1、偶數(shù)怎么表示情组?x % 2 == 0
2燥筷、累加的偶數(shù)
思路:
找規(guī)律
1,1
2院崇,2
3肆氓,4
5,8
6底瓣,16
7谢揪,32
n,2^(n-1)
答案:
num = 1
for i in range(1,65):
num += pow(2,i-1)
print(num)
題目5:模擬拋硬幣捐凭,打印出每次拋擲的結(jié)果
需求分析:
1拨扶、如果拋硬幣的次數(shù)小于 100,則打印每次的結(jié)果茁肠,否則不打印
2患民、統(tǒng)計(jì)最終正面和反面的次數(shù)
思路:
1、用隨機(jī)模塊
2垦梆、從內(nèi)向外匹颤,先實(shí)現(xiàn)最基本的隨機(jī)打印正反面
3、把循環(huán)體放到外層條件下
答案:
import random
n = int(input("請輸入拋硬幣的次數(shù):"))
coin = ['正面','反面']
count1 = 0
acoin = 0
bcoin = 0
if n < 100:
for i in range(n):
ran = random.randint(0,1)
print(coin[ran])
count1 +=1
if coin[ran] == '正面':
acoin+=1
else:
bcoin+=1
else:
for i in range(n):
ran = random.randint(0,1)
count1 +=1
if coin[ran] == '正面':
acoin+=1
else:
bcoin+=1
print(f"總共投擲了{(lán)count1}次")
print(f'正面:{acoin}次')
print(f'反面:{bcoin}次')
題目6:倒著打印99乘法表
需求分析:
給出了倒著打印的樣式
思路:
1托猩、兩層循環(huán)
答案:
"""
倒著打印99乘法表--for循環(huán)的寫法
"""
for i in range(1,10):
for j in range(9,i,-1):
print(j,'*',i ,'=',j*i,end=' ')
print(1)
"""
倒著打印99乘法表--while循環(huán)的寫法
"""
i = 1
while i <= 9:
j = 9
while j >= i:
print(j,'*',i ,'=',j*i,end=' ')
j -= 1
print()
i+=1
題目7:找出占比數(shù)量最多的兩個(gè)元素
需求分析:
1印蓖、這兩個(gè)元素的數(shù)量都需要超過總數(shù)的三分之一
2、摩爾投票法
思路
1京腥、長度//3表示三分之一
2赦肃、循環(huán)列表中的每一個(gè)元素,并計(jì)算出現(xiàn)的次數(shù)
3、當(dāng)出現(xiàn)的次數(shù)大于三分之一時(shí)他宛,append到一個(gè)新的列表
4昵时、由于循環(huán)可能導(dǎo)致重復(fù)的結(jié)果乙墙,可以講列表轉(zhuǎn)成set(集合)
答案:
a = [5,5,5,6,4,6,4,6,6,5,4,3,3,5,4,5,4,6,6,6,5,6,5,5,6]
thirda = len(a)//3
# print(len(a))
# print(thirda)
b = []
for i in range(len(a)):
if a.count(a[i]) > thirda:
b.append(a[i])
c = set(b)
print(c,"是出現(xiàn)次數(shù)超過1/3的數(shù)字")
題目8:找出列表中出現(xiàn)次數(shù)最多的一個(gè)數(shù)字
需求分析:
1、給定的列表 a = [5,5,5,6,4,6,4,6,6,5,4,3,3,5,4,5,4,6,6,6,5,6,5,5,6]
2、打印出出現(xiàn)次數(shù)最多的數(shù)字和其出現(xiàn)的次數(shù)
思路:
1恤筛、遍歷列表
2闲延、找到每個(gè)元素出現(xiàn)的次數(shù):
3整袁、將次數(shù)append
到一個(gè)空列表
4挽拂、max
這個(gè)列表就能求出出現(xiàn)次數(shù)最多的次數(shù),此時(shí)只是次數(shù)人灼,還不知道誰出現(xiàn)了這么多次
5围段、如果將去重后的a
中的每個(gè)數(shù)字遍歷出來,作為key
放到一個(gè)空字典中投放,把每個(gè)key
出現(xiàn)的次數(shù)作為value
放到字典的值中奈泪,那么遍歷這個(gè)字典就可以得到出現(xiàn)次數(shù)最多的key
和其對應(yīng)的次數(shù)value
答案:
"""
方法1:
這里用了max方法和count方法
max(a,key=a.count) a,是一個(gè)可迭代對象,這里指列表a,key 參數(shù)指定一個(gè)用于比較的函數(shù)灸芳,在這里我們比較的是a中每個(gè)元素出現(xiàn)的次數(shù)涝桅,所以a.count。
既然max是出現(xiàn)次數(shù)最多的元素烙样,那么a.count(max)就是這個(gè)元素出現(xiàn)的次數(shù)了
"""
a = [5,5,1,6,4,6,4,6,6,5,4,3,3,5,4,5,4,6,6,6,5,6,5,5,6]
max = max(a,key=a.count)
print(max,'是出現(xiàn)次數(shù)最多的數(shù)冯遂,總共出現(xiàn)了',a.count(max),'次')
方法2:
"""
下面的a = list(d.keys())[list(d.values()).index(max(b))可能不太好理解,其實(shí)就是使用列表的index方法求得下標(biāo)索引谒获,并且通過下標(biāo)索引求值
"""
a = [5,5,1,6,4,6,4,6,6,5,4,3,3,5,4,5,4,6,6,6,5,6,5,5,6]
b = []
d = {}
for i in a:
j = a.count(i)
d[i]=j
b.append(j)
a = list(d.keys())[list(d.values()).index(max(b))]
print(a,'出現(xiàn)的次數(shù)最多蛤肌,總共出現(xiàn)了',max(b),'次')
"""
也可以把你a中的每一個(gè)元素作為key放到字典中,把key出現(xiàn)的次數(shù)作為value與前面的key對應(yīng)起來批狱,然后寫一個(gè)方法裸准,找key
"""
a = [5,5,1,6,4,6,4,6,6,5,4,3,3,5,4,5,4,6,6,6,5,6,5,5,6]
b = []
d = {}
for i in a:
j = a.count(i)
d[i]=j
b.append(j)
def get_key(x,val):
for k,v in x.items():
if v == val:
return k
print(get_key(d,max(b)),'出現(xiàn)的次數(shù)最多,總共出現(xiàn)了',max(b),'次')
"""
或者也可以把遍歷字典的方法寫的而簡單點(diǎn)
"""
a = [5,5,1,6,4,6,4,6,6,5,4,3,3,5,4,5,4,6,6,6,5,6,5,5,6]
b = []
d = {}
for i in a:
j = a.count(i)
d[i]=j
b.append(j)
def get_key(x,val):
return [k for k,v in x.items() if val ==v]
print(get_key(d,max(b)),'出現(xiàn)的次數(shù)最多赔硫,總共出現(xiàn)了',max(b),'次')
# 這三種方式都可以得到正確的結(jié)果
題目9:創(chuàng)建一個(gè) 88 x 88 的隨機(jī)整數(shù)矩陣(二維列表)炒俱,然后匹配用戶輸入的整數(shù)是否與其中某元素相等,如果相等則打印其行號和列號
需求分析:
1爪膊、要求1:隨機(jī)整數(shù)取值范圍 0~1024
2向胡、要求2:需找出所有匹配的元素
思路:
1、需要用到random
2惊完、兩層循環(huán)創(chuàng)建二維列表
3、匹配輸入值:
答案:
import random
matrix = []
for i in range(88):
matrix.append([]) # 外層循環(huán)加上一個(gè)空列表
for j in range(88):
matrix[i].append(random.randint(0,1024)) # 內(nèi)層循環(huán)時(shí)往空的子列表中append隨機(jī)數(shù)处硬,循環(huán)88次 之后外循環(huán)再給一個(gè)空列表小槐,內(nèi)層循環(huán)隨即在往空的子列表中append隨機(jī)數(shù)
target = int(input("請輸入一個(gè)目標(biāo)整數(shù):"))
is_find = 1
for i in range(len(matrix)):
for j in range(len(matrix)):
if target == matrix[i][j]:
print(i,j)
is_find = 0
if is_find == 1:
print("沒找到目標(biāo)數(shù)值。")
題目10:請編程找出矩陣中的幸運(yùn)數(shù)字。
需求分析:
1凿跳、某一個(gè)元素的值在同一行的所有元素中最小件豌,并且在同一列的所有元素中最大,那么該元素便是幸運(yùn)數(shù)字控嗜。
2茧彤、矩陣中數(shù)值的取值范圍是 0~1024,且各不相同
思路:
1疆栏、先用兩層循環(huán)創(chuàng)建一個(gè)列表矩陣(二維列表)
2曾掂、用len(matrix)
表示行數(shù)
3、用len(matrix[0])
表示列數(shù)
4壁顶、遍歷矩陣珠洗,找到每行最小的數(shù)和每列最大的數(shù)
5、最小的數(shù)等于最大的數(shù)時(shí)若专,打印出來此時(shí)的元素
答案
matrix = [[10, 36, 52],
[33, 24, 88],
[66, 76, 99]]
row = len(matrix)
col = len(matrix[0])
min_row = [1024] * row
max_col = [0] * col
# 遍歷矩陣中的每一個(gè)元素
# 找到每行中最小的元素许蓖,并將它們存放到列表min_row中
# 找到每列中最大的元素,并將它們存放到列表max_col中
for i in range(row):
for j in range(col):
min_row[i] = min(matrix[i][j], min_row[i])
max_col[j] = max(matrix[i][j], max_col[j])
# 遍歷矩陣中的每一個(gè)元素
# 判斷是否同時(shí)滿足“同一行的所有元素中最小”和“同一列的所有元素中最大”
for i in range(row):
for j in range(col):
if matrix[i][j] == min_row[i] and matrix[i][j] == max_col[j]:
print(matrix[i][j])
題目11:請將下面 matrix 矩陣反向展開
需求分析:
1调衰、展開二維列表
2膊爪、倒序
思路:
1、兩層循環(huán)
2嚎莉、倒序
答案:
"""
迭代寫法:
"""
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
lista = []
for i in matrix:
for j in i:
lista.append(j)
lista.sort(reverse=True)
print(lista)
"""推導(dǎo)式寫法"""
result = [j for i in matrix for j in i][::-1]
題目12:請使用列表推導(dǎo)式米酬,獲得 matrix 矩陣的轉(zhuǎn)置矩陣 Tmatrix(將 matrix 的行列互換之后得到的矩陣,稱為 matrix 的轉(zhuǎn)置矩陣)萝喘。
需求分析:
1淮逻、轉(zhuǎn)置之后原列表的行數(shù)等于新列表每一行的長度
2、原列表每一個(gè)行的長度等于新列表的行數(shù)
思路:
1阁簸、len(matrix) = len(Tmatrix[])
2爬早、len(matrix) = len(Tmatrix)
答案:
"""列表推導(dǎo)式解法"""
""""""
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
Tmatrix = [[matrix[i][j] for i in range(len(matrix))] for j in range(len(matrix[0]))]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
"""迭代解法"""
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
Tmatrix = []
for i in range(len(matrix[0])):
Tmatrix.append([])
for j in range(len(matrix)):
Tmatrix[i].append(matrix[j][i])
print(Tmatrix)
題目13:用戶輸入兩個(gè)版本號 v1 和 v2,請編寫代碼比較它們启妹,找出較新的版本筛严。
需求分析:
1、版本號是由一個(gè)或多個(gè)修訂號組成饶米,各個(gè)修訂號之間由點(diǎn)號(.)連接桨啃,每個(gè)修訂號由多位數(shù)字組成,例如 1.2.33 和 0.0.11 都是有效的版本號檬输。
2照瘾、從左到右的順序依次比較它們的修訂號,點(diǎn)號(.)左側(cè)的值要比右側(cè)的權(quán)重大丧慈,即 0.1 要比 0.0.99 大析命。
思路:
1主卫、用split進(jìn)行拆分
2、將兩個(gè)版本號組裝到一起
3鹃愤、對組裝后的迭代器進(jìn)行遍歷
答案:
"""fillvalue可以制定一個(gè)數(shù)字去補(bǔ)足兩個(gè)版本號較少的那一個(gè)簇搅,這里用數(shù)字0來補(bǔ)足"""
from itertools import zip_longest
def comp(a,b):
for i, j in zip_longest(a.split('.'), b.split('.'), fillvalue=0):
if int(i) == int(j):
# print("相等")
continue
if int(i) < int(j):
# print("V2")
return "V2"
else:
return "V1"
return "相等"
a = input("請輸入第一個(gè)版本號,V1: ")
b = input("請輸入第二個(gè)版本號软吐,V2: ")
print(comp(a,b))
題目14:編寫一個(gè)加密程序瘩将,其實(shí)現(xiàn)原理是通過替換指定的字符進(jìn)行加密,附加要求是實(shí)現(xiàn)密文逆向檢測凹耙。
需求分析:
通過上面輸出結(jié)果可以看出要求有以下幾點(diǎn):
1姿现、需要替換的和將要替換的,長度必須一致使兔,否則不會打印密文
2建钥、如果需要替換的和將要替換的出現(xiàn)了重復(fù)的元素,可以打印密文虐沥,但會告訴用戶無法解密
思路:
1熊经、使用str.makrtrans
可以替換指定的字符
2、使用使用translate
可以翻譯成轉(zhuǎn)化后的字符
答案:
a = input("請輸入需要加密的明文:")
b = input("請輸入需要替換的字符:")
c = input("請輸入將要替換的字符:")
if len(b) != len(c):
print("需要替換的字符數(shù)量必須跟將要替換的字符數(shù)量一致欲险。")
else:
print("加密后的密文是:",a.translate(str.maketrans(b, c)))
if len(set(b)) != len(b) or len(set(c)) != len(c):
print("由于替換字符出現(xiàn)重復(fù)镐依,該密文無法解密")
題目15:檢測列表中的元素是否是回文數(shù),并返回一個(gè)由回文數(shù)組成的新列表
需求分析:
回文數(shù)就是正反讀都是一樣的數(shù)字
通過上面輸出結(jié)果可以看出要求有以下幾點(diǎn):
1天试、找到回文數(shù)
2槐壳、輸出新的列表
思路:
1、使用反轉(zhuǎn)字符串
可以判斷回文數(shù)
2喜每、使用append()
可以生成列表
答案1:
循環(huán)寫法
a = ["123", "33211", "12321", "13531", "112233"]
b = []
for i in a:
if i == i[::-1]:
b.append(i)
else:
continue
print(b)
答案2:
列表推導(dǎo)式寫法
a = ["123", "33211", "12321", "13531", "112233"]
[i for i in a if i == i[::-1]]