####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<=1018, 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})