1. 程式人生 > >python學習day04 演算法集合函式

python學習day04 演算法集合函式

演算法部分  

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)