#函数、列表生成式
##回顾与练习:
有序数据类型:字符串(str) 元组(tuple) 列表(list)
无序数据类型:字典(dict) 集合(set)
可变数据类型:列表(list),字典(dict),集合(set)
不可变数据类型:数值类型(value) ,字符串,元组
练习:
1.打印出元组t=(1,2.0,4j,True,"hello",[3,4,5],(4,5,6),{"key":"value"},{1,2,3,1,2,3})
中索引2-7之间bool类型的索引值。
方式一:
for i in range(2,8):
if type(t[i])==bool:
print i
方式二:
for i in t:
if type(i)==bool:
print t.index(i,2,7)
练习2:
生成100个学号,学号总共由7位组成前两位'14'开头,代表学校编号;请生成(1)1400100~1400200之间的学号;(2)请生成1400001~1400100之间的学号。
num = []
for i in range(100,201):
n = "1400%d" %(i)
num.append(n)
print num
num2 = []
for i in range(1,100)
m ="1400%.3d" %(i)
num2.append(m)
print num2
##函数
###定义函数
def 函数名称(形参)
函数需要执行的代码块
return 函数返回值(如果没有return,默认返回None)
##调用函数
函数名称(实参)
实例一:
基本运算的实现 :
def _add(num1,num2): ##默认参数
return num1+num2
def _minu(num1,num2): ##必选参数
return num1-num2
def _mutl(num1,num2):
return num1*num2
def _divide(num1,num2):
return num1/num2
def main():
num1,chioce,num2 = raw_input("请输入你的选择(如:1 + 1 ):").split()
num1 =int(num1)
num2 = int(num2)
if chioce == "+":
print _add(num1,num2)
elif chioce =="-":
print _minu(num1,num2)
elif chioce =="*":
print _mutl(num1,num2)
elif chioce == "/":
print _divide(num1,num2)
else:
print "ERROR"
main()
##传递参数
必选参数:def myadd(x,y):
默认参数:def myadd(x=10,y=10):
可变参数:def myadd(*num):
关键字参数:def info(**other):
注意:在定义函数时,一般都是四种参数的混合使用,很少单纯使用某一类参数,参数传递的顺序:必选 默认 可变 关键字。
###可变参数
例如如果实例一中,如果后面的参数不止两个,可以用如下方法。
def add(*num): #参数个数可变
sum = 0
for i in num:
sum +=i
return sum
print add(1,2,3)
###关键字参数的传递
def info(name,passwd,gender,**other):
#other 是字典数据类型
for key,value in other.items():
print "%s:%s" %(key,value)
info("westos","redhat","man", \
email="westos@163.com",age=18,city="xi'an")
函数中变量的作用域
全局变量:除非变量名被del,否则在整个程序中一直生效
局部变量:只在函数的语句范围内生效
要使局部变量变为全局变量,则需要在局部变量之前加上 gobal
实例二:
ATM管理系统(雏形)
#!/usr/bin/env python # coding:utf-8 userinfo = { "001":{ "cardid":"001", "password":"123", "status":0, "money":10000 } } def existCard(card_id): return card_id in userinfo def passCard(card_id, card_passwd): return card_passwd == userinfo[card_id]["password"] def createCard(): import random while True: cardid = "%.3d" %(random.randint(1,100)) if not existCard(cardid): userinfo[cardid]={ "cardid":"cardid", "password":"000000", "status":1, "money":0 } print "%s 开户成功,初始密码为 000000" %(cardid) break def getMoney(): cardid = raw_input("请输入卡号:") password =raw_input("请输入密码:") if existCard(cardid) and passCard(cardid,password): have_money = userinfo[cardid]['money'] get_money =input("取钱金额:") if get_money > have_money: print "余额不足" else: have_money -= get_money print "取款成功" else: print "卡号或密码错误" def saveMoney(): cardid = raw_input("请输入卡号:") password = raw_input("请输入密码:") if existCard(cardid) and passCard(cardid,password): save_Money = input("请输入存款金额:") if save_Money > 0: userinfo[cardid]['money'] += save_Money print "存钱成功" else: print "请输入正确的金额" else: print "请输入正确的卡号和密码" def transferMoney(): cardid = raw_input("请输入卡号:") password= raw_input("请输入密码:") if existCard(cardid) and passCard(cardid,password): transfer_id = raw_input("转账卡号:") have_money = userinfo[cardid]["money"] if existCard(transfer_id): trans_money = input("转账金额:") if have_money > trans_money: userinfo[cardid]["money"] -= trans_money userinfo[transfer_id]["money"] += trans_money print "转账成功" else: print "转账余额不足" else: print "转账账户不存在" else: print "请输入正确的卡号和密码" def inquire(): cardid = raw_input("请输入你要查询的账户:") password= raw_input("请输入密码:") if existCard(cardid) and passCard(cardid,password): print userinfo[cardid]["money"] else: print "账户不存在" def frozen(): cardid = raw_input("请输入卡号:") password= raw_input("请输入密码:") if existCard(cardid) and passCard(cardid,password): userinfo[cardid]["status"]=0 print "账户已经被锁定" def mod(): cardid = raw_input("请输入卡号:") password= raw_input("请输入密码:") if existCard(cardid) and passCard(cardid,password): newpassword=raw_input("请输入新的密码:") newpassword1=raw_input("请再次输入:") if newpassword==newpassword1: userinfo[cardid]["password"]=newpassword print "密码修改成功" else: print "密码不一致,请重新输入" def main(): info = """ 中国工商银行 1.开户 2.取款 3.存款 4.转账 5.余额查询 6.冻结账户 7.修改密码 8.退出系统 """ while True: choice = raw_input("请输入你的选择:").strip() if choice == "1": createCard() elif choice =="2": getMoney() elif choice == "3": saveMoney() elif choice == "4": transferMoney() elif choice =="5": inquire() elif choice =="6": frozen() elif choice =='7': mod() elif choice =="8": exit() else: print "请输入有效的操作" main()
## 迭代
可以通过for循环来遍历列表list或者元组tuple的这种遍历称之为迭代,
字典dict也可以迭代,默认情况下迭代的是key,如果需要迭代value,则:
for i,j in d.iteritems():
print i ,j
判断某个对象是否为可迭代对象
In [1]: from collections import Iterable
In [2]: isinstance("abc", Iterable)
Out[2]: True
In [3]: isinstance(1, Iterable)
Out[3]: False
In [4]: isinstance(list(), Iterable)
Out[4]: True
In [5]: isinstance(dict(), Iterable)
Out[5]: True
In [6]: isinstance(set(), Iterable)
Out[6]: True
列表生成式:
列表生成式可以快速生成list
采用for循环产生列表程序繁琐:
生成abc和123的全排列:
列出/var/log目录下以.py结尾的所有文件
注意要使的python与linux系统交互,需要导入os模块
import os