2022-05-18 Python課后作業(yè)

題目1:打印一個(gè)九九乘法表

需求分析:

99乘法表的樣子臊恋?


99乘法表.png

思路:

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)密文逆向檢測凹耙。

需求分析:

需求.png

通過上面輸出結(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]]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末务唐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子带兜,更是在濱河造成了極大的恐慌枫笛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刚照,死亡現(xiàn)場離奇詭異刑巧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)无畔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門啊楚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浑彰,你說我怎么就攤上這事恭理。” “怎么了郭变?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵蚯斯,是天一觀的道長薄风。 經(jīng)常有香客問我,道長拍嵌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任循诉,我火速辦了婚禮横辆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茄猫。我一直安慰自己狈蚤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布划纽。 她就那樣靜靜地躺著脆侮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勇劣。 梳的紋絲不亂的頭發(fā)上靖避,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音比默,去河邊找鬼幻捏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛命咐,可吹牛的內(nèi)容都是我干的篡九。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼醋奠,長吁一口氣:“原來是場噩夢啊……” “哼榛臼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窜司,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沛善,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后例证,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體路呜,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年织咧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胀葱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笙蒙,死狀恐怖抵屿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捅位,我是刑警寧澤轧葛,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布搂抒,位于F島的核電站,受9級特大地震影響尿扯,放射性物質(zhì)發(fā)生泄漏求晶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一衷笋、第九天 我趴在偏房一處隱蔽的房頂上張望芳杏。 院中可真熱鬧,春花似錦辟宗、人聲如沸爵赵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽空幻。三九已至,卻和暖如春容客,著一層夾襖步出監(jiān)牢的瞬間秕铛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工耘柱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留如捅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓调煎,卻偏偏與公主長得像镜遣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子士袄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容