内容大纲:
1、垃圾回收机制详解(了解)
引用计数
标记清除
分代回收

2、与用户交互
接收用户输入
# python3中
input
# python2.7(了解)
input
raw_input
格式化输出
%
str.format
f''

3、基本运算符
算数运算符
赋值运算符
=
增量赋值
链式赋值
交叉赋值
解压赋值
比较运算符
逻辑运算符
not、and、or
区分优先级:not > and > or

了解:
短路运算
成员运算符
in
身份运算符
is

# 一.垃圾回收机制详解(了解)

# 1、引用计数
# x = 10 # 直接引用
# print(id(x))
# y = x
# z = x
#
# l = ['a', 'b', x] # 间接引用
# print(id(l[2])) #
#
# d = {'mmm': x} # 间接引用
#
# print(id(d['mmm']))

# x=10
# l=['a','b',x] # l=['a'的内存地址,'b'的内存地址,10的内存地址]
#
# x=123
# print(l[2])
#
#
# x=10
# x=[10,]
#
# l=['a','b',10]

# 2、标记清除:用来解决循环引用带来的内存泄露问题
# 标记清除就是用来清除循环引用情况下引用计数无法清除的垃圾
# 循环引用=>导致内存泄露
l1=[111,]
l2=[222,]

l1.append(l2) # l1=[值111的内存地址,l2列表的内存地址]
l2.append(l1) # l2=[值222的内存地址,l1列表的内存地址]

# print(id(l1[1]))
# print(id(l2))

# print(id(l2[1]))
# print(id(l1))

# print(l2)
# print(l1[1])

del l1
del l2

# 3、分代回收:用来降低引用计数的扫描频率,提升垃圾回收的效率

二.与用户交互和格式化输出
# 1、接收用户的输入
# 在Python3:input会将用户输入的所有内容都存成字符串类型
# username = input("请输入您的账号:") # "egon"
# print(username, type(username))

# age = input("请输入的你的年龄: ") # age="18"
# print(age, type(age))
# age=int(age) # int只能将纯数字的字符串转成整型
# print(age > 16)

# int("12345")
# int("1234.5")
# int("1234abc5")

# 在python2中:
# raw_input():用法与python3的input一模一样
# input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型
# >>> age=input(">>>>>>>>>>>>>>>>>>>>>: ")
# >>>>>>>>>>>>>>>>>>>>>: 18
# >>> age,type(age)
# (18, <type 'int'>)
# >>>
# >>> x=input(">>>>>>>>>>>>>>>>>>>>>: ")
# >>>>>>>>>>>>>>>>>>>>>: 1.3
# >>> x,type(x)
# (1.3, <type 'float'>)
# >>>
# >>> x=input(">>>>>>>>>>>>>>>>>>>>>: ")
# >>>>>>>>>>>>>>>>>>>>>: [1,2,3]
# >>> x,type(x)
# ([1, 2, 3], <type 'list'>)
# >>>

# 2。字符串的格式化输出
# 2.1 %
# 值按照位置与%s一一对应,少一个不行,多一个也不行
# res="my name is %s my age is %s" %('egon',"18")
# res="my name is %s my age is %s" %("18",'egon')
# res="my name is %s" %"egon"
# print(res)

# 以字典的形式传值,打破位置的限制
# res="我的名字是 %(name)s 我的年龄是 %(age)s" %{"age":"18","name":'egon'}
# print(res)

# %s可以接收任意类型
# print('my age is %s' %18)
# print('my age is %s' %[1,23])
# print('my age is %s' %{'a':333})
# print('my age is %d' %18) # %d只能接收int
# print('my age is %d' %"18")
# %f 是接收浮点型,%.2f的意思是仅保留小数点后两位

# 2.2 str.format:兼容性好
# 按照位置传值
# res='我的名字是 {} 我的年龄是 {}'.format('egon',18)
# print(res)

# res='我的名字是 {0}{0}{0} 我的年龄是 {1}{1}'.format('egon',18)
# print(res)

# 打破位置的限制,按照key=value传值
# res="我的名字是 {name} 我的年龄是 {age}".format(age=18,name='egon')
# print(res)

# 了解知识
"""
2.4 填充与格式化
# 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
# *<10:左对齐,总共10个字符,不够的用*号填充
print('{0:*<10}'.format('开始执行')) # 开始执行******

# *>10:右对齐,总共10个字符,不够的用*号填充
print('{0:*>10}'.format('开始执行')) # ******开始执行

# *^10:居中显示,总共10个字符,不够的用*号填充
print('{0:*^10}'.format('开始执行')) # ***开始执行***
2.5 精度与进制

print('{salary:.3f}'.format(salary=1232132.12351)) #精确到小数点后3位,四舍五入,结果为:1232132.124
print('{0:b}'.format(123)) # 转成二进制,结果为:1111011
print('{0:o}'.format(9)) # 转成八进制,结果为:11
print('{0:x}'.format(15)) # 转成十六进制,结果为:f
print('{0:,}'.format(99812939393931)) # 千分位格式化,结果为:99,812,939,393,931

"""

# 2.3 f:python3.5以后才推出,网上说是3.6才有
x = input('your name: ')
y = input('your age: ')
res = f'我的名字是{x} 我的年龄是{y}'
print(res)

三.运算符
# 1、算数运算符
# print(10 + 3.1)
# print(10 + 3)
# print(10 / 3) # 结果带小数
# print(10 // 3) # 只保留整数部分
# print(10 % 3) # 取模、取余数
# print(10 ** 3) # 乘方运算

# 2、比较运算符: >、>=、<、<=、==、!=
# print(10 > 3)
# print(10 == 10)
#
# print(10 >= 10)
# print(10 >= 3)

# name=input('your name: ')
# print(name == 'egon')

# 3、赋值运算符
# 3.1 =:变量的赋值
# 3.2 增量赋值:
# age = 18
# # age += 1 # age=age + 1
# # print(age)
#
# age*=3
# age/=3
# age%=3
# age**=3 # age=age**3

# 3.3 链式赋值
# x=10
# y=x
# z=y
# z = y = x = 10 # 链式赋值
# print(x, y, z)
# print(id(x), id(y), id(z))

# 3.4 交叉赋值
m=10
n=20
# print(m,n)
# 交换值
# temp=m
# m=n
# n=temp
# print(m,n)

# m,n=n,m # 交叉赋值
# print(m,n)

# 3.5 解压赋值
salaries=[111,222,333,444,555]
# 把五个月的工资取出来分别赋值给不同的变量名
# mon0=salaries[0]
# mon1=salaries[1]
# mon2=salaries[2]
# mon3=salaries[3]
# mon4=salaries[4]

# 解压赋值
# mon0,mon1,mon2,mon3,mon4=salaries
# print(mon0)
# print(mon1)
# print(mon2)
# print(mon3)
# print(mon4)

# mon0,mon1,mon2,mon3=salaries # 对应的变量名少一个不行
# mon0,mon1,mon2,mon3,mon4,mon5=salaries # 对应的变量名多一个也不行

# 引入*,可以帮助我们取两头的值,无法取中间的值
# 取前三个值
# x,y,z,*_=salaries=[111,222,333,444,555] # *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处为_
# print(x,y,z)
# print(_)

# 取后三个值
# *_,x,y,z=salaries=[111,222,333,444,555]
# print(x,y,z)

# x,*_,y,z=salaries=[111,222,333,444,555]
# print(x,y,z)

# salaries=[111,222,333,444,555]
# _,*middle,_=salaries
# print(middle)

# 解压字典默认解压出来的是字典的key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z)

获取字典里面值的方式:
x,y,z = list(dic.values())
思路:先通过字典.values() 获取字典中所有的values 然后转成list列表 再解压赋值

作业:

0、分别画出下面两个列表在内存中是如何存放的
l1=[11,22,[333,444]]
l2=[11,22,[33,{'name':'egon','age':18}]]

1、
用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Egon -----------
Name : Egon
Age : 22
Sex : male
Job : Teacher
------------- end -----------------

name = input('请输入你的姓名:')
age = input('请输入你的年龄:')
hobby =input('请输入你的爱好:')
job = input('请输入你的工作:')
print('------------ info of Egon -----------')
print('Name: %s' % name)
print('Age: %s' % age)
print('Hobby: %s' % hobby)
print('Job: %s' % job)
print('------------- end -----------------')

2、
用户输入账号密码,程序分别单独判断账号与密码是否正确,正确输出True,错误输出False即可

rel_user = "egon"
rel_pass = 1234
username = input("请输入用户名:")
password = int(input("请输入秘密:"))
if username == 'egon':
if password == 1234:
print(True)
else:
print(False)

else:
print(False)

3、让计算机提前记下egon的年龄为18岁,写一个猜年龄的程序,要求用户输入所猜的年龄
,然后程序拿到用户输入的年龄与egon的年龄比较,输出比较结果即可

egon = 18
age = int(input('请输入年龄:'))
if age > egon:
print('猜大了')
elif age == egon:
print('猜对了')
else:
print('猜小了')

4、程序从数据库中取出来10000条数据,打算显示到页面中,
但一个页面最多显示30条数据,请选取合适的算数运算符,计算
显示满30条数据的页面总共有多少个?
最后一页显示几条数据?

data = 10000
show_data = 30
num = data // show_data
print('显示满30条数据的页面总共有 %s 个' % num)
last_num = data % show_data
print('最后一页显示 %s 条数据'% last_num)

5、egon今年为18岁,请用增量赋值计算3年后egon老师的年龄

age = 18
age += 3
print(age)

6、将值10一次性赋值给变量名x、y、z

x = y = z = 10

7、请将下面的值关联到它应该对应的变量名上,你懂的
dsb = "egon"
superman = "alex"

dsb = "egon"
superman = "alex"
dsb, superman = superman, dsb
print(dsb, superman)

8、我们只需要将列表中的傻逼解压出来,一次性赋值给对应的变量名即可
names=['alex_sb','wusir_sb','oldboy_sb','egon_nb','lxx_nb','tank_nb']

alex,wusir,oldboy,*_ = names
print(alex,wusir,oldboy)

选做题:
编写用户登录接口(学的多的同学,尝试做下述作业,这是截止到下周二学完文件处理之后的作业)
#1、输入账号密码完成验证,验证通过后输出"登录成功"

user_info = ['egon', 1234]
username = input('请输入用户名:')
password = int(input('请输入秘密:'))
if username == user_info[0] and password == user_info[1]:
print('登陆成功')
else:
print('登陆失败')

#2、可以登录不同的用户

user_info = {
'egon':'1234',
'wusir':'12345',
'olderboy':'6897'
}
username = input('请输入用户名:')
password = input('请输入秘密:')
if username in user_info:
if password == user_info.get(username):
print('登陆成功')
else:
print('秘密错误')
else:
print('登陆失败')

#3、同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)

user_info = {
'egon':'1234',
'wusir':'12345',
'olderboy':'6897'
}
num = 1
while num < 4:
username = input('请输入用户名:')
password = input('请输入秘密:')
if username in user_info:
if password == user_info.get(username):
print('登陆成功')
break
else:
print('秘密错误')
num += 1
else:
print('登陆失败')

# 锁定功能
if num == 4:
import time
print('输错4次,账户锁定')
time.sleep(300)
print('解除锁定,请继续输入')
num = 1

#扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟

day05基本运算符,格式化输出,垃圾回收机制的更多相关文章

  1. day05 垃圾回收机制(超小白讲解)

    垃圾回收机制 在学习这个抽象概念前,老习惯,灵魂二问 什么是?为什么要有? 引言:在程序运行到变量定义时,会在内存空间中存放变量值,然而内存空间是有限的,变量是无限的. Q:如何在有限的内存里存里存放 ...

  2. .net垃圾回收机制编程调试试验

    1. 什么是CLR GC? 它是一个基于引用跟踪和代的垃圾回收器. 从本质上,它为系统中所有活跃对象都实现了一种引用跟踪模式,如果一个对象没有任何引用指向它,那么这个对象就被认为是垃圾对象,并且可以被 ...

  3. 闭包内的微观世界和js垃圾回收机制

    一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...

  4. .net的垃圾回收机制简述

    .如何理解.net中的垃圾回收机制. .NET Framework 的垃圾回收器管理应用程序的内存分配和释放.每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存.只要托管堆中有地址 ...

  5. Erlang垃圾回收机制的二三事

    声明:本片文章是由Hackernews上的[Erlang Garbage Collection Details and Why ItMatters][1]编译而来,本着学习和研究的态度,进行的编译,转 ...

  6. JVM的生命周期、体系结构、内存管理和垃圾回收机制

    一.JVM的生命周期 JVM实例:一个独立运行的java程序,是进程级别 JVM执行引擎:用户运行程序的线程,是JVM实例的一部分 JVM实例的诞生 当启动一个java程序时.一个JVM实例就诞生了, ...

  7. JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...

  8. Python垃圾回收机制详解

    一.垃圾回收机制 Python中的垃圾回收是以引用计数为主,分代收集为辅.引用计数的缺陷是循环引用的问题. 在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存. #e ...

  9. 成为Java GC专家(3)—如何优化Java垃圾回收机制

    为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...

随机推荐

  1. PAT甲级——1009 Product of Polynomials

    PATA1009 Product of Polynomials Output Specification: For each test case you should output the produ ...

  2. Image.FromStream(ms) 提示参数无效

    说明ms有问题,首先确保有读到数据,这种情况是保存到库的时候出错的. 原来你可能是这样写的: MemoryStream stream = new MemoryStream();PictureBox1. ...

  3. q检验|新复极差法|LSD|二因素方差分析

    生物统计与实验设计 放大程度q检验:精度较高>新复极差法:各种错误比较平均>LSD 其中,LSD不随M的变化而变化,但是SSR和q-test会随M变化而变化. 第一步代表了方差分析的核心思 ...

  4. 应用HTML5 标签下载文件

    使用HTML5 <a>标签可以直接下载文件而不用通过后台action. <a href="/uploadfolder/xxxx.txt">点击下载</ ...

  5. 《C Prime Plus》第八节笔记

    第八节 字符输入/输出和输入验证 8.1 单字符I/O:getchar()和putchar() getchar()和putchar()包含在stdio.h头文件中 8.2 缓冲区 无缓冲输入: 直接回 ...

  6. python语法基础-基础-控制语句

    ###############    if条件控制语句    ############### # 以下实例 x 为 0-99 取一个数,y 为 0-199 取一个数,如果 x>y 则输出 x,如 ...

  7. generate的使用verilog

    根据项目设计的需要,要实例化多个类似的模块,这些类似的模块包括方波波形发生器,这几个模块基本相同,除了参数传递值不同,其他他部分都是相同的 具体实现代码如下: 此外有计数模块的例化,这个模块例化多个的 ...

  8. OpenCV 输入输出XML和YAML文件

    #include <opencv2/core/core.hpp> #include <iostream> #include <string> using names ...

  9. Qt LNK1158无法运行rc.exe解决办法

    找出电脑上的rc.exe ,发现在C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxx.0\x86 路径下. 找出电脑上的rc.exe ,发现在C: ...

  10. miracle|

    N-COUNT 奇迹;出人意料的事If you say that a good event is a miracle, you mean that it is very surprising and ...