python學習日記(文件操作練習題)


登錄注冊(三次機會)

name = input('請注冊姓名:')
password = input('請注冊密碼:')
with open('log',mode='w',encoding='utf-8') as f:
    f.write('{}\n{}'.format(name,password))#格式化輸出,兩個參數寫進一行,write不允許兩個變量
print('注冊成功')
lis = []
count = 3
while count > 0:
    count -= 1
    with open('log', mode='r+', encoding='utf-8') as f1:
        for i in f1:
            lis.append(i)#讀取內容寫入到列表中
        name1 = input('請輸入登錄用戶名:')
        if name1 == lis[0].strip():#strip()可以去除\n,\t
            password1 = input('請輸入登錄密碼:')
            if password1 == lis[1]:
                print('\n登錄成功!')
                break
            else:
                print('密碼錯誤')
                print('您還有%d次機會'%(count))
                if count == 0:
                    chance = input('機會已用完,是否還想繼續?Y(case-sensitive)')
                    if chance.upper() == 'Y':
                        count = 3
                        continue
        else:
            print('用戶名錯誤,請重新輸入')
            print('您還有%d次機會'%(count))
            if count == 0:
                chance = input('機會已用完,是否還想繼續?Y(case-sensitive)')
                if chance.upper() == 'Y':
                    count = 3
                    continue
else:
    print('\n明天再來吧')

 改變文件數據類型

# 1. 文件a.txt內容:每一行內容分別為商品名字,價錢,個數。
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3
# 通過代碼,將其構建成這種數據類型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 並計算出總價錢。
題目

一、(問題少年)

with open('a.txt','r+',encoding='utf-8') as f:
    li = []
    li1 = []
    for line in f:
        li.append(line.split())
    print(li)
    # dic = {}#問題在這里,dic只有一個地址(自己遇到的問題 1),最后字典里只有一組值,列表里添加的全都是這一組,內存指向問題
    j = 0
    sum = 0
    while j < len(li):
        dic = {}#解決問題:每次循環都重新建一個新的dic
        dic['name'] = li[j][0]
        dic['price'] = li[j][1]
        dic['amount'] = li[j][2]
        print(dic)
        li1.append(dic)#直接添加字典,必須每次循環都要重新定義字典,另開內存地址,不然一直指向同一個地址,列表添加多少次值都是字典最后更新的數據
        # li1.append({'name':li[j][0],'price':li[j][1],'amount':li[j][2]})
        cost = int(li[j][1]) * int(li[j][2])#不轉成int 不能進行運算str
        # cost = int(dic['price']) * int(dic['amount'])#不轉成int 不能進行運算str(自己遇到的問題2)
        print(cost)
        sum += cost
        j = j+1
print(li1)
print('總的價格為:',sum)#+加號拼接提示int 和 str不能拼接,所以用逗號。(自己遇到的問題3)

二、(新的角度)

with open('a.txt','r+',encoding='utf-8') as f:
    li = []
    li1 = []
    for line in f:
        li.append(line.split())
    print(li)
    # dic = {}
    j = 0
    sum = 0
    while j < len(li):
        dic = {}#看到沒?放這里啦,關注點一
        dic['name'] = li[j][0]
        dic['price'] = li[j][1]
        dic['amount'] = li[j][2]
        print(dic)
        # li1.append(dic)
        li1.append({'name':li[j][0],'price':li[j][1],'amount':li[j][2]})#從列表添加value,關注點二
        # cost = int(li[j][1]) * int(li[j][2])#不轉成int 不能進行運算str
        cost = int(dic['price']) * int(dic['amount'])#不轉成int 不能進行運算str
        print(cost)
        sum += cost
        j = j+1
print(li1)
print('總的價格為:',sum)#+加號拼接提示int 和 str不能拼接,所以用逗號。

修改文件內容

有如下文件:
-------
This is a message
tony是一個名副其實的iron-man。
tony其實是個男人。
誰說tony是壞人?
你們真逗,tony再厲害,也掩飾不住資深富人的氣質。
----------
將文件中所有的tony都替換成大寫的IM。

with open('file','r+',encoding='utf-8') as f1,\
    open('file.bak','a',encoding='utf-8') as f2:
    for line in f1:
        if 'tony' in line:
            line = line.replace('tony','IM')
        f2.write(line)
import os
os.remove('file')
os.rename('file.bak','file')

pass


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM