python學習day04 演算法集合函式
阿新 • • 發佈:2018-12-09
演算法部分
from __future__ import division print """ 演算法 1.加 2.減 3.乘 4.除 """ while True: first_num = input("請輸入第一個數字:") action = input("請輸入你的選擇:") sec_num = input("請輸入第二個數字:") if action == 1: res = first_num + sec_num elif action == 2: res = first_num - sec_num elif action == 3: res = first_num * sec_num elif action == 4: if sec_num == 0: print "除數不能為0!" continue else: res = first_num / sec_num else: print "error" print res
使用字典
num1 = input("num1:")
oper = input("oper:")
num2 = input("num2:")
d = {
'+':num1 + num2
'-':num1 - num2
'*':num1 * num2
'/':num1 / num2
}
print d.get(oper)
使用者管理系統
#!/usr/bin/env python #encoding=utf-8 """ Name:使用者管理系統.py Author:song Date:18-3-20 connect:[email protected] esac: """ users = { 'root':{ 'name':'root', 'passwd':'westos', 'age':18, 'gender':"", 'email':['
[email protected]','[email protected]'] }, 'student':{ 'name':'student', 'passwd':'redhat', 'age':22, 'gender':"", 'email':['[email protected]','[email protected]'] }, } count = 0 while count < 3: while True: print """ 使用者管理系統 1. 註冊 2. 登陸 3. 登出 4. 顯示 5. 退出 """ choice = raw_input("請輸入你的選擇:") if choice == "1": print username = raw_input("請輸入使用者名稱:") if username in users: print "該使用者名稱已被註冊!" else: passwd = raw_input("請輸入密碼:") while True: gender = raw_input("0-女性,1-男性:") if gender: break else: print "該項為必填項!" while True: age = raw_input("請輸入年齡:") if age: break else: print "該項為必填項!" email = raw_input("請輸入郵箱:") if not email: email = None users[username] = { 'name': username, 'passwd': passwd, 'gender':gender, 'age': age, 'email': email, } print "%s使用者註冊成功!"%(username) elif choice == "2": login_user = raw_input("登陸使用者名稱:") login_passwd = raw_input("請輸入密碼:") if login_user in users: if login_passwd in users[login_user]["passwd"]: print "登陸成功!" else: count += 1 if count == 3: print "錯誤3次!!!" exit() print "密碼錯誤!" else: print "無此使用者名稱!" break elif choice == "3": del_username = raw_input("請輸入要登出的使用者:") users.pop(del_username) elif choice == "4": print users.keys() elif choice == "5": exit(0) else: print "登陸次數超過3次,請稍後再試!!"
ATM取款系統
info = """ ATM櫃員機管理系統
1.取款 4.查詢餘額
2.存款 5.修改密碼
3.轉賬 6.退出
"""
d = {
123: {
"card": 123,
"passwd": 123,
"money": 666
}
}
Times = 0
while 1:
Card = input("請輸入卡號:")
Passwd = input("請輸入密碼:")
if Card in d and Passwd == d[Card]["passwd"]:
while 1:
print info
choice = raw_input("please input your action:")
if choice == "1":
while 1:
a = input("請輸入取款金額:")
if d[Card]["money"] >= a:
print "取款成功"
a1 = d[Card]["money"] - a
d[Card].update(money=a1)
break
else:
print "餘額不足!!!"
break
elif choice == "2":
b = input("請輸入存款金額:")
b1 = d[Card]["money"] + b
d[Card].update(money=b1)
print "¥%d已存入,總餘額為:%d" % (b, b1)
elif choice == "3":
d4 = input("請輸入轉賬帳號:")
if d4 == Card:
print "請輸入其他帳號!!!"
else:
while 1:
d1 = input("請輸入轉賬金額:")
d2 = input("請輸入密碼:")
if d2 == d[Card]["passwd"]:
if d[Card]["money"] >= d1:
Times = 0
d3 = d[Card]["money"] - d1
d[Card].update(money=d3)
print "轉賬成功,你的餘額為:%d" % (d3)
break
else:
print "餘額不足!!!"
break
else:
Times += 1
if Times == 3:
print "卡已凍結!!!"
exit()
print "密碼輸入有誤!!!"
elif choice == "4":
print "你的餘額為:¥%d" % (d[Card]["money"])
elif choice == "5":
c = input("請輸入原密碼:")
if c == d[Card]["passwd"]:
Times = 0
while 1:
c1 = input("請輸入新密碼:")
c2 = input("請再次輸入:")
if c1 == c2:
print "密碼修改成功!!!"
d[Card].update(passwd=c2)
break
else:
print "密碼輸入不一致,請重新輸入!!!"
else:
print "密碼輸入有誤!!!"
Times += 1
if Times == 3:
print "卡已凍結!!!"
exit()
continue
elif choice == "6":
print "請拔出銀行卡!!!"
exit()
else:
print "輸入有誤,請重新輸入!!!"
else:
print "卡號或密碼輸入有誤!!!"
Times += 1
if Times == 3:
print "卡已凍結!!!"
exit()
continue
集合 1.集合操作
#集合是不重複的資料型別:
s = {1,2,3,4,1,2}
#字典中的key值不能重複:
d = {
'a':1,
'b':2,
}
print s
去重: 1.轉化成集合set
li = [1,2,3,4,1,2]
print set(li) ##print list(set(li))
2.轉換成字典,拿出所有的key,dict()不能直接將列表轉化為字典
print {}.fromkeys(li).keys()
定義集合
定義一個空集合:
s = set()
print type(s)
字典轉化為集合
d = dict(a=1,b=2,c=3)
print set(d)
集合特性
增加: 集合是無序的資料型別,在增加的時候會自動按照大小排序
s = {32,21,3,45,41}
s.add(13)
print s
集合不支援索引,切片,重複,連線
集合支援成員操作符:
print 1 in s
集合是可迭代的,因此支援for迴圈遍歷元素:
for i in s:
print i,
集合的增刪改查
增加
s = {1,2,3}
s.add(4)
s.update({3,4,5,6})
s.update('hello')
s.update([1,2])
特殊計算(交集並集)
s1 = {1,2,3}
s2 = {1,3,4}
print s1.intersection(s2)
print s1.intersection_update(s2) ##更新s1為交集,返回值為none
print s1,s2 ##此時s1為交集
print s1 & s2 ##交集
print s1 | s2 ##並集
print s1 - s2 ##差集
print s1 ^ s2 ##對等差分,把不同的取出來。
print s1.issubset(s2) ##是不是子集
print s2.issuperset(s1) ##是不是真子集
print s1.isdisjoint(s2) ##不是子集為真,是子集為假
刪除
print s1.pop() ##隨機彈出
s1.remove(5)
print s1 ##沒有會報錯
s1.discard('a')
print s1 ##沒有也不會報錯
總結:
數值型別:int,long,float,complex,bool str,list,tuple,dict,set 可變資料型別list,dict,set 不可變資料型別: #直接改變資料本身,沒有返回值 可迭代的資料型別:str,list,tuple,dict,set 不可迭代的資料型別:數值型別 #是否可以for迴圈遍歷元素 有序的資料型別:str,list,tuple, 無序的資料型別:dict,set #是否支援索引,切片,重複,連線等特性
函式
python中如果函式無返回值,預設返回none
def 函式名(形參)
函式體
return 返回值
函式名(實參)
print 函式名
#定義了一個函式
def fun(name,age,sex) #形式引數(形參)
print "hello %s"%(name)
#呼叫函式
fun("python",22,0) #實參
在python中提供一個可變形參:
def fun(*args):
print args
fun("python",12,0)
#必選引數
#預設引數
#可變引數》》》》》*args args = 元組型別
def fun(name='python'):
print name
fun()
##這裡**kwargs表示傳的是字典
def fun(name,age,**kwargs):
print name,age,kwargs
fun('fentiao',22,city='chongqing',country='China')
用函式的方法表示演算法
from __future__ import division
a = input("num1:")
action = raw_input("運算子:")
b = input("num2:")
def add(a, b):
return a + b
def minus(a, b):
return a - b
def times(a, b):
return a * b
def div(a, b):
if b == 0:
raise IOError
else:
return a / b
d = {
'+':add,
'-':minus,
'*':times,
'/':div,
}
if action in d:
print d[action](a,b)
else:
print "請輸入正確的運算子!"
函式的形式引數的預設值不要是可變引數
def add_end(L=[]): #預設引數
L.append('END')
return L
print add_end([1,2,3])
print add_end()
print add_end()
引數組合時候順序:必選引數>預設引數>可變引數>關鍵字引數
def fun(a,b=0,*args,**kwargs):
print a,b,args,kwargs
fun(1,2,3,4,5,6,x=1,y=2,z=3)
使用者管理系統(用函式方法)
users = {
'root':{
'name':'root',
'passwd':'westos',
'age':18,
'gender':"",
'email':['[email protected]','[email protected]']
},
'student':{
'name':'student',
'passwd':'redhat',
'age':22,
'gender':"",
'email':['[email protected]','[email protected]']
},
}
print """
使用者管理系統
1. 註冊
2. 登陸
3. 登出
4. 顯示
5. 退出
"""
def Usercreate():
username = raw_input("請輸入使用者名稱:")
if username in users:
print "該使用者名稱已被註冊!"
else:
passwd = raw_input("請輸入密碼:")
while True:
gender = raw_input("0-女性,1-男性:")
if gender:
break
else:
print "該項為必填項!"
while True:
age = raw_input("請輸入年齡:")
if age:
break
else:
print "該項為必填項!"
email = raw_input("請輸入郵箱:")
if not email:
email = None
users[username] = {
'name': username,
'passwd': passwd,
'gender': gender,
'age': age,
'email': email,
}
print "%s使用者註冊成功!" % (username)
def Userlogin():
login_user = raw_input("登陸使用者名稱:")
login_passwd = raw_input("請輸入密碼:")
if login_user in users:
if login_passwd in users[login_user]["passwd"]:
print "登陸成功!"
else:
print "密碼錯誤!"
else:
print "無此使用者名稱!"
def userdel():
del_username = raw_input("請輸入要登出的使用者:")
users.pop(del_username)
def showuser():
print users.keys()
def main():
while True:
choice = raw_input("請輸入你的選擇:")
if choice == "1":
Usercreate()
elif choice == "2":
Userlogin()
elif choice == "3":
userdel()
elif choice == "4":
showuser()
elif choice == "5":
exit(0)
else:
print "請輸入正確的選項!"
else:
print "登陸次數超過3次,請稍後再試!!"
if __name__=="__main__"
main()
全域性變數和區域性變數
a = 10 ##全域性變數
def fun()
a = 100 ##函式內區域性變數
fun()
print a ##輸出為10
python判斷微信裡面的男女比例
from __future__ import division
"""
Name:python與微信.py
Author:song
Date:3/21/18
connect:[email protected]
esac:
"""
import itchat
itchat.auto_login(hotReload=True)
# itchat.send('hello song',toUserName='filehelper')
# itchat.send_file('/etc/passwd',toUserName='filehelper')
info = itchat.get_friends()
yourinfo = info[0]
friendsinfo = info[1:]
male = female = other = 0
for friend in friendsinfo:
sex = friend[u'Sex']
if sex == 1:
male += 1
elif sex == 1:
male += 1
elif sex == 2:
female += 1
else:
other += 1
all = male + female + other
print "男: %.2f%%" % ((male / all) * 100)
print "女: %.2f%%" % ((female / all) * 100)
print "其他: %.2f" % ((other / all) * 100)
判斷質數
def isPrime(n):
for i in range(2, n):
if n % i == 0:
return False
else:
return True
n = input("N:") + 1
print [i for i in range(2, n) if isPrime(i)]
輸出a1,a2,a3,b1,b2,b3,c1,c2,c3:
print [i+j for i in 'abc' for j in '123']
找出目錄下的.log結尾的檔案
import os
print [i for i in os.listdir('/var/log') if i.endswith('.log')]
找出質數對
def isPrime(n):
for i in range(2, n):
if n % i == 0:
return False
else:
return True
n = input("N:") + 1
primes = [i for i in range(2, n) if isPrime(i)]
pair_primes = []
for i in primes:
for j in primes:
if i+j == n - 1 and i <= j:
pair_primes.append((i,j))
print primes
print pair_primes
print len(pair_primes)
或者
def isPrime(n):
for i in range(2, n):
if n % i == 0:
return False
else:
return True
n = input("N:") + 1
primes = [i for i in range(2, n) if isPrime(i)]
for i in primes:
if n -1 - i in primes and (i <= n -1 - i):
pair_primes.append((i,n - 1 -i))
print pair_primes
print len(pair_primes)