python Ai 應用開發基礎訓練,字串,字典,檔案

稷下元歌發表於2024-03-09

-------------------------------------- 程式設計能是大模型應用的天花板..................................................................

所以要好好將大模型應用在企業一定要好好練好最看不起的一環,基礎能力字串處理 本文件來自老男孩培訓Alex 課程記錄,

我在2017年聽過這個老師的課,非常不錯,所以在寫Ai 應用開發的時候,在基礎部份會參考高手的成果

name = "my name is alex"

pring(name.caitalize()) 首字母大寫

pring(name.count("my")) 統計字串出現的次數,可以是單字或多詞

print(name.casefold()) 這個說是轉換寫成小寫,還會對特殊字元處理,一處理就可能不是我們想要的了,況且還有更好的相同功能的方法,所以很少少用,用不著

pring(name.center(50,"_")) 居中列印,列印50個字元,不夠用——補位

print(name.ljust(50,"***")) 左邊對齊,右邊的用*** 代替,補齊50位

print(name.rjust(50,'*')) 右對齊,不多的補**

print("A".lower()) 大寫轉小寫 "upp".upper() 小寫轉大寫

"\nAlex\n".lstrip() 左邊去空格 rstip() 去掉右邊 strip() 去掉空格

pring(name.encode) 編碼相關,將二進位制編成位元組

pring(name.endswith("alex")) 是否是這個結尾 返回true 或 false

pring(name.expandtabs(tabsize = 30)) 字串中出現的\t 等於多少個空格
pring.find("y") 找到字串的索引取出來,用於切片時候用 那麼。name[name.find("name") :])
pring(name.format(name="alex",year = 33)) 格式化字串,將字串中的{name} 變數替換
print(name.format_map({}) 可以傳一下字字賟 來格式化字串,通常format 就夠用了

pring(name.isalnum) 是不是阿拉伯數字

print (''ssss".isalpha()) 是不是純英文

print("1A".isdecimal) 是不是隻包括十進位制

print("1A".isdigit) 是不是整數

title(),將字母的首字母變大寫

translate 對映majetrabs 這二個方法一起使用,先用majetrabs 建立一個射映表,然後translate 轉換

# 建立字元對映表
mapping = str.maketrans("aeiou", "12345")

# 使用translate()方法進行字元替換
string = "Hello, World!"
translated_string = string.translate(mapping)

print(translated_string)    輸出結果是   H2ll4, W4rld!   
解釋  先給aeiou  映一個其它字元,然後在使用中遇到這幾個字元就替換成對映字元,比較好理解

 replace 替換

print("xsy".isidentifier()) 是不是一個合法的變數名。支援中文英文,但是不能數字開頭

print("33.33".isnumeric())是不是隻有數字

"my".isprintable 是不是包括可打針印的,其實就是說這個字元中是不是非輸出的法字元,說是說\n \t 這樣的字元,有製表符會返false

istitle() 是不是每個單詞都 是首字母大寫,單詞之間有空格

join '+++'.join(['a','b','c']) 將列表的元素用什麼點連起來。

split() 將字串切成列表

string = "Hello, World! How are you?"
words = string.split()
print(words)   //輸出結果   ['Hello,', 'World!', 'How', 'are', 'you?']  

字典操作

可以將每個人的資訊儲存起來,比如省市縣的關聯資訊,一個人資訊這些都 可以用字典來儲存,info = {"姓名":"張三"}} 有索引,有資訊的元素叫做字典,

程式設計中叫有key和valu由於是key 是唯 一的,所以字母無序,

假設一個字典是這樣子

info = {
    "stu1101": "TengLan",
    "stu1102": "Loula",
    "stu1103": "Maliy"
}

name = info["stu1101"]
print(name)  # 輸出: TengLan
列印這個字典方式是: for key, value in info.items(): print(key, value)

取出一個值:
print(info["stu1101"])
查詢
"stu1101" in info //True
info["stu11011"] 查詢這個值,但是這個值如果沒有會報錯,用get不會錯,info.get("stu11011")

修改一個值
info["stu1101"] = "武騰蘭"

刪除
del info["11011"] 刪除
info.pop("stu11011")
info.popitem()隨便刪一個
更新整個字典,可以用一個新字典更新,相同dey 覆蓋,不同的增加 info.update(b)
將一個例錶轉換為列表 info.item()
info.formdeys([6,7,9])建立一個新字典,key 是6,7,8
c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444])
c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444])
執行結果是:
{
    6: [1, {"name": "alex"}, 444],
    7: [1, {"name": "alex"}, 444],
    8: [1, {"name": "alex"}, 444]
}

  以下程式碼是說dict.fromkeys()如果用以下方式建立的話,可以value 是一個引用的值,以後修改其中一個值,會影起其它值改變,

在這個程式碼段中,​c​ 是透過 ​dict.fromkeys()​ 方法建立的字典,該方法的作用是使用指定的鍵列表建立一個新字典,其中所有的值預設為 None 或者指定的預設值。

c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444])
c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444])
​
執行這段程式碼後,​c​ 的內容將是:

{
    6: [1, {"name": "alex"}, 444],
    7: [1, {"name": "alex"}, 444],
    8: [1, {"name": "alex"}, 444]
}
{
    6: [1, {"name": "alex"}, 444],
    7: [1, {"name": "alex"}, 444],
    8: [1, {"name": "alex"}, 444]
}
​
注意,在這個操作中,由於 ​dict.fromkeys()​ 方法建立的字典中每個鍵都引用同一個列表物件 ​[1, {"name": "alex"}, 444]​,因此當修改其中一個鍵對應的列表時,其他鍵對應的列表也會隨之改變。這是因為它們實際上引用的是同一個物件。

如果希望每個鍵引用不同的列表物件,可以考慮使用以下方式建立 ​c​:

c = {key: [1, {"name": "alex"}, 444] for key in [6, 7, 8]}
c = {key: [1, {"name": "alex"}, 444] for key in [6, 7, 8]}
​
這樣每個鍵的值都是一個新的列表物件,而不是共享同一個列表物件,指定的值實際上是同一個物件的引用。當您修改其中一個鍵對應的值時,因為其他鍵對應的值與之相同,所以會看到它們也發生了變化。

如果您希望每個鍵引用不同的列表物件,可以使用以下方式建立 ​c​:

keys = [6, 7, 8]
values = [1, {"name": "alex"}, 444]
c = {key: list(value) for key in keys}
keys = [6, 7, 8]
values = [1, {"name": "alex"}, 444]
c = {key: list(value) for key in keys}
​
這樣每個鍵的值都是一個新的列表物件,而不是共享同一個列表物件。

以下是修正後的程式碼示例:

keys = [6, 7, 8]
values = [1, {"name": "alex"}, 444]
c = {key: list(value) for key in keys}
print(c)

c[7][1]['name'] = "Jack Chen"
print(c)  # 輸出: {6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'Jack Chen'}, 444], 8: [1, {'name': 'alex'}, 444]}

keys = [6, 7, 8]
values = [1, {"name": "alex"}, 444]
c = {key: list(value) for key in keys}
print(c)

c[7][1]['name'] = "Jack Chen"
print(c)  # 輸出: {6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'Jack Chen'}, 444], 8: [1, {'name': 'alex'}, 444]}
在Python中,使用 ​for i in data​遍歷字典時,​i​表示的是字典的鍵(key),而不是鍵值對。這是因為字典是由鍵值對組成的資料結構,而在遍歷時,預設情況下只遍歷字典的鍵。如果你想同時訪問鍵和值,
可以使用 ​data.items()​方法來遍歷字典的鍵值對,例如:
data = {"key1": "value1", "key2": "value2", "key3": "value3"} # 遍歷鍵值對 for key, value in data.items(): print(key, value) data = {"key1": "value1", "key2": "value2", "key3": "value3"} # 遍歷鍵值對 for key, value in data.items(): print(key, value) ​ 輸出結果: key1 value1 key2 value2 key3 value3 key1 value1 key2 value2 key3 value3

  

 案例,叫三級查詢,程式執行時,先列出要查詢省份名稱,然後使用者輸出省的名稱和編號進行相詢,如果輸入某個省的編號或省份名稱,系統就列表這個省下面所有市的序號和名稱 ,然後提示請輸入你要查那個市 ,列出市下面所有縣的編號和名稱,使用者可以查某一個市所有的縣。在任意選單都 可以按Q退程式,按E 返回一上級。如果沒有上級則不顯示,返回一級。

# 省市縣資料
data = {
    "1": {"name": "浙江省", "cities": {
        "1": {"name": "杭州市", "counties": {
            "1": "西湖區",
            "2": "上城區",
            "3": "下城區"
        }},
        "2": {"name": "溫州市", "counties": {
            "1": "鹿城區",
            "2": "龍灣區",
            "3": "甌海區"
        }}
    }},
    "2": {"name": "江蘇省", "cities": {
        "1": {"name": "南京市", "counties": {
            "1": "玄武區",
            "2": "白下區",
            "3": "秦淮區"
        }},
        "2": {"name": "蘇州市", "counties": {
            "1": "姑蘇區",
            "2": "虎丘區",
            "3": "吳中區"
        }}
    }}
}

# 顯示省份列表
print("省份列表:")
for key, value in data.items():
    print("{}: {}".format(key, value["name"]))

# 使用者選擇省份
province_choice = input("請輸入省份名稱或編號進行查詢:")
if province_choice.lower() == "q":
    exit()
elif province_choice.lower() == "e":
    exit()

# 根據使用者選擇的省份獲取市資訊
cities = data[province_choice]["cities"]
print("\n{} 下的市列表:".format(data[province_choice]["name"]))
for key, value in cities.items():
    print("{}: {}".format(key, value["name"]))

# 使用者選擇市
city_choice = input("請輸入市編號進行查詢,按Q退出,按E返回上一級:")
if city_choice.lower() == "q":
    exit()
elif city_choice.lower() == "e":
    exit()

# 根據使用者選擇的市獲取縣資訊
counties = cities[city_choice]["counties"]
print("\n{} 下的縣列表:".format(cities[city_choice]["name"]))
for key, value in counties.items():
    print("{}: {}".format(key, value))

不同的格式和不同的思路

  

# 作者資訊
__author__ = "www.51"

# 多級城市縣鎮村的字典資料
data = {
    '北京':{  # 北京作為一級鍵
        "昌平":{  # 昌平作為二級鍵
            "沙河":["oldboy","test"],  # 沙河作為三級鍵,值為列表
            "天通苑":["鏈家地產","我愛我家"]  # 天通苑作為三級鍵,值為列表
        },
        "朝陽":{  # 朝陽作為二級鍵
            "望京":["賓士","陌陌"],  # 望京作為三級鍵,值為列表
            "國貿":{"CICC","HP"},  # 國貿作為三級鍵,值為集合
            "東直門":{"Advent","飛信"},  # 東直門作為三級鍵,值為集合
        },
        "海淀":{},  # 海淀作為二級鍵,值為空字典
    },
    '山東':{
        "德州":{},  # 德州作為二級鍵,值為空字典
        "青島":{},  # 青島作為二級鍵,值為空字典
        "濟南":{}  # 濟南作為二級鍵,值為空字典
    },
    '廣東':{
        "東莞":{},  # 東莞作為二級鍵,值為空字典
        "常熟":{},  # 常熟作為二級鍵,值為空字典
        "佛山":{},  # 佛山作為二級鍵,值為空字典
    },
}

# 退出標誌
exit_flag = False

# 主迴圈,根據使用者輸入不斷展示相應的資料
while not exit_flag:
    for i in data:  # 遍歷一級鍵
        print(i)  # 列印一級鍵
    choice = input("選擇進入1>>:")  # 使用者選擇一級鍵
    if choice in data:  # 判斷使用者輸入是否為一級鍵
        while not exit_flag:  # 進入二級鍵選擇迴圈
            for i2 in data[choice]:  # 遍歷二級鍵
                print("\t",i2)  # 列印二級鍵
            choice2 = input("選擇進入2>>:")  # 使用者選擇二級鍵
            if choice2 in data[choice]:  # 判斷使用者輸入是否為二級鍵
                while not exit_flag:  # 進入三級鍵選擇迴圈
                    for i3 in data[choice][choice2]:  # 遍歷三級鍵
                        print("\t\t", i3)  # 列印三級鍵
                    choice3 = input("選擇進入3>>:")  # 使用者選擇三級鍵
                    if choice3 in data[choice][choice2]:  # 判斷使用者輸入是否為三級鍵
                        for i4 in data[choice][choice2][choice3]:  # 遍歷四級鍵(值)
                            print("\t\t",i4)  # 列印四級鍵(值)
                        choice4 = input("最後一層,按b返回>>:")  # 提示使用者輸入
                        if choice4 == "b":  # 如果使用者輸入b
                            pass  # 繼續下一個迴圈
                        elif choice4 == "q":  # 如果使用者輸入q
                            exit_flag = True  # 設定退出標誌為True
                    if choice3 == "b":  # 如果使用者輸入b
                        break  # 退出當前迴圈,返回上一級
                    elif choice3 == "q":  # 如果使用者輸入q
                        exit_flag = True  # 設定退出標誌為True
            if choice2 == "b":  # 如果使用者輸入b
                break  # 退出當前迴圈,返回上一級
            elif choice2 == "q":  # 如果使用者輸入q
                exit_flag = True  # 設定退出標誌為True

  

  




  

相關文章