一. Python的一些数值类型
1. 整型
即我们平时所见的整数,其长度不受限制,如果说非要有个限制,那只限制于计算机的虚拟内存总数
2. 浮点型
即平时所说的小数
Python区分整型和浮点型的唯一方式就是看有没有小数点
e记法:即平时所说的科学计数法,用来表示特别大或者特别小的数,e代表10,后面跟着10的几次方,例如下图
150000=1.5e5
3.布尔类型
布尔类型是特殊的整型,尽管布尔类型用True和False来表示“真”与“假”,但布尔类型可以当作整数来对待,True=1,False=0,因此布尔类型的值是可以用来计算的,但实际上把布尔类型当成1和0来参与运算是不合适的,容易引起代码混乱
数据类型转换
整数、浮点数和字符串之间是可以转换的(这个图画的好丑,还显示不全,第一次用,呜呜呜)
int()
function: 将一个字符串或者浮点数转换为一个整数
下面这些出错的原因是a的字符串不是表示一个数字的字符串,
attention:int()函数转换时里面的字符串不能出现中英文等不是数字的东西
attention:如果是浮点数转化为整型,那么Python会采取截断处理,直接砍掉小数点后面的小数而不是四舍五入
a
str()
function:将一个数或任何其他类型转化为一个字符串
attention:str自从被当作变量名来使用之后,它就被赋予了另外一种身份,当你再次使用它的时候,Python会自己认为用str的新身份来代替str()函数,因此会导致下面的错误
float()
function:将一个字符串或整数转换为一个浮点数
获取变量的数据类型
我们有时候可能需要确定一个变量的数据类型,例如当用户输入时,我们需要用户输入一个整数,但用户却输入了一个字符串,那就会引发一些意想不到的错误导致程序崩溃
如下图的报错是因为用户输入的是不能转化为整数的字符串,所以程序报错
那么如何解决呢?
type() 函数:判断数据类型
isinstance()
isinstance()有两个参数,第一个参数是:待确定数据类型的值, 第二个是:指定一个数据类型,然后isinstance()会返回一个布尔类型的值,True表示两个参数类型一致,False表示两个参数类型不一致
字符串的补充
s 为字符串
s.isalnum() 所有字符都是数字或者字母,为真返回 True,否则返回 False。
s.isalpha() 所有字符都是字母,为真返回 True,否则返回 False。
s.isdigit() 所有字符都是数字,为真返回 True,否则返回 False。
s.islower() 所有字符都是小写,为真返回 True,否则返回 False。
s.isupper() 所有字符都是大写,为真返回 True,否则返回 False。
s.istitle() 所有单词都是首字母大写,为真返回 True,否则返回 False。
s.isspace() 所有字符都是空白字符,为真返回 True,否则返回 False。
Task
-
在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示什么吗?
bool:布尔类型
float:浮点数
str:字符串 -
你知道为什么布尔类型(bool)的 True 和 False 分别用 1 和 0 来代替吗?
你可能听说过计算机是很“笨”的,究其根本是因为它只认识二进制数,所以所有的编程语言最终都会转换成简单的二进制序列给 CPU 按照一定的规则解析。
由于二进制只有两个数:0 和 1,因此用 0 和 1 来表示 False 和 True 再适合不过了,因为不用浪费资源在转换的过程上! -
使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?
向下
对于负数则刚好相反 —— 是向上取整 -
我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int() 按照“四舍五入”的方式取整吗?
5.4 “四舍五入”结果为:5,int(5.4+0.5) == 5
5.6 “四舍五入”结果为:6,int(5.6+0.5) == 6 -
取得一个变量的类型,视频中介绍可以使用 type() 和 isinstance(),你更倾向于使用哪个?
使用 isinstance(),因为它的返回结果比较直接 -
Python3 可以给变量命名中文名,知道为什么吗?
Pyhton3 源码文件默认使用utf-8编码(支持中文) -
针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃。***.
我改进后的代码只提醒用户一次:
attention:input返回的值永远是字符串
hits = input('猜猜我现在心里想的是哪个数字:')#input返回的值永远是字符串
while hits.isdigit():
guess = int(hits)
time = 1
while guess != 8 and time < 3:
if guess < 8:
print('嘿,小了哦')
else:
print('哥们,大了大了!')
hits = input('请重新输入吧:')
guess = int(hits)
time = time+1
if guess == 8 and time <= 3:
print('wc,你是我心里的蛔虫吗?')
print('哼,猜中了也没有奖励')
else:
print('给你三次机会都猜不中')
print('游戏结束,不玩啦!')
if hits.isdigit() == 0:
print("抱歉输入不合法")
hits = input('请输入一个整数:')
guess = int(hits)
time = 1
while guess != 8 and time < 3:
if guess < 8:
print('嘿,小了哦')
else:
print('哥们,大了大了!')
hits = input('请重新输入吧:')
guess = int(hits)
time = time+1
if guess == 8 and time <= 3:
print('wc,你是我心里的蛔虫吗?')
print('哼,猜中了也没有奖励')
else:
print('给你三次机会都猜不中')
print('游戏结束,不玩啦!')
小甲鱼代码:
import random
times = 3
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
guess = 0
print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
while (guess != secret) and (times > 0):
temp = input()
if temp.isdigit():
guess = int(temp)
if guess == secret:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中了也没有奖励!")
else:
if guess > secret:
print("哥,大了大了~~~")
else:
print("嘿,小了,小了~~~")
if times > 1:
print("再试一次吧:", end='')
else:
print("机会用光咯T_T")
else:
print("抱歉,您的输入有误,请输入一个整数:", end='')
times = times - 1 # 用户每输入一次,可用机会就-1
print("游戏结束,不玩啦^_^")
8.写一个程序,判断给定年份是否为闰年。(注意:请使用已学过的 BIF 进行灵活运用)
这样定义闰年的:能被4整除但不能被100整除,或者能被400整除都是闰年。
我的代码:
year = input('请输入一个年份:')
while year.isdigit():
a = int(year)
b = a / 400
if isinstance(b,int):
print('闰年')
else:
print('不是闰年')
if year.isdigit() == 0:
print('输入不合法')
year = input('要输入整数哦:')
a = int(year)
b = a / 400
if isinstance(b,int):
print('闰年')
else:
print('不是闰年')
执行while循环时,程序会一直跑
执行下面的if时:
因此,把第一个while改成if:
year = input('请输入一个年份:')
if year.isdigit() == 1:
a = int(year)
b = a / 400
if isinstance(b,int):
print('闰年')
else:
print('不是闰年')
if year.isdigit() == 0:
print('输入不合法')
year = input('要输入整数哦:')
a = int(year)
b = a / 400
if isinstance(b,int):
print('闰年')
else:
print('不是闰年')
这样程序是正确的,但只能运行一次
还是用while循环使得程序可以运行多次,且补充了两句可以使程序不会一直运行,但现在又发现了一个新问题,就是一直会打印出“不是闰年”
可能是isinstance()使用有误,换一种判断方法,这样跑是完美的(注意哦,前面的判断闰年少了一个条件,此处已补充):
year = input('请输入一个年份:')
while year.isdigit() == 1:
a = int(year)
b = a / 400
c = int(b)
if b == c:
print('闰年')
else:
if (a / 4 == int(a / 4)) and (a/100 != int(a /100)):
print('闰年')
else:
print("不是闰年")
year = input('请输入一个年份:')
if year.isdigit() == 0:
print('输入不合法')
year = input('要输入整数哦:')
while year.isdigit() == 1:
a = int(year)
b = a / 400
c = int(b)
if b == c:
print('闰年')
if (a / 4 == int(a / 4)) and (a/100 != int(a /100)):
print('闰年')
else:
print("不是闰年")
year = input('请输入一个年份:')
第一张截图判断条件不完整哦
小甲鱼代码:注意not的用法
temp = input('请输入一个年份:')
while not temp.isdigit():#not 是否定的意思
temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if year/400 == int(year/400):
print(temp + ' 是闰年!')
else:
if (year/4 == int(year/4)) and (year/100 != int(year/100)):
print(temp + ' 是闰年!')
else:
print(temp + ' 不是闰年!')
小甲鱼这里的代码是有缺陷的,就是程序不能一直跑,第二块没有用到while循环,所以得多次启动程序,比较麻烦