PYTHON自動化Day4-交換變量,字符串方法,拷貝,集合,文件,文件指針

一.判斷

#   非空即真、非0即真
# 不為空的話就是true,是空的話就是false
# 只要不是0就是true,是0就是false# 布爾類型
# True  False
name = input('請輸入你的名字:').strip()
a = [] #false
d={} # false
c = 0 #false
f = tuple() #false
e='' #falseif name:  #name里面有沒有東西,print('name不是為空的。。')
else:print('輸入不能為空。。')
# a = b = c = 0  #定義了3個變量 ,值都是0

二.交換變量

a = 1
b = 2#交換變量如果不定義第三個變量的方法:
a = a+b  # 3
b = a-b  # 1
a = a-b  # 2
print(a,b)#python中的做法:
b,a= a,b #交換兩個變量的值,Python底層幫你引入了一個的第三方變量在交換, 多個變量交換也可以 如: a,b,c=b,c,a
print(a,b)

三. 字符串方法:

print(a.index('t'))  #找下標
print(a.find('t'))  #找下標
# 1 find()方法:查找子字符串,若找到返回從0開始的下標值,若找不到返回-1
info = 'abca'
print( info.find('a'))##從下標0開始,查找在字符串里第一個出現的子串,返回結果:0
info = 'abca'
print (info.find('a',1))##從下標1開始,查找在字符串里第一個出現的子串:返回結果3
info = 'abca'
print( info.find('333'))##返回-1,查找不到返回-1
# 2 index()方法:
# python 的index方法是在字符串里查找子串第一次出現的位置,類似字符串的find方法,不過比find方法更好的是,如果查找不到子串,會拋出異常,而不是返回-1
info = 'abca'
print(info.index('a'))
print(info.index('33'))
# rfind和rindex方法用法和上面一樣,只是從字符串的末尾開始查找。print(a.replace('t','T')) #替換
print(a.isdigit()) #是否全都是數字
print(a.islower()) #是否全都是x小寫字母
print(a.isupper()) #是否全都是大寫字母
print(a.isalpha()) #是否全都是漢字或者字母
print(a.isalnum()) #只要里面沒有特殊符號,就返回true &…
print(a.upper())  #變成大寫
print(a.lower())#變成小寫
print(a.startswith('test'))  #以xx開頭
print(a.endswith('.xls')) # 以xx結尾
import string
print(string.ascii_lowercase) #所有的小寫字母
print(string.ascii_uppercase)  #所有大寫字母
print(string.digits)  #所有的數字
print(string.ascii_letters)  #所有大寫字母和小寫字母
print(string.punctuation) #所有的特殊字符l=['zhang','liu','liang']
res = ','.join(string.ascii_lowercase)  #1、它把一個list變成了字符串
#2、通過某個字符串把list里面的每個元素連接起來
#3、只要是可以循環的,join都可以幫你連起來
names='abcd'
print(list(names))
name_list = names.split()#根據某個字符串,分割字符串,什么也不傳的話,是以空格分割的
print(name_list)
user='牛寒陽'
sex=''
age=18
addr='回龍觀'
money= '1000w'
cars='1w臺'
# words = 'insert into user values ("%s","%s","%s","%s","%s","%s");'%(user,sex,age,addr,money,cars)
sql = 'insert into user values ("{name}","{sex}","{age}","{addr}","{qian}","{che}");'
new_sql = sql.format(age=age,che=cars,name=user,sex=sex,qian=money,addr=addr)
print(new_sql)
print('歡迎登錄'.center(50,'*'))
print('1'.zfill(4))  #自動補足4位,前面補0

?四.深拷貝,淺拷貝

# int float list dict tuple  set
# 天生去重
import copy
#淺拷貝
#深拷貝

lis = [1,1,2,3,4,5,6,8]
l2 = copy.deepcopy(lis) #深拷貝
# l2 = lis   #淺拷貝
print(id(lis))
print(id(l2)) #id和lis的不同
l2.append('aaa')
lis.remove(8)
print(lis)
print(l2)
# print(id(l))
print(id(l2))   #淺拷貝和深拷貝的區別就是深拷貝會重新開辟一個內存空間,連個list相互獨立不受影響#動態循環刪list里面的數據的時候,結果會不正確
l=[1,1,2,3,4,5,6,8]
#  0 1 2 3 4 5 6 7    第一次取下標0的元素1,然后刪掉
# [1,2,3,4,5,6,8]
#  0 1 2 3 4 5 6      第二次取下標1的元素2, 所以第一個元素被跳過了沒有檢查
print(l)
for i in l:if int(i)%2!=0:l.remove(i)
print(l)  #[1, 2, 4, 6, 8]  #為什么多了一個1?因為是根據下標循環list的,操作后元素的位置變了#所以我們定義兩個相同的list,用第二個循環,用第一個刪除,結果就正確了,因為可以保證沒有元素都被檢查到了
l2=copy.deepcopy(l)
for i in l2:if int(i)%2!=0:l.remove(i)
print(l)

五.集合

# 集合天生就能去重,集合也是無序的
s=set()  #空集合
s2 = set('1234445566778')
# print(s2)
s3 = {'1','1','3','4','5','6','7','9'}  #自己定義一個集合,和字典的區別是字典有key:value
#d = {'k':'v'} #字典
# 交集 并集 差集
# 就是兩個集合相同的地方
print(s3 & s2)  #取交集
print(s3.intersection(s2))  #取交集
#并集# 就是把兩個集合合并到一起,然后去重
print(s2 | s3)  #取并集
print(s2.union(s3))  #取并集
s4 = {1,2,3}
s5 = {1,4,6}
#差集#在一個集合里有,在另一個集合里面沒有的
#    S4里面有,s5里面沒有的
#   取一個集合存在,另一個不存在的元素
print( s4 - s5)  #取差集
print(s4.difference(s5)) #取差集
#對稱差集#倆集合里面都沒有#去掉倆集合里面都有的
print(s4 ^ s5)
print(s4.symmetric_difference(s5))
s4.add('ss') #加元素
s4.pop()#隨機刪一個
s4.remove('ss')#指定刪除哪個
s4.update({1,2,3}) #把另外一個集合加進去
s4.isdisjoint(s5)#如果沒有交集的話返回true,可以用于判斷是否不包含黑名單中的內容

學會了集合后,判斷密碼復雜性就更方便了:

# 校驗密碼里面是否包含
# 數字、大寫字母、小寫字母、特殊符號
import string
nums_set = set(string.digits)
upper_set = set(string.ascii_uppercase)
lower_set = set(string.ascii_lowercase)
pun = set(string.punctuation)
for i in range(5):pwd=input('請輸入密碼:').strip()pwd_set = set(pwd)if pwd_set & nums_set and pwd_set & upper_set and pwd_set & lower_set and pwd_set & pun:print('密碼是合法的',pwd)else:print('密碼必須包含大寫字母、小寫字母、數字和特殊字符')

六.文件操作

# python 2 3
# file() #python2中有,python3中沒有
#utf-8  bbk
# 讀模式  寫模式  追加模式
f = open('names','r',encoding='utf-8') #python3和python2中都有 ,r模式指針在文件開頭,讀過后到末尾
print(f.read()) #讀文件
# f.seek(0)
print(f.readline()) #讀取一行內容
# f.seek(0)
print(f.readlines())  #是把文件的每一行放到一個list里面
# f.write('雙方都')#寫入
# f.seek(0)
# print(f.read())
#只要沾上了r,文件不存在的就會報錯
#只要沾上了w,都會清空原來的內容# 讀模式    r    讀寫模式 r+#1、不能寫#2、文件不存在的話會報錯
# 寫模式  w  寫讀模式   w+#1、文件不存在的話,會幫你新建文件#2、打開一個已經存的文件,他會清空以前文件的內容#3、不能讀# 追加模式  a   追加讀模式 a+  #文件末尾去增加內容# 1、文件不存在的話,會幫你新建文件# 2、打開一個已經存的文件,不會清空,末尾增加# 3、不能讀

七.文件指針

# 文件指針:
# 用來記錄文件到底讀到哪里了
f = open('naems','a+',encoding='utf-8')
# a模式的文件指針是在末尾的
f.write('呵呵呵')
f.seek(0)  #移動文件指針到最前面
f.write('鵬妹妹')   #移動完文件指針之后,是只能讀,寫的時候還是在文件末尾寫
f.seek(0)
print(f.read())

小練習,自動產生電話號碼,并寫入到一個文件中:

import random
#18612343,
#12384234
# 1861253 2945
print(random.randint(1,9999))
print('1'.zfill(4))  #自動補足4位,前面補0#1、先隨機產生一些手機號
#2、寫到文件里面
f = open('phones.txt', 'w')
num = input('請輸入你要產生的手機號個數:')
for i in range(int(num)):  #
    start = '1861235'random_num = str(random.randint(1, 9999))new_num = random_num.zfill(4)#補0phone_num = start+new_num  f.write(phone_num+'\n')
f.close()

小練習:

#需求
# 1、監控日志,如果有攻擊咱們的,就把ip加入黑名單#分析:#1、打開日志文件#2、把ip地址拿出來#3、判斷每一個ip出現的次數,如果大于100次的話,加入黑名單#4、每分鐘讀一次#直接循環一個文件對象的話,每次循環的是文件的每一行
#文件句柄   文件對象
import timepoint = 0  # 每次記錄文件指針的位置
while True:all_ips = [] #存放所有的ip地址f = open('access.log',encoding='utf-8')f.seek(point)#移動文件指針for line in f:ip = line.split()[0]all_ips.append(ip)point = f.tell() #記錄了指針的位置all_ip_set = set(all_ips)  #
    for ip in all_ip_set:if all_ips.count(ip)>50:print('應該加入黑名單的ip是%s'%ip)f.close()time.sleep(60) #暫停60秒# for i in all_ips:
#     if all_ips.count(i)>100:
#         print('攻擊的ip是%s'%i)

?八.自動關閉文件

with open('geci','a+') as f:for line in f:pass

?作業:

#1、寫一個自動生成密碼文件的程序
1、你輸入幾,文件里面就給你產生多少條密碼
2、密碼必須包括,大寫字母、小寫字母、數字、特殊字符
3、密碼不能重復
4、密碼都是隨機產生的
5、密碼長度6-11
http://www.nnzhp.cn/archives/150
隨機數怎么用 參考 random模塊怎么用
import random,string
i = input("請輸入需要產生的條數:")
f = open("passwd.txt",'w')
str = string.ascii_letters + string.punctuation + string.digits
list = []
passwd_insert=''
a = 0
while a<int(i):passwd_new = []passwd_new.append(random.choice(string.digits))passwd_new.append(random.choice(string.punctuation))passwd_new.append(random.choice(string.ascii_lowercase))passwd_new.append(random.choice(string.ascii_uppercase))passwd_new=random.sample(str,random.randint(2,7)) + passwd_newrandom.shuffle(passwd_new)print(passwd_new)passwd_insert = ''.join(passwd_new)if list.count(passwd_insert):continueelse:list.append(passwd_insert)f.write(passwd_insert + '\n')a+=1
f.close()
#2、寫一個注冊的程序,賬號和密碼都存在文件里面。
choice = input('請輸入你的選擇:1,注冊2、刪除用戶3、登錄')
#注冊
輸入
賬號
密碼
密碼確認
# #需要校驗用戶是否存在,兩次輸入的密碼,是否一致,為空的情況
#賬號和密碼都存在文件里面
#刪除
輸入一個用戶名
#需要校驗用戶是否存在
#登錄
輸入賬號密碼登錄
user_info = {} #存放所有的用戶
with open('users.txt') as f:for line in f:# niuhanyang,123456\nline = line.strip()temp  = line.split(',')username = temp[0]pwd = temp[1]user_info[username]=pwd
for i in range(3):choice = input('請輸入你的選擇''1、登錄 2、注冊 3、刪除').strip()if choice=='1':username = input('username:').strip()pwd = input('pwd:').strip()if username and pwd:if username in user_info:if user_info.get(username)==pwd:print('登錄成功')else:print('賬號密碼錯誤!')else:print("user not found!")else:print('賬號密碼不能為空!')elif choice=='2':username = input('username:').strip()pwd = input('pwd:').strip()cpwd = input('cpwd:').strip()if username and pwd and cpwd:if username in user_info:print('該用戶已經被注冊!')else:if pwd==cpwd:user_info[username]=pwdprint('恭喜,注冊成功!')else:print('兩次輸入的密碼不一致!')else:print('不能為空!')elif choice=='3':username = input('username:').strip()if username:if username in user_info:user_info.pop(username)print('刪除成功!')else:print('不能為空!')else:print("輸入有誤,請重新輸入")
else:with open('users.txt','w') as fw:for uname,pwd in user_info.items():fw.write(uname+','+pwd+'\n')

?

轉載于:https://www.cnblogs.com/lilyzhang-2018/p/9878495.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250328.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250328.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ajax-jsonp

一、什么是Jsonp jsonp(json with padding) 是一種“使用模式”&#xff0c;可以讓網頁從別的域名那獲取資料&#xff0c;即跨域讀取數據。 為什么會使用jsonp呢&#xff1f;因為同源策略&#xff08;數據來源一致&#xff09;&#xff0c;現在所有支持javascript 的瀏覽器都會…

javascript --- [讀書筆記] 回流與重繪 前端優化小結

1. 瀏覽器渲染原理 請說出: 從用戶在瀏覽器地址輸入網址,到看整個頁面,中間都發生了哪些事情? HTTP請求階段HTTP響應階段瀏覽器渲染階段 1.1 可能用到的知識 1.1.1 進程 Process、線程 Thread、 棧內存 Stack 進程: 就是開的每一個程序: QQ、網易云音樂、Typora、VSCode……

ARP協議,以及ARP欺騙

1.定義&#xff1a; 地址解析協議&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機&#xff0c;并接收返回消息&#xff0c;以此…

css --- [小結]讓盒子水平垂直居中的解決方案

描述 有如下模型,想辦法讓 <style>.box{width: 500px;height: 500px;background: skyblue;} </style> <div class"box"><div class"inner"></div> </div>想辦法讓inner在box中水平垂直居中 方案1: 使用絕對定位 讓…

數組洗牌 Fisher Yates

看播放器代碼時發現的這個洗牌算法&#xff0c;再網上查了一番 作用是把數組變成隨機序列&#xff0c;原理類似于從牌堆A中隨機抽牌放進牌堆B 代碼1&#xff1a; 返回一個由&#xff08;數組下標&#xff09;組成的數組 function random(length) {function shuffle (arr) {for…

一個不錯的MYSQL數據庫備份類,PHP版,一個文件,精簡版

1 <?php2 class DbManage {3 var $db; // 數據庫連接4 var $database; // 所用數據庫5 var $sqldir; // 數據庫備份文件夾6 // 換行符7 private $ds "\n";8 // 存儲SQL的變量9 public $sqlContent "";10 // 每條sql…

javascript --- 堆棧內存與閉包的作用

你可能會用到的 堆內存: 存儲引用類型值所在的空間棧內存: 存儲基本類型值和存儲代碼所在空間函數上下文: JS每一個函數在執行的時候都會創建一個執行上下文 1. 堆內存中的數字和字符串都是相等的 let a {}, b0, c0; a[b] marron; a[c] Mar console.log(a[b]) // Mar第一…

python_sting字符串的方法及注釋

string類型是python內置的類型&#xff0c;無需安裝 方法/屬性說明 capitalize() 把字符串的第一個字符改為大寫 casefold() 把整個字符串的所有字符改為小寫 center(width) 將字符串居中&#xff0c;并使用空格填充至長度width的新字符串 count(sub[,start[,end]]) …

作業3

import turtle turtle.bgcolor(red) turtle.color(yellow)turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(100)turtle.right(144) turtle.end_fill() turtle.done()轉載于:https://www.cnblogs.com/zhangkef97/p/9016608.html

javascript --- [小練習]變量提升、優先級綜合

求下列函數輸出結果 function Foo() {getName function() {console.log(1)}return this } Foo.getName function() {console.log(2) } Foo.prototype.getName function() {console.log(3) } var getName function() {console.log(4) }function getName() {console.log(5) …

Confluence 6 自定義 Decorator 模板的宏和針對高級用戶

宏 頁面的某些部分使用的是 Velocity 宏進行創建的&#xff0c;包括導航欄。有關宏的創建&#xff0c;你可以參考頁面 Working With Decorator Macros 頁面中的內容。 針對高級用戶 velocity 目錄是 Confluence 首先進行模板搜索的查找路徑。你可以對 Confluence 的 velocity …

Matlab之rand(), randn(), randi()函數的使用方法

1. rand()函數用于生成取值在&#xff08;0~1&#xff09;之間均勻分布的偽隨機數。rand(n)&#xff1a;生成n*n的0~1之間的滿足均勻分布的偽隨機矩陣&#xff1b;rand(m,n)&#xff1a;生成m*n的偽隨機數&#xff1b;rand(m,n,double)&#xff1a;生成m*n的雙精度偽隨機數&am…

javascript --- [有趣的條件]雙等號的隱式調用和數據劫持

1 雙等號的隱式調用和數據劫持 求下面條件,在a為什么樣時,等號成立 if(a 1 && a 2 && a 3){console.log(等號成立) }1.1 雙等號的隱式轉換 首先得了解雙等號的隱式轉換規則 等式備注對象 字符串隱式調用 toString方法將對象轉換成字符串null undeifne…

分組查詢

1、簡單分組查詢 語法形式&#xff1a; select function() from table_name where condition group by field; 進行分組查詢時&#xff0c;分組所依據的字段上的值一定要有重復值&#xff0c;否則分組沒有任何意義。 2、實現統計功能分組查詢 關鍵字group by單獨使用時&#xf…

深入探討多模態模型和計算機視覺

近年來&#xff0c;機器學習領域在從圖像識別到自然語言處理的不同問題類型上取得了顯著進展。然而&#xff0c;這些模型中的大多數都對來自單一模態的數據進行操作&#xff0c;例如圖像、文本或語音。相比之下&#xff0c;現實世界的數據通常來自多種模態&#xff0c;例如圖像…

移動硬盤函數不正確要如何尋回資料

移動磁盤打不開函數不正確&#xff0c;是因為這個I盤的文件系統內部結構損壞導致的。要恢復里面的數據就必須要注意&#xff0c;這個盤不能格式化&#xff0c;否則數據會進一步損壞。具體的恢復方法看正文 工具/軟件&#xff1a;AuroraDataRecovery 步驟1&#xff1a;先百度搜索…

vue --- [全家桶]vue-router

1. Vue - router Vue Router是 Vue.js 官方的路由管理器它和Vue.js的核心深度集成,可以非常方便的用于SPA應用程序的開發 Vue Router包含的功能有: 支持HTML5歷史模式或hash模式支持嵌套路由支持路由參數支持編程式路由支持命名路由 <div id"app"><rout…

HashMap的四種訪問方式

第一種&#xff1a;通過Map.entrySet使用iterator遍歷key和value 1 public void visit_1(HashMap<String,Integer> hm){ 2 Iterator<Map.Entry<String,Integer>> it hm.entrySet().iterator(); 3 while(it.hasNext()){ 4 Map.Entry<String ,Integer> …

16.unix網絡編程一卷 unp.h

unix網絡編程 --ubuntu下建立編譯環境 1.安裝編譯器&#xff0c;安裝build-essential sudo apt-get install build-essential 2.下載本書的頭文件 下載unp13e&#xff1a; http://pix.cs.olemiss.edu/csci561/prg561.1.html 3.進入unp13e 查看readme&#xff0c;照下列提示操作…

webpack --- [讀書筆記] webpack中常用的一些配置項

1. Webpack 當前Web開發面臨的困境 文件依賴關系錯綜復雜靜態資源請求效率低模塊化支持不友好瀏覽器對高級JavaScript特性兼容程度低 1.1 webpack概述 webpack是一個流行的前端項目構建工具,可以解決當前web開發中所面臨的困境. webpack提供了友好的模塊化支持,以及代碼壓…