python(四)函数,列表生成式

#函数、列表生成式

##回顾与练习:
有序数据类型:字符串(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="",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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值