linux系统中python中的元组 || python中的字典 || python中的函数

一.元组

1. 元组数据类型

>>> li = [1, 2, 3]
>>> t = (1, 2, 3, 'hello', [1, 2, 3], (1, 2, 3)) 
 #元组数据类型
>>> print(type(li), type(t))
<class 'list'> <class 'tuple'>

2.元组数据类型特性

元组数据类型特性:支持:索引,重复, 连接, 成员操作符, for循环,枚举
allow_users = ('user1', 'user2', 'user3')

print(allow_users[0])       #索引
print(allow_users*2)        #重复
print(allow_users + ('user4','user5'))    #连接
print('user1' in allow_users)             #成员操作符

#for循环
for user in allow_users:
    print("allow_users:%s" %(user))

#枚举
for index, item in enumerate(allow_users):
    print(index+1, item)

这里写图片描述

3. 元组应用

1.元组应用:
x = 1
y = 2
x, y = y, x
print(x,y)
2.元组应用:
t = ("python", "c")

print("hello %s, hello %s" %("python", "c"))
print("hello %s, hello %s" %(t[0], t[1]))
print("hello %s, hello %s" %t)

这里写图片描述

4.元组的赋值:解压赋值给多个变量

t = ('小明', 20, 120)
name, age, weight = t
print(name, age, weight)

这里写图片描述

示例:

#求平均成绩:去掉最小值和最大值,求平均成绩。
scores = [100, 89, 90, 89, 67, 109]
# 列表的排序
scores.sort()
# python2中*middle是不能使用的;
min_score(最小值), *middle(中间的数), max_score = scores(最大值)

print(*middle)
print(type(middle))
print("最终成绩为:%s" %(sum(middle)/4))

这里写图片描述

二.字典

1. 创建字典

方法一:
d = {}
print(d, type(d))

# python: hash,
# key-value: 键值对
方法二:
d = {
    'root':[1,2,3,4,5],
    'westos':[23,45,578]
     }

print(d, type(d))
方法三:
d = dict(root='westos', kiosk='redhat')
print(d, type(d))

这里写图片描述

示例:生成100个用户和原始密码

users = []
for i in range(100):
    # users里面的每个元素作为key值, 所有的value值都为’000000‘
    users.append('user%d' %(i+1))

import  pprint
pprint.pprint({}.fromkeys(users, '000000'))

这里写图片描述

2.字典支持的特性

1.在字典里面不支持索引, 切片, 连接, 重复;
key值是唯一的;所以key值是不能重复的;
print(d['a'])             #会报错
print(d + {'e':2})        #会报错

这里写图片描述

2.for循环, 默认循环显示字典的key值;
d = dict(a=1,b=2)
for i in d:
    print(i)
3.遍历字典的key-value值;
for key in d:
    # key, value=d[key]
    print("%s -> %s" %(key, d[key]))
4.成员操作符: 默认查看的是key是否为字典的成员;
print('a' in d)     #a在d字典里吗?
print(0  in d)      #0在d字典里面吗?

这里写图片描述

3. 字典的增加

1.增加单个元素:
d = dict(a=1, b=2)
#    1. 增加一个元素;
#   1). 如果key值存在, 则更新对应的value值;
#   2). 如果key值不存在, 则添加对应的key-value值

# 如果key值不存在, 则增加key-value值;
d['e'] = 10
print(d)

# 如果key值存在, 则覆盖原有的value值;
d['a'] = 100
print(d)

这里写图片描述

2.正加多个key-value值:
   1). 如果key值存在, 则更新对应的value值;
   2). 如果key值不存在, 则添加对应的key-value值
d = dict(a=1, b=2)
d2 = {'c':10, 'a':200}
d.update(d2)
print(d)

这里写图片描述

3.setdefault添加key值;
  1). 如果key值存在, 则不做修改;
  2). 如果key值不存在, 则添加对应的key-value值
d = dict(a=1, b=2)
d.setdefault('f',100)
d.setdefault('a',300)
print(d)

这里写图片描述

4. 字典的查看

d = dict(a=1, b=2)

print(d['a'])         #通过key值查看value值
print(d.get('1'))     #通过key值查看value值

print(d.values())     #查看所有value值
print(d.keys())       #查看所有key值
print(d.items())      #查看所有key-value值

这里写图片描述

1.for循环遍历字典:
# 遍历key-value值的方式
d = dict(a=1, b=2)

# 将字典变成[(), ()]形式依次遍历key,value值
for key,value in d.items():
    print(key, '->', value)

2.成员操作符:
#查看key值是否存在?
print('a' in d)

这里写图片描述

5. 字典删除

(1).通过key值删除:

1.  通过key值删除;
services = {
    "http":80,
    'ftp': 21,
    'ssh':22,
    'mysql':3306
}
del services['http']
print(services)

这里写图片描述

(2).pop删除指定key的key-value对

(2).pop删除指定key的key-value对 

   1). 如果key存在, 删除, 并且返回删除key对应的value值;
   2). 如果key不存在, 直接报错
services = {
    "http":80,
    'ftp': 21,
    'ssh':22,
    'mysql':3306
}
item = services.pop('http')
print("删除http对应的value值:%s" %(item))
print(services)

这里写图片描述

(3).popitem删除最后一个key-value值

(3).popitem删除最后一个key-value值 

services = {
    "http":80,
    'ftp': 21,
    'ssh':22,
    'mysql':3306
}
del_key_value_pair = services.popitem()
print(services)
print("删除的key-value对为:", del_key_value_pair)

这里写图片描述

(4).清空字典内容

(4).清空字典内容 

services = {
    "http":80,
    'ftp': 21,
    'ssh':22,
    'mysql':3306
}
services.clear()
print(services)

这里写图片描述

示例1:

重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
     1. 用户输入一句英文句子;
     2. 打印出每个单词及其重复的次数;
import pprint      #导入模块
s = input("输入英文句子:")
words_list = s.split()     #以空格将英文句子进行分离存进列表
words_count_dict = {}      #建立空字典
for word in  words_list:   #循环列表
    if word in words_count_dict:
        words_count_dict[word] += 1
    else:
        words_count_dict[word] = 1
pprint.pprint(words_count_dict)

这里写图片描述

示例2:

 IP重复统计:
    1). 随机生成200个IP;
    2). IP的范围172.25.254.1172.25.254.200之间
    3). 升序输出输出所有不同的IP及其每个IP重复的次数;
import random
import pprint
# 1. 随机生成200个IP;
n = 200
ip_list = []
for num in range(n):
    # 2).IP的范围172.25.254.1~172.25.254.200之间
    ip = '172.25.254.' + str(random.randint(1,200))
    ip_list.append(ip)
# 3). 所有不同的数字及其每个数字重复的次数
ip_count_dict = {}
for ip in ip_list:
    if ip in ip_count_dict:
        ip_count_dict[ip] += 1
    else:
        ip_count_dict[ip] = 1
pprint.pprint(ip_count_dict)

这里写图片描述

示例3:

字典的运算:
num1 = int(input())
choice = input()
num2 = int(input())

d = {
    '+': num1 + num2,
    '-': num1 - num2,
    '*': num1 * num2,
    '/': num1 / num2,
}
if choice == '+':
    print(num1+num2)
elif choice == '-':
    print( num1 - num2)
elif choice == '*':
    print(num1 * num2)
elif choice == '/':
    print(num1 / num2)
else:
    print('error choice')

这里写图片描述

示例4:

用户登陆系统:
userinfo = {'root':'root'}
while True:
    info = """
                 用户管理系统
    1).注册新用户
    2).用户登陆
    3).注销用户
    4).显示用户信息
    5).退出系统(exit(0))
请输入你的选择:"""
    choice = input(info)
    if choice == '1':
        print("注册新用户".center(50,'*'))
        name = input("注册的用户名:")
        if name in userinfo:
            print("%s用户已注册" %(name))
        else:
            passwd = input("密码:")
            userinfo[name] = passwd
            print("%s用户注册成功!" %(name))
    elif choice == '2':
        print("用户登陆".center(50,'*'))
        for trycount in range(3):
            name = input("用户名:")
            passwd = input("密码:")
            if name in userinfo:
                if userinfo[name] == passwd:
                    print("登陆成功")
                    break
                else:
                    print("用户名或密码错误!")
            else:
                print("%s用户不存在" %(name))
        else:
            print("登陆超过三次机会!")
    elif choice == '3':
        print("注销用户!".center(50,'*'))
        name = input("注销用户名:")
        if name in userinfo:
            # passwd = input("密码:")
            print("%s用户已注销" %(name))
        else:
            print("%s用户名不存在" %(name))
    elif choice == '4':
        print("用户信息".center(50,'*'))
        for key in userinfo:
            print("%s %s" %(key,userinfo[key]) )
    elif choice == '5':
        print("bye!")
        exit(0)
    else:
        print("error:错误的选择!")
        break

这里写图片描述

6.列表去重

l = ['a', 'b', 'a']


print(list(set(l)))

print({}.fromkeys(l).keys())

这里写图片描述

二.函数

1.函数理解

1.定义函数: 不执行函数内容
def 函数名(形参):
    函数体
    return 返回值
函数名(实参)
print(函数名(实参))
##定义函数:
def  hello():
    print('hello world')
# 调用函数: 真正执行函数内容
hello()

#定义函数时, 参数称为形参, 这个参数的名字可以任意修改;

这里写图片描述

2.调用函数:
import pprint
def  hello():
    l = []
    for user in ['harry', 'jerry', 'tom']:
        l.append(user)
    return l
 hello()    #调用函数
pprint.pprint(hello())

这里写图片描述

2. 带有返回值的函数

1.return 关键字:
def hello():
    # return 关键字, 函数的返回值, 通过print打印;
    # 一般函数都有返回值, 如果在python中没有返回值时, 默认返回None;
    return "world"
print(hello())

这里写图片描述

2.默认参数
# 默认参数; 如果只传递一个参数, 那么b默认为2;
# 如果传递两个参数, a=2,b=4, 覆盖原有的默认值;
def mypow(a, b=2):
    return a ** b
print(mypow(2,4))
print(mypow(2))

这里写图片描述

3. 可选参数:
#当形参里面是*变量名, 可选参数, 可以传递任意多个参数;

def Mysum(*args):
    # print(args, type(args))
    return sum(args)

print(Mysum(10,45))
print(Mysum(11,42,43))
print(Mysum(12,456,376,23,12,34))

这里写图片描述

4.关键字参数:
# 关键字参数,**变量名可以接收任意多个key-value键值对;
# 接收的变量是字典数据类型;
def get_info(name, passwd, **kwargs):
    print(name,passwd, end=' ')
    print(kwargs, type(kwargs))
get_info('xiaoming', 'hello')
get_info('xiaoming', '123', city="xi'an", age=18, weight=100)

这里写图片描述

示例:

题目需求:
    对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10
    f(207) = 2**2 + 0**2 + 7**2 = 53

    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n

输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:
    输出对应的答案;

范例:
    输入: 51 5000 10000
    输出: 3

#输入:k  a  b的值
k = int(input("k:"))
a = int(input("a:"))
b = int(input("b:"))


def isok(num):
    if k*f(num) == num:
        return True
    else:
        return False

def f(n):   #计算完全平方和
    res = 0
    for i in str(n):        #强制转化成字符串,依次便利
        res += int(i)**2
    return res
count = 0                      #符合条件的n的个数
for num in range(a, b + 1):    #在a到b之间循环
    # 满足k*f(n) == n
    if isok(num):
        count += 1       #满足条件数量加一
print(count)

这里写图片描述

3. return关键字

return关键字:
def hello():
    # 函数一旦遇到return, 后面的代码不再执行
    return "ok"
    print("hello")
print(hello())

这里写图片描述

4.函数的作用域

作用域:
#   局部作用域:
#   全局作用域:
# 局部作用域, 在函数运行时生效, 函数运行结束则释放
# 全局作用域:作用于整个脚本
num = 10
print("out fun: id=", id(num))

def fun():
    # 局部作用域, 在函数运行时生效, 函数运行结束则释放;
    num = 2
    print("in fun: id=", id(num))
    print("in fun: num = %s" %(num))

fun()
print("out fun: num =%s" %(num))

这里写图片描述

# 声明:
count = 10
print("全局变量:",id(count))

def hello():
    # 函数里面的变量, 只在函数内部生效;
    # global声明局部变量为全局变量;
    global  count
    count = 20
    print("局部变量:", id(count))

hello()
print(count)

这里写图片描述

示例:

1.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+12.然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1
def collatz(number):
    if number%2 == 0:
        print(number//2)
        return (number//2)
    elif number%2 != 0:
        print(3*number+1)
        return (3*number+1)

n = int(input("输入一个数字:"))
while True:
    n = collatz(n)
    if n == 1:
        break

执行结果:
这里写图片描述

5.函数返回多个值

def hello():   #定义函数
    return "hello", "world"     #返回值

result = hello()     #调用函数赋值给一个变量
print(result, type(result))

a, b = ('hello', 'world')
print(a,b)

res1, res2 = hello()   #调用函数赋值给两个变量
print(res1, res2)

这里写图片描述

示例:

1.定义函数:函数名get_max_min_avg()
2.函数可以传递任意多个数字, 并且保证是整形或者浮点型;
3.如果满足条件, 返回最大值, 最小值,和平均值;
4.如果不满足条件, 返回None;
5.调用函数, 打印函数结果;
def is_int_float(t):  #定义函数,判断是否是整形或浮点型
    for item in t:
        #如果不是整形或者浮点型返回False
        if not isinstance(item,(int,float)):  
            return False
    #否则返回True
    else:
        return True

# 传递任意多个数字, 可变参数:*args , args是元组数据类型。
def get_max_min_avg(*args):  #定义函数
   #调用函数如果是整形或者浮点型
   if is_int_float(args):
       #如果满足要求,返回最大值, 最小值,和平均值    
       return max(args),min(args),sum(args)/len(args)
print(get_max_min_avg(3,5,2,8,6))

6.函数形参的顺序

#形参:
#      args: 是tuple(元组类型);
#      kwargs: 是dic(字典类型);
def fun(a, b=2, *args, **kwargs):
    pass
# 常用的参数顺序: 必选参数 > 默认参数 > 可变参数 > 关键字参数
# 特例: 可变参数 > 默认参数
def hello(*args, a=1, b=2):
    print(args)
    print(a,b)

hello(1,2,3,4,5,6,7, a=100, b=200)

7.形参的默认值必须为不可变类型

# 可变数据类型: list, set, dict
# 默认参数的默认值不要是可变数据类型;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值