Python语言快速入门下1

目录

一、函数

【函数定义与调用】

 【形参与实参】

 【return语句】

【变量作用域】

【可变长度参数】

二、lambda表达式

三、案例

【例题1】

【例题2】

【例题3】

【例题4】

【例题5】


一、函数

【函数定义与调用】

【例子】一个穷小子想娶富家之女,她父亲说,你第一天给我2元钱,第二天给我4元钱,第n天给我2^n,总共给30天。穷小子一个月存 10000 元,问多少个月可以抱得美人归?

 【形参与实参】

  • 定义函数时的参数称为形式参数 (简称形参) ,调用函数时的参数称为实在参数 (简称实参)
  • 一般类型的数据作为参数相当于传值调用,可变类型的序列作为参数相当于传地址调用
  • 定义函数时不需要指定参数的类型和返回值的类型
  • 普通参数、默认值参数、关键参数、可变长度参数

 【return语句】

  • return 语句用于函数体,可以结束函数的运行并返回 return 后的表达式
  • 没有return语句的函数,或者 return 语句后没有表达式的函数,其返回值为None
  • 任何函数都可以作为表达式的一份子,也可以作为独立语句调用

【变量作用域】

  • 变量起作用的代码范围称为变量的作用域,不同作用域内同名变量之间互不影响
  • 函数内部定义的变量一般为局部变量,而不属于任何函数的变量一般为全局变量
  • 局部变量的引用速度比全局变量快,应优先考虑使用
  • 尽量避免使用全局变量
  • 一个变量已经在函数外定义,如果在函数内需要使用这个变量,并将改变变量的结果反映到函数之外,可以在函数内用 global 声明这个变量
  • 在函数内部直接使用 global 关键字可以将一个变量声明为全局变量

【可变长度参数】

def demo1(*p):   # *参数-解包操作符
    print(p)
demo1(5,2,0)

def demo2(**p):    #**关键字参数-解包操作符
    for item in p.items():
        print(item)
demo2(a=5,b=2,c=0)


(5, 2, 0)
('a', 5)
('b', 2)
('c', 0)
>>> 

二、lambda表达式

  • lambda 定义了一个匿名函数,并不会带来程序运行效率的提高,只会使代码更简洁
  • 如果可以使用 for..in...if 来完成的,坚决不用 lambda

a_list=[1,3,1,4]
print(a_list)

b=list(map((lambda x:x*100),a_list))
print(b)

a_dict={'i':99,'love':98,'you':97}
b_list=sorted(a_dict)
print(b_list)

c_list=sorted(a_dict.values())
print(c_list)

d_list=sorted(a_dict.items(),key=lambda x:x[1])
print(d_list)




[1, 3, 1, 4]
[100, 300, 100, 400]
['i', 'love', 'you']
[97, 98, 99]
[('you', 97), ('love', 98), ('i', 99)]
>>> 

三、案例

【例题1】

【例题】编写函数,接收字符串参数,返回一个元组,其中第一个元素为大写字母个数,第二个元素为小写字母个数。

def tupleCout(s):
    result=[0,0]
    for ch in s:
        if ch.islower():
            result[1]+=1
        elif ch.isupper():
            result[0]+=1
    return tuple(result)

s="After All, Tomorrow is Another Day!"
print(tupleCout(s))



(5, 23)
>>> 

【例题2】

【例题】编写函数,计算字符串匹配的准确率。以打字练习程序为例,假设 origin 为原始内容,userlnput 为用户输入的内容,测试用户输入的准确率。

def Rate(origin,userInput):
    right=sum(1 for o,u in zip(origin,userInput) if o==u)
    return round(right/len(origin),2)  #round()四舍五入
a="Life is not a matter of a day."
print("请输入: Life is not a matter of a day.")

b=input()
print(int(Rate(a,b)*100),'%')


请输入: Life is not a matter of a day.
Life is not a matt of a day
63 %
>>> 

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

>>> list(zip('abcdefg', range(3), range(4)))
       [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]

zip 对象产生长度为 n 的元组,其中 n 是作为位置参数传递给 zip() 的可迭代对象的数量。每个元组中的第 i 个元素来自 zip() 的第 i 个 iterable 参数。这一直持续到最短的参数耗尽为止。

【例题3】

【例题】编写函数模拟猜数游戏。系统随机产生一个数,玩家最多可以猜7次。系统根据玩家的猜测进行提示,玩家则可以根据系统的提示对下一次的猜测进行适当调整。

from random import randint
def guess(maxValue=100,maxTimes=7):
    value=randint(1,maxValue)   #随机生成一个整数
    for i in range(maxTimes):
        prompt='Start to GUESS:' if i==0 else 'Guess again:'
        #使用异常处理结构,防止输入不是数字的情况
        try:    x=int(input(prompt))
        except: print('Must input an integer between 1 and ',maxValue)
        else:   #猜对了
            if x==value:    print('Congratulation!');   break
            elif x>value:   print('Too big')
            else:           print('Too little')
    else:   #次数用完还没猜对,游戏结束,提示正确答案
        print('Game over.FAIL.')
        print('The value is ',value)
print(guess())

Start to GUESS:50
Too big
Guess again:25
Too little
Guess again:30
Too little
Guess again:40
Too little
Guess again:45
Congratulation!
None
>>> 

【例题4】

【例题】编写函数模拟报数游戏。有 n 个人围成一圈,顺序编号,从第一个人开始从 1 到 k (假设 k=3 )报数,报到 k 的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。

from itertools import cycle

def numberoff(lst,k):
    t_lst=lst[:]    #切片,以免影响原来的数据
    while len(t_lst)>1:  #游戏一直进行到只剩下最后一个人
        #print(t_lst)
        c=cycle(t_lst)   #创建cycle对象,cycle()循环遍历
        for i in range(k):  #从1到k报数
            t=next(c)
        index=t_lst.index(t)    #一个人出局,圈子缩小
        t_lst=t_lst[index+1:]+t_lst[:index]
    return t_lst[0]

lst=list(range(1,8))
print(numberoff(lst,3))

4

【例题5】

【例题】利用蒙特·卡罗方法计算圆周率近似值。

假设圆的半径是1,那么圆的面积就是pi,正方形的的面积是4,随机产生正方形中的点,那么这个点落在园的概率是圆面积/正方形面积,g=pi/4,这个点落在圆内的判断:x*x+y*y<=1

from random import random
def estimatePI(times):
    hits=0
    for i in range(times):
        x=random()*2-1  #random()生成介于0和1之间的小数
        y=random()*2-1  #该数字乘以2再减1,则介于-1和1之间
        if x*x+y*y<=1:  #落在圆内或园周上
            hits+=1
    return 4.0*hits/times
print(estimatePI(10000))
print(estimatePI(100000))
print(estimatePI(1000000))
print(estimatePI(10000000))
print(estimatePI(100000000))

3.144
3.12892
3.14398
3.1412452
3.14146116
>>> 

以上,Python语言快速入门下1

祝好

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕飞雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值