python学习5

原创不让过???

一、函数

把可以重复使用的代码标记起来,当需要使用时把标记进行调用。

不多说

1.1 python中的函数

  • 内置函数

  • 标准库函数

  • 第三方库函数

  • 用户自定义函数

1.2 python中函数的定义与调用

1.2.1 函数的定义

语法:

def 函数名():
	函数体...

def 函数名(形参1,形参2,...):
	函数体...
	
def 函数名(形参1,形参2,...):
	函数体...
	return

1.2.2 函数的调用

语法

函数名()
函数名( 参数1)

return 后马上结束

形参实参

  • 形参:函数内的参数

  • 实参:传进函数的参数

命名参数
在函数调用时,实际参数根据形式参数命名进行传递
例:

def _sum(x,y)
_sum(y=200,x=100)

在这里插入图片描述

默认参数
函数定义时,形参可以设置默认值,这样在调用时就是可选。
注意默认值都是形式参数列表的最后


练习:

输入两个数进行比较,打印较大的数的值

# 函数实现输入两数,打印大数
def compare(x,y):
    print("比较大的数是",end=" ")
    if x>y:
        print('x='+str(x))
    elif y>x:
        print('y=:'+str(y))
    else:
        print('x=y')
while True:
    x=int(input("x: "))
    y=int(input("y: "))
    compare(x,y)

函数计算x的阶乘

#阶乘
def factorial(x):
    i=1
    mult=1
    while i<=x:
        mult*=i
        i+=1
    return mult

while True:
    x=int(input("x:"))
    print(factorial(x))

还可以使用递归的思想,小心死循环!

def mult(i):
	if i == 0:
		sum = 1
	else:
		sum = i*mult(i-1)
	return sum

mult(5)

通过递归的方式实现输入一个字符串,把字符串倒序输出。

def re(str,l)
	if l == 0:
		return
	print(str[l-1],end='')
	re(str,l-1)

1.2.3变量

  • 全局变量
    定义在函数外、循环外的,作用范围:定义开始到文件结束

    需要定义全局变量的关键字:global

  • 局部变量
    定义在函数中,与全局变量同名是,用局部变量

  • 作用域
    全局变量:字面意思
    局部变量:只在定义的区域内使用

二、作业

  1. 输入一个整数,判断这个整数有多少位,再逆序输出
def countbit(x,i):
    while x/10>=1 :
        x=x/10
        i+=1
    return i

while True:
    x=int(input("X: "))
    i=1
    print(countbit(x,i))
    re(x变体,i)
    # re函数在上面,将x的每一位通过除或模得出来就变成了字符串x变体
  1. 输入一个数,得到这个数的二进制的4~7位
    注意
    数:0 1 0 1 0 1 0 1 = 85
    位:7 6 5 4 3 2 1 0
def binaral(x):
    b=[]
    # x/2=1时及之前能除尽都商1余0,除不尽余1
    while x//2>=1:
        if x%2!=0:
            x=x//2
            b.append(1)
        else:
            x = x // 2
            b.append(0)
    # 除不尽时余1,该情况下只有1
    b.append(1)
    # 不足8位的补齐8位
    while len(b)<8:
        b.append(0)
    return b
x=int(input("x: "))
c=[]
c=binaral(x)
# 只显示前4(7~4位)
print(c[:3:-1])

还可以使用位运算的左移右移操作,直接将0~3位移走
py自带的二进制转换方法
在这里插入图片描述
3. 输入十个数存在列表中,按从小到大的顺序排序
思路:使用冒泡法排序,可以不限制列表大小,以键入特殊键结束

def sortoflist(list1):
    n = len(list1)
    for i in range(n):
        for j in range(0, n - i - 1):
            if list1[j] > list1[j + 1]:
                list1[j], list1[j + 1] = list1[j + 1], list1[j]
                # 交换的简易写法:二元赋值,传统写法如下
                # z = list1[j]
                # list1[j] = list1[j + 1]
                # list1[j + 1] = z
list1=[]
for i in range(10):
    list1.append(int(input()))
    i += 1
print(list1)
sortoflist(list1)
print(list1)
  1. 在有序的列表中添加一个数据,保证有序
    思路:相当于插入法排序,要注意插入后不要越界
l = [0, 5, 10, 15, 20, 25, 30, 35, 40]
def linsert(l,x):
	# 先把数加入进来,直接就变成了插入法排序
    l.append(x)
    for i in range(len(l) - 1):
        if l[i] >= x:
            for j in range(i, len(l)):
                z=0
                z=l[j]
                l[j]=l[-1]
                l[-1]=z
            break
    print(l)
x=int(input("x:"))
linsert(l,x)
  1. 有两个⼆维列表x,y实现对应位置的数据相加,得到⼀个新列表
x=[[1,2,3],[4,5,6],[7,8,9]]
y=[[10,2,6],[7,8,9],[16,9,4]]
def plus(x,y):
    z=[[0,0,0],[0,0,0],[0,0,0]]
    for i in range(len(x)):
        for j in range(len(y)):
            z[i][j]=x[i][j]+y[i][j]
    return z

plus(x,y)
print(plus(x,y))

实现的不是很好,呆板

  1. 有n个数的列表[1,2,3,…,n-1,n],输⼊⼀个m,让列表中的数按顺序依次移动m个位置,如:
    [1,2,3,4,5]—m = 3=====>[3,4,5,1,2]
    思路:见注释
def move(l,x):
    # 先添加跟移动位数x相同的空格
    i=x
    oldlen=len(l)
    while i>0:
        l.append('')
        i-=1
    # 在统一向后移x格
    for j in range(oldlen):
        l[len(l)-j-1]=l[len(l)-j-x-1]
        j+=1
    # 后x位覆盖前x位
    k=0
    while k<x:
        l[k]=l[oldlen+k]
        k+=1
    # 直接不显示越过原界限的x位
    print(l[0:oldlen])

# 不定义列表的具体元素个数,但C/C++中一定要小心越界
l=[]
times=int(input("列表位数:"))
while times>0:
    l.append(int(input("第"+str(times)+"位")))
    times-=1
x=int(input("移动几位:"))
move(l,x)

三、多文件

关键字:from 文件 import 方法

  1. 只有import,为最简单的引入对应的包。例如:
    import os #引入 os包

  2. from A import B
    这种方式意味着从文件A中引入方法B。相当于:import A, b=A.b,例如:
    from numpy import matrix

  3. import A as B
    这种方式为给引入的包A定义一个别名B,例如
    import numpy as np

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值