#####python学习(五)###

####is和==的区别###

id():在内存中存储的位置
type:变量的类型
value:变量的值
==: ##type value
is: ##type value id

>>> a = '1'   ##字符串类型
>>> b = 1   ##int型
>>> a == b
False
>>> a = '1'   
>>> b = a    ####b和a都是字符串类型
>>> a == b
True
>>> a = [1,2,3]   ##定义一个liebiao
>>> b = a
>>> b
[1, 2, 3]
>>> id(a)  ##查看列表id
139651206750920
>>> id(b)
139651206750920
>>> c = a.copy()    ##copy列表a,id改变
>>> c
[1, 2, 3]
>>> id(c)
139651206750728
>>> c == a ##type value 一样
True
>>> c == b
True
>>> a == b
True
>>> c is a    ##type value一样 id不一样
False
>>> c is b
False
>>> a is b
True
>>> 

###深拷贝和浅拷贝###
当一个变量==xx的时候,约定为:指向地址的过程
浅拷贝:copy.copy()
深拷贝:copy.deepcopy()
倒入copy安装包:import copy

>>> import copy
>>> a = [11,22] 
>>> b = [33,44]
>>> c = [a,b]   ##列表c嵌套a,b列表
>>> c
[[11, 22], [33, 44]]
>>> d = copy.copy(c)  ##浅拷贝
>>> d
[[11, 22], [33, 44]]
>>> e = copy.deepcopy(c)  ##深拷贝
>>> e
[[11, 22], [33, 44]]
>>> id(c)   
140285416702472
>>> id(d)
140285415846984
>>> id(e)
140285536672840
>>> id(a)
140285416702664
>>> id(c[0])
140285416702664
>>> id(d[0])
140285416702664
>>> id(e[0])
140285536672968  ##深拷贝id改变
>>> id(b)
140285416702600
>>> id(c[1])
140285416702600
>>> id(e[1])##深拷贝id改变
140285536672904

注意:
如果copy.copy)拷贝的是元组,那么它不会进行浅拷贝,仅仅是指向
因为元组是不可变数据类型,那么意味着数据一定不能修改,
因此copy.copy()的时候它会自动判断是指向

如果,用copy.copy() copy.deepcopy()对一个全部是不可变类型
的数据进行数据拷贝的时候,那么它们的结果相同,都是引用

如果拷贝的是一个拥有可变类型的数据,那么deepcopy依然是深拷贝,
copy是浅拷贝

>>> a = [11,22]
>>> b = [33,44]
>>> c = (a,b)
>>> c
([11, 22], [33, 44])
>>> d = copy.copy(c)
>>> e = copy.deepcopy(c)
>>> id(c)
140285537550280
>>> id(d)
140285537550280
>>> id(e)
140285415670216
>>> id(a)
140285536673032
>>> id(c[0])
140285536673032
>>> id(d[0])
140285536673032
>>> id(e[0])
140285416702664
>>> a.append(55)
>>> a
[11, 22, 55]
>>> c
([11, 22, 55], [33, 44])
>>> d
([11, 22, 55], [33, 44])
>>> e
([11, 22], [33, 44])
>>> 

模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的, 如果范围在[0,0.08)之间,代表一等奖, 如果范围在[0.08,0.3)之间,代表2等奖, 如果范围在[0.3, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.

###列表生成式###
python内置的一种强大的生成列表的表达式,返回结果必须是列表;
格式:[变量表达式for 变量in 表达式 if 变量的判断条件(结果为True或False)]

需求1:接收变量 k a b

方法一普通方法:
#定义一个字符串变量
s = '40 500 3000'
print(s,type(s))
#将变量分割
a = s.split()
print(a)
#创建一个列表
list = []
#for循环将每个转成整型的数字追加到空列表
for item in s.split():
   list.append(int(item))  #append()追加
print(list)
k,a,b = list
print(k,a,b)
运行结果:
40 500 3000 <class 'str'>  #定义的变量
['40', '500', '3000']   #将变量S分割后的变量
[40, 500, 3000]  #生成的列表
40 500 3000  ##接受的变量
方法二:
列表生成式生成
s = '40 500 3000'
list = [int(item)for item in s.split()]
print(list)
使用列表给多个变量赋值
k,a,b = list
print(k,a,b)
运行结果:
[40, 500, 3000]
40 500 3000

需求2:生成一个列表,列表的元素分别为[11 22 9**9 ]

方法一:
#倒入random
import random
list = []  #生产空列表
#for循环变量将生成的数字追加到空列表
for i in range(1,10):
    list.append(i**i)  
print(list)
运行结果:
[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
方法二:
列表生成式生成
import random
list = [i**i for i in range(1,10)]
print(list)
运行结果
[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]

需求:找出1~10之间的数

找出1~10之间的所有偶数

方法一
mport random
list = [ ]
for i in range(2,11,2):
    list.append(i)
print(list)
[2, 4, 6, 8, 10]
方法二
list1 = [i for i in range(2,11,2)]
print(list1)
[2, 4, 6, 8, 10]
方法三
print([i for i in range(1,11) if i %2 == 0])
[2, 4, 6, 8, 10]

找出1~10之间的所有奇数
方法一
import random
list = [ ]
for i in range(1,10,2):
    list.append(i)
print(list)
[1, 3, 5, 7, 9]
方法二:
list1 = [i for i in range(1,10,2)]
print(list1)
[1, 3, 5, 7, 9]
[1, 3, 5, 7, 9]

需求:s1 = ‘ABC’ s2='123’输出 A1 A2 A3…C1 C2 C3

s1 = 'ABC'
s2 = '123'
print([i+j for i in s1 for j in s2])
运行结果:
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

需求:找出1~10之间的所有偶数,
并且返回一个列表(包含以这个偶数为半径的园的面积)

import math  ##导入数学计算包
方法一:
list1 = [ ]
for r in range(2,11,2):  ##找出1~10间的偶数
    square1 = math.pi * r **2  计算面积
    list1.append(square1)  将计算的面积追加到列表
print(list1)
方法二:
list = [math.pi *r **r for r in range(2,11,2)]
print(list)
方法三
def squre(r):
    res = math.pi *r **2
    return res
print([squre(i) for i in range(2,11,2)])

list1 = [[1,2,3],[4,5,6],[7,8,9]],将其改变成list = [1,2,3,4,5,6,7,8,9]
内置函数chain,其参数为任意序列,返回值为序列中所有元素

方法一:
list = [[1,2,3],[4,5,6],[7,8,9]]
# list1 = [ ]
# for i in list:
#     for k in i:
#      list1.append(k)
# print(list1)
方法二:
list = [[1,2,3],[4,5,6],[7,8,9]]
list1 = [k for i in list for k in i]
#print(list1)
方法三
from itertools import chain   #内置函数chain
list1= [[1,2,3],[4,5,6],[7,8,9]]
list2 = list(chain(* list1))
print(list2)

找出1~100之间的所有素数 (列表生成式 + 函数)

def isPrime(num): ##定义一个函数,判断数字是否为素数
    for i in range(2,num):#2是最小的素数,从2开始判断
        if num % i == 0: 
            return False
        else:
           return True
list = [i for i in range(2,100) if isPrime(i)]
print(list)

列表的字符串的大写改成小写,不是字符串的去掉
isinstance(变量,数据类型) ##判断变量是不是该数据类型,是的话返回True,不是返回False

list = ['HELLO','RedHat',1,5,False,6]
方法一
# result = [s.lower() for s in list if isinstance(s,str)]
# print(result)
方法二
list1 = [ ]
for i in list:
   if isinstance(i,str):
    a = i.lower()
    list1.append(a)
print(list1)

找出/var/log目录中,所有以.log结尾的文件名或者目录名
#加载os模块该模块可以实现执行linux系统命令的功能

import os
方法一
filename = [name for name in os.listdir('/var/log') if name .endswith('.log')]
print(filename)
方法二:
filename1 = [ ]
for name in os.listdir('/var/log'):
    if name.endswith('.log'):
        filename1.append(name)
print(filename1)

题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 72 = 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

#定义函数,计算每位数的平方和
def f(n):
    sum = 0
    while n>0:
        y = n%10
        n = n // 10
        sum += y **2
    return sum
#列表生成式,将输入的字符串转化成为整型的元素列表
in_put = [int(i) for i in input(':').split()]
#将满足条件的放到一个新列表
out_put = [i for i in range(in_put[1],in_put[2]) if in_put[0] * f(i) == i]
#输出满足条件的数组列表长度
print(len(out_put)
  • 题目描述:
    给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
    如,
    输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
    [2,3,5,7]
  • 输入描述:
    输入包括一个整数n,(3 ≤ n < 1000)
  • 输出描述:
    输出对数
  • 示例1 :
    输入:
    10
    输出:
    2

####字典生成式###

需求1:假设有20个学生,学生的分数在60~100之间,筛选出成绩在90
分以上的学生

方法一
import random
student = {}
for i in range(20):
    name = 'westos' + str(i)
    score = random.randint(60,100)
    student[name] = score
print(student)

highscore = {}
for name,score in student.items():
    if score>90:
        highscore[name] = score
print(highscore)
方法二
import random
student = {}
for i in range(20):
    name = 'westos' + str(i)
    score = random.randint(60,100)
    student[name] = score
print(student)
highscore = {name: score for name,score in student.items() if score>90}
print(highscore)

需求2:将所有的key值都变成大写

d = dict(a=1, b=2)
print(d)
new_d = {}
for i in d:
   new_d[i.upper()] = d[i]
print('key转换为大写的字典:',new_d)
print({k.upper(): v for k, v in d.items()})

需求3:大小写的key值合并,统一以小写输出

d = dict(a=1, b=2, c=3, B=9, A=10)
 a=11 b=11 c=2
 new_d = {}
 for k,v in d.items():
    low_k = k.lower()
    if low_k not in new_d:
      new_d[low_k] = v
    else:
             new_d[low_k] += v

 print(new_d)

print({k.lower():d.get(k.upper(),0)+d.get(k.lower(),0)
       for k in d})

猜你喜欢

转载自blog.csdn.net/weixin_44821839/article/details/90696704