【python】day02 格式化输出和初始编码

day02 格式化输出和初始编码

1. day 01 内容回顾

(1)编译型和解释型语言的优缺点

编译型: 把代码一次性编译成二进制文件,如C/C++
优点:运行效率高
缺点:开发效率慢,不能跨平台
解释型: 当程序运行时,一行一行解释二进制语言
优点:开发效率高,可以跨平台
缺点:运行效率低,但其实是感觉不出来的

(2)if 语句及嵌套,while循环语句
思考:if 条件:和 while 条件: 后面冒号意义何在?

相当于标识符,隔开条件与结果

(3)如何终止循环?

1.改变条件,使其不成立;
2.使用break 或者 continue 语句

2. day01 homework答案参考

(1)使用while循环输入 1 2 3 4 5 6 8 9 10

三种思路:第一:加入空格这个思路;第二:Pass 语句,什么都不执行
第三,用continue语句,这个最简洁。

# 第一:加入空格这个思路
number = 0
while number < 10:
    number += 1
    if number == 7:
        print(' ')
    else:
        print(number)
#第二:Pass 什么都不执行
number = 0
while number < 10:
    number += 1
    if number == 7:
        pass
    else:
        print(number)
# 第三,最优解,最简洁
number = 0
while number < 10:
    number += 1
    if number == 7:
       continue
    print(number)

刚入门学习的话,只要能把代码写出来,能出结果就好了。至于代码的优化,简洁等需要积累。

(3)(4)输出1-100所有的奇数

思路:第一,最简单的写法,从1开始,自加2即可;第二,标准写法,取余数。

# 第一种:直接让count自加2即可,count += 2
count = 1
while count < 101:
    print(count)
    count += 2
# 第二种:标准写法,奇数对2取余数为1,然后打印这些数即是奇数。
count = 1
while count < 101:
    if count % 2 == 1:
        print(count)
    count += 1

注:偶数同样如此。
按照第一种写法,只需把count = 0即可;
按照第二种写法,把if那块改成if count % 2 == 0:或者if count % 2 !=1:即可

(5)求1-2+3-4+5 …+99的所有数的和

观察:奇数的时候是正号,偶数的时候是负号,可想到用if语句,分支。图解如下:
在这里插入图片描述

count = 1
sum = 0
while count < 100:
    if count % 2 == 1:
        sum = sum + count
    if count % 2 == 0:
        sum = sum - count
    count += 1
print (sum)
(6)用户登陆(三次机会重试)

思路:用户交互-input,有账号密码,只能输入三次–while循环三次。

tries = 0
while tries < 3:
    username = input('请输入账号:')
    password = int(input('请输入密码:'))
    if username == 'Lric' and password == 123:
        print ('登陆成功')
    else:
        print('登录失败,请重新登录')
    tries += 1
else:
    print('输错超过三次,您的用户已经被锁定,请20分钟后再试')

对比自己写的代码,不用先定义 accountpassword的值,直接判断是否等于心里设想的那个值即可。

3. %格式化输出

引入:以下代码是Alex的自我介绍,但是这只是他自己的。能不能我输入谁的名字,就输出谁的信息?这就需要用到格式化输出了。

name = input('请输入你的姓名:')
age = input('请输入你的年龄:')
height = input('请输入你的身高:')
print ('我的名字是:',name '我的年龄是:', age '我的身高是:',height)
#输出
请输入你的姓名:Alex
请输入你的年龄:23
请输入你的身高:173
我的名字是: Alex 我的年龄是: 23 我的身高是: 173

假如有一个练习,问姓名,年龄,工作,爱好,需要打印成以下格式,怎么办呢?

------------ info of Alex Li -----------
Name  : Alex Li
Age   : 22
job   : Teacher
Hobbie: girl
------------- end -----------------

**格式化输出:**其实就是占位,告诉计算机这个地方我后面需要根据用户的输入,来进行替换

name = input('your name is :')
age = input('your age is :')
height = input('your height is ')
job = input('your job is:')
hobby = input('your hobby is:')
info = '''------------ info of %s ----------- # 每一个%s 相当于一个占位符,替换name
Name  : %s  #代表nane
Age   : %d  #代表age
Height: %d  #代表height
job   : %s  #代表job
Hobby: %s  #代表hobby
------------- end -----------------''' %(name,name,age,height,job,hobby)
print(info)

运行下
运行代码
为什么会报错?
报错的原因是%d要求是数字类型,而不是字符串。但是我们明明输入的24呀?这是因为input接受的默认为字符串类型。
那怎么解决?
把类型转换一下 或者把%d改成%s即可

思考:在格式化输出的时候,的确需要输出%那怎么操作?
现在有如下代码

info = "我是%s,年龄%d,目前学习进度为3%"%('Ric',18)
print(info)

会报错。因为当出现%时,默认就是占位%。的确需要%,那怎么操作呢?用两个%%,相当于转义符,告诉计算机后面%是要打印的!

info = "我是%s,年龄%d,目前学习进度为3%%"%('Ric',18)
print(info)

那后面再加一个s呢,会报错吗?不会,因为前面有一个%了,直接把后面的%s当作字符串输出了。

info = "我是%s,年龄%d,目前学习进度为3%%s"%('Ric',18)
print(info)
#输出
我是Ric,年龄18,目前学习进度为3%s

4. 初始编码

引入:问题,QQ是如何传递信息的?这涉及到七层协议,需要一层一层的拆解,拆到最底层走的是电信号,也即计算机能识别的二进制
假如:
00000 代表“你” 0101 代表 “好” 0100 代表“啊”。但是,把它们放在一起,就不知到是什么意思了。
0000001010100 计算机在不知道以上含义的前提下能准确识别吗?
因此,就要制定一个规则,逢几个数字为一组

基于此,有了美国ASCII码

美国ASCII码
只适用于显示英语等,最开始只有7位,但设计者为了以后的拓展,预留了一位,因此有8位(0000 0000),8位表示一个字节,2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
补充:单位换算
8bit = 1 byte (一个字节)
1024 byte = 1 KB
1024 KB = 1 MB
1024 MB =1 GB
1024 GB = 1TB
但是只能满足英文,而不能显示世界上其他语言和符号。为了解决这个问题,推行了一个万国码——Unicode

Unicode
它为每种语言中的每个字符设定了统一并且唯一的二进制编码,用16位(2个字节)来表示现有的字符和符号。共有 2** 16 = 65536种。但是,中文有9w多字,还是不够。后面用32位(4个字节)来表示中文,但是这样空间太冗余,占用资源太浪费。于是对Unicode进行了升级——Utf-8,Utf-16,Utf-32

Utf-8
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:
英文中的内容用1个字节保存;
欧洲的字符用2个字节保存;
东亚的字符用3个字节(2 ** 24 = 16777216)保存。
gbk:中国国产,只用于中文和ascii码中文字。用一个字节表示英文,两个字节表示中文

5. 运算符

重点关注逻辑运算符

逻辑运算符

运算优先级 ()> not > and> or
练习:写出下列代码的输出结果

print(3>4 or 4<3 and 1==1) # False
print(1 < 2 and 3 < 4 or 1>2) # True
print(2 > 1 and 3 < 4 or 4 > 5 and 2 < 1) #True
print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8) # False
print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #False
print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #False

思考:若逻辑运算符前后全是数字呢? 如以下代码

print(0 or 2) #2
print(3 or 2) #3
print(1 and 2) #2
print(0 and 2) #0

运算规则:
(1)x or y , x为真,值就是x,x为假,值是y;

(2)x and y, x为真,值是y,x为假,值是x
以上记忆一个就可以了,and 和 or 是相反的。

思考:以下代码返回什么?

print(1 > 2 and 3 or 4 and 3 < 2)

返回False。为什么
从左至右依次运算!!再按照and or 先后顺序
1.False and 3 or 4 and False
2.False or False

以下练习同理

print(2 or 1 < 3) # 2
print(3 and 1 < 3) #True
print(0 or 1 < 3)  #True
print(0 and 1 < 3) #0
print(5 and 3 < 1 and 2) #False
print(0 or 3 < 1 and 2) #False

Q:python中的>或者<之类的运算符的优先级比or大,比and小?
不全对哦!
优先级:比较运算符(> < >= <=)比 逻辑运算符 (not and or)要高。
点击移步运算优先级


如果觉得这篇文章对你有小小的帮助的话,记得给文章点个“赞”哦,博主在此感谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值