Python一些基礎練習題

来源:https://www.cnblogs.com/xuanlv-0413/archive/2018/07/07/9276224.html
-Advertisement-
Play Games

可變的數據類型:list, dict, set(可修改其中的元素) 不可變的數據類型:str, tuple 重點:str, list, dict (1).推導式練習 # 利用列表推導式: 找出100以內所有奇數,並將所有奇數乘以3,寫入列表。 li = [i * 3 for i in range(1 ...


可變的數據類型:list, dict, set(可修改其中的元素)

不可變的數據類型:str, tuple

重點:str, list, dict

(1).推導式練習

# 利用列表推導式: 找出100以內所有奇數,並將所有奇數乘以3,寫入列表。
li = [i * 3 for i in range(1, 101) if i % 2 != 0]
print(li)

li = [i * 3 for i in range(1, 101, 2)]
print(li)
View Code

(2).遞歸的使用:(經典的猴子吃桃)
"""
猴子第一天摘下N個桃子,當時就吃了一半,還不過癮,就又多吃了一個。
第二天又將剩下的桃子吃掉一半,又多吃了一個。
以後每天都吃前一天剩下的一半零一個。
到第10天在想吃的時候就剩一個桃子了,
問:第一天共摘下來多少個桃子?
"""

"""
先進行分析:
第n天:    10      9            8            7
剩(個):  1   (1+1)*2=4   (4+1)*2=10   (10+1)*2=22
"""


def peachs(n):
    if n == 10:
        return 1
    else:
        return (peachs(n + 1) + 1) * 2


print(peachs(1))

沒理解遞歸的話,看下麵這個方案:
n = 1  #
x = 1  # 桃子幾個
while n < 10:  # 第9天發現只剩了一個
    x = (x + 1) * 2
    n += 1
print(x)
View Code
(3).基礎函數練習1
'''
定義一個函數:
統計傳入的字元串里,英文字母、空格、數字和其他字元分別出現次數,
並作為一個字典返回   {'字母':  ,'空格':   ,'數字':   ,'其他字元:' }
'''


def count_types(s):
    # 先定義一個字典
    dict = {"字母": 0, "空格": 0, "數字": 0, "其他字元": 0}

    # 遍歷取出字元串中每個值
    for i in s:
        if i.isalpha():
            dict["字母"] += 1  # 鍵值訪問,直接自加
        elif i.isspace():
            dict["空格"] += 1
        elif i.isdigit():
            dict["數字"] += 1
        else:
            dict["其他字元"] += 1
    return dict


print(count_types("jing tian 520.1314!"))
View Code

(4).基礎函數練習2
 1 """
 2 請定義一個名為titles的函數:
 3     1.接收一句英文(字元串)作為參數
 4     2.將這個英文的每個單詞轉換成有且只有首字母大寫的形式
 5     3.返迴轉換後的英文句
 6     4.str.title具有這個功能,但在此題不可使用str.title 
 7 例如:
 8 >>> titles('this is python.')
 9 'This Is Python.'
10 >>> titles('i love python')
11 'I Love Python'
12 """
13 
14 # 利用列表推導式+lambda函數 一行代碼搞定
15 # 可讀性差,儘量避免寫(但我個人比較喜歡這樣,感覺眼前一亮,豁然開朗)
16 # 此題邏輯簡單,一條語句反而感覺清爽。
17 s1 = "this is python."
18 s2 = " i love jing tian "
19 g = lambda s: " ".join([i.capitalize() for i in s.split()])
20 print(g(s1))
21 print(g(s2))
View Code
(5).
 1 """
 2 給定一個正整數,求出它所有數字的和值。
 3 然後再對這個數,求出它的所有數字的求和。
 4 直到求出的和值是一個個位數為止。
 5 例如 :
 6 16 -> 1 + 6 = 7
 7 942 -> 9 + 4 + 2 = 15 -> 1 + 5 = 6
 8 132189 -> 1 + 3 + 2 + 1 + 8 + 9 = 24 -> 2 + 4 = 6
 9 """
10 
11 
12 def dr(n):
13     return n % 9 or n and 9
14 
15 
16 """
17 首先 : and > or
18 當 n!=0 的時候,and是返回右邊的值,然後or是返回左邊的值 
19 """
20 
21 print(dr(16))  # 7
22 print(dr(942))  # 6
23 print(dr(132189))  # 6
View Code

(6).
 1 """
 2 在金融數據顯示的時候,往往看到的是:一個數字,每隔3位用一個逗號隔開。
 3 如:
 4 1234567 -> 1,234,567
 5 1234567890.123 -> 1,234,567,890.123
 6 -614616 -> -614,616
 7 -1234.05 -> -1,234.05
 8 +5201314 -> 5,201,314
 9 """
10 
11 
12 def main(a, minus=False):
13     """
14     :param minus: 是否是負數。負數前面的"-"減號就靠它去判斷,拼接了
15     :return: 數字之間都用逗號隔開了
16     """
17 
18     # 如果有人多此一舉在正數前帶了"+"號,不切片的話,後面截取時要出事
19     if a.find("+") == 0:
20         a = a[1:]
21 
22     # 從後往前,每隔3個字元,切一次。
23     a_formated = lambda a: ",".join([a[-i:-(i + 3):-1][::-1] for i in range(1, len(a) + 1, 3)][::-1])
24 
25     # 是否帶小數。(isdigit判斷的是正整數,如果返回了False,那就是帶小數了)
26     if a.isdigit():
27         if minus:
28             return "{}{}".format("-", a_formated(a))
29         else:
30             return a_formated(a)
31     else:
32         num_decimal = a[a.find("."):]  # 如果是小數,存放小數部分的變數
33         a = a[:a.find(".")]  # 存放真正需要去逗號隔開的部分
34 
35         if minus:
36             return "{}{}{}".format("-", a_formated(a), num_decimal)
37         else:
38             return "{}{}".format(a_formated(a), num_decimal)
39 
40 
41 if __name__ == '__main__':
42     while 1:
43         a = input("請輸入一個數字:")
44 
45         """
46         用float()工廠一下,能成功肯定是一個合法的數值。
47         如果出錯了,那就不是一個合法的數值,continue一下讓程式回到迴圈的第一條語句。
48         不要賦值,不然整數的話就會出現".0"小數。
49         """
50         try:
51             float(a)  # 先看看能不能轉換成float
52         except ValueError:
53             print("輸入有誤!")
54             continue
55         except TypeError:
56             print("輸入有誤!")
57             continue
58         except Exception as e:
59             print("未知錯誤:", e)
60             continue
61 
62         # 是否為負數
63         if float(a) < 0:
64             b = main(a[1:], minus=True)  # 是負數的話,把負號砍了。通過設置布爾值,在函數里返回的時候再進行拼接處理
65         else:
66             b = main(a)
67 
68         print(b)
View Code

(7).讀取舊文本中的內容。以每10個字為一行,寫入新的文本
方法一:
 1 def exchange(old_file, words_number, new_file):
 2     """
 3     讀取舊文本中的內容。以每10個字為一行,寫入新的文本。
 4     :param old_file: (string)舊的本文名稱。路徑在打開的時候進行拼接。
 5     :param words_number: (int)指定每幾個字為一行。
 6     :param new_file: (string)可以為這個新文本指定自己喜歡的名稱。
 7     :return: None
 8     """
 9 
10     # 打開原始的文本
11     with open(old_file + ".txt", "r", encoding="gbk") as f:
12         # 只是打開、讀取的用途,不做其他操作。所以是r模式
13         old_text = f.read()
14 
15     new_text = ""
16     for each in old_text:
17         # 手動替換 : 空格、換行。最後組成一個無空格、無換行的"一行"字元串
18         new_text += each.replace(" ", "").replace("\n", "").replace("\r", "")
19 
20     # 計算需要截取幾次
21     # 原理在最下
22     times = int(len(new_text) / words_number) + 1
23     tmp_li = []
24     for i in range(times):
25         try:
26             a = new_text[i * words_number:i * words_number + words_number]  # 引用 : [原理1]
27         except Exception as e:
28             print("Error at 截取新字元串分片處 :", e)
29         tmp_li.append(a)
30 
31     # 寫入新文本
32     try:
33         with open(new_file + ".txt", "w+") as f:
34             f.writelines("\n".join(tmp_li))  # 手動拼接換行
35     except Exception as e:
36         print("Error at 寫入新文本 : ", e)
37 
38 
39 if __name__ == '__main__':
40     original_file = input("請輸入原始文件名:")
41     words_eachline = int(input("每行字數(請輸入整數):"))
42     new_file = input("請輸入要保存的文件名:")
43 
44     # call function
45     exchange(original_file, words_eachline, new_file)
46 
47 """
48 原理1 :
49 
50 # 通過測試下麵的代碼,可計算出需要如何截取字元
51 
52 txt = "啊阿埃挨哎唉哀皚癌藹矮艾礙愛隘鞍氨安俺按暗岸胺案骯昂盎凹敖熬翱襖傲奧懊"
53 
54 ci = int(len(txt) / 10) + 1
55 print(ci)
56 
57 a = txt[0:10]
58 print(a)
59 
60 a = txt[10:20]
61 print(a)
62 
63 a = txt[20:30]
64 print(a)
65 
66 print("---------------------------")
67 
68 for i in range(ci):
69     a = txt[i * 10:i * 10 + 10]
70     print(a)
71 """
View Code

方案二:
 1 n = 10  # 每行字數
 2 
 3 with open('old.txt', 'r') as f1, open('new.txt', 'w', encoding='utf-8') as f2:
 4     temp = ''
 5     for line in f1:
 6         temp = temp + line.strip().replace(' ', '')  # 去掉兩端的回車和空格
 7         while len(temp) >= n:
 8             f2.write(temp[:n])
 9             f2.write('\n')
10             temp = temp[10:]
11     f2.write(temp)  # 文本最後一行
View Code

(8).求s=a+aa+aaa+aaaa+aa..a的值
 1 """
 2 求s=a+aa+aaa+aaaa+aa..a的值,其中a是一個數字。
 3 例如:2+22+222+2222+22222(此時公有五個數相加),幾個數相加由鍵盤控制
 4 """
 5 
 6 def sum_num(num, dig_num):
 7     var = 0
 8     for i in range(dig_num):
 9         var += int((str(num) * (i + 1)))  # 同理 print("3"*3)
10         if i == (dig_num - 1):
11             print(int((str(num) * (i + 1))), end="=")
12         else:
13             print(int((str(num) * (i + 1))), end="+")
14     return var
15 
16 
17 num = int(input("請輸入要計算的數字:"))
18 dig_num = int(input("請輸入要計算的次數:"))
19 sum_dig = sum_num(num, dig_num)
20 
21 print(sum_dig)
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習更多設計模式請參考:入門設計模式之彙總篇 適配器模式:把一個類的介面轉換為客戶端需要的另一個介面 比如說,我們去相親,目標中的女孩是會唱歌會跳舞的女孩,但是介紹人說這個女孩只會唱歌,不會跳舞,那你肯定不會滿意呀。不過介紹人說,沒關係,我有辦法。哦?那我們來看看他有什麼辦法呢 上方Girl介面就是 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 合成模式的職責是將對象組織到樹結構中 觀察上方類圖: interface,一個介面定義了一個獲得當前對象名字的方法 leaf:樹中的葉子節點,實現了interface Branch:樹枝節點,不僅實現了getName方法,同樣它本身具有添加節點刪除節點的 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 裝飾模式:以對客戶端透明的方式擴展對象的功能 裝飾模式類圖如下: 我們分析一下類圖: Girl:女孩介面,定義了一個getName()方法 XiaoWang:女孩的實現類,她實現了getName方法, Decorator:裝飾類,當我們想要擴展小王的方法 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 代理模式;給某個對象提供一個代理對象,由代理對象持有對原對象的引用。 代理模式就比較符合中國人含蓄的性格,假如有個姑娘想要找個對象,但是直接滿大街去喊我要找對象的不是很多吧。大部分的女孩還是傾向於先去找一個媒人,讓媒人來給自己介紹對象。這裡的媒人其實就是 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 橋梁模式:將抽象化與實現化脫藕,使二者可以獨立的變化 大家應該對日誌記錄比較熟悉,不知道有沒有自己寫過一個日誌處理的程式,你又是如何實現的呢? 今天的橋梁模式就根據一下需求來分析一下: 大家可以看一下這個需求哈,2個以上,那我就實現2個唄,一般人可能都會 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 外觀模式:外部系統與子系統的通信必須通過一個統一的對象進行 舉個例子,現在結婚是不是都找婚慶公司啊,為什麼呢?因為如果不找婚慶公司自己籌備的話,我們可能得自己跑去訂酒店,自己去找主持人,自己去找攝像,自己去找車隊。是不是太麻煩了點,而有了婚慶公司就不一樣 ...
  • 網上有太多的關於SpringMVC的執行流程,相對都是比較官方的解說,以下是自己總結,流程圖先如下顯示: ...
  • 一、推導式 (一).列表推導式(集合推導式也同理於此) 利用列表推導式,取出1 20內所有偶數 li = [i for i in range(1, 21) if i % 2 == 0] 如果只有一個條件,要把if語句寫在最後面 第一個i是放入列表的值,後面都是推導的公式 print(li) 第一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...