鱼C论坛

 找回密码
 立即注册
查看: 2244|回复: 8

[技术交流] 《零基础入门学习Python》 005闲聊之Python的数据类型

[复制链接]
发表于 2017-10-28 15:57:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 长脸哥哥 于 2017-11-24 14:37 编辑

嘀~房卡~

1. 课前准备

(1)课件下载:http://bbs.fishc.com/thread-38068-1-1.html

2. 学习笔记

(1)Python的变量是没有类型的,但不是说Pyhton没有数据类型
(2)Python的一些数值类型:整型,浮点型,布尔类型
(3)Python的整型与长整型整合在一起,可以很容易进行大数运算
(4)Pyhton区分浮点型与整型的唯一方式是是否有小数点,有小数点就是浮点型,没有就是整型
(5)e计法即平时生活中所说的科学计数法,e代表10,e后边的数字代表10的几次方,e计法的输出结果是浮点数
(6)布尔类型是一个特殊的整型,其中True代表整数1,False代表整数0
(7)布尔类型是可以计算的,但是把布尔类型当成1与0计算是不妥的,实际应用不要这样做
(8)类型转换函数:
                        int()将一个字符串或者浮点数转换成整数
                        str()将一个整数或者浮点数转换成一个字符串
                        float() 将一个整数或者字符串转换成一个浮点数  
(9)type()函数用于返回括号内的类型
(10)isinstance()函数有两个参数,isinstance(待确定类型的数据,指定的一个数据类型),会返还一个布尔类型的值,True表示两者一致,False表示两者不一致
(11)今天所学BIF:type()返还括号内的类型,isinstance()判断类型是否相同,str()括号内转换成字符串类型,float()括号内转换成浮点型,int()括号内转出成整数型

3. 课堂代码

(1)字符串相加(字符串的拼接)练习:
'520'+'1314'
(2)数字相加练习:
520+1314
(3)e计法练习:
a = 0.0000000000000000000000000025
a
150000000000
1.5e11
15e10
1.5e4
(4)布尔类型计算练习(正常编程请不要使用):
True+True
True+False
True*False
True/False会报错,因为分母为0
True/False
(5)int()函数使用练习:
a='520'
b=int(a)
b
int()括号内不为数字时会报错,如:
int('小甲鱼')
如果是浮点数,会采用截断处理,直接将小数点后的数字去掉,如以下代码输出结果为5:
a=5.99
c=int(a)
c
(6)float()函数使用练习:
a='520'
b=float(a)
b
a=520
b=float(a)
b
(7)str()函数使用练习:
a=5.99
b=str(a)
b
c=str(5e19)
c
(8)对内置函数赋值的风险(以下代码会报错,c不会被成功转为字符串类型):
str="I love FishC.com"
str
c=str(5e19)
(9)type()函数使用练习:
a='520'
type(a)
type(5.2)
type(True)
type(5e15)
(10)isinstace()函数使用练习:
a='小甲鱼'
isinstance(a,str)
isinstance(a,int)
isinstance(320,int)
isinstance(320.25,float)
isinstance(320.25,bool)
4. 课后作业

4.1 测试题

(0)在Python中,int表示整型,那你还记得bool、float和str分别表示什么吗?
答:bool表示布尔类型,float表示浮点型,str表示字符串类型

(1)你知道为什么布尔类型(bool)的True和False分别用1和0来代替吗?
答:计算机系统基本都使用二进制,二进制数据是用0和1两个数码来表示的数,用1表示True,0表示Flase能够最大程度减少其占用的数据量

(2)使用int()将小数转换为整数,结果是向上取整还是向下取整呢?
答:向下取整,如4.99使用int(4.99)后结果为4

(3)我们人类思维也是习惯于“四舍五入“法,你有什么办法使得int()按照“四舍五入“的方式取整吗?
答:可以尝试一下在括号内+0.5达到“四舍五入”的目的,代码如下:
int(4.4+0.5)
输出结果为4
int(4.6+0.5)
输出结果为5

(4)取得一个变量的类型,视频中介绍可以使用type()和isinstance(),你更倾向与使用哪个?
答:isinstance()
建议使用isinstance(),因为它的返回结果比较直接,另外type()其实并没有你想象的那么简单,后边会讲到

(5)Python3可以给变量命名中文名,知道为什么吗?
答:源码文件使用UTF-8编码

(6)【该题针对零基础的鱼油】你觉得这个系列教学有难度吗?
答:有点吧,不过挺有意思的,对于新手需要自己动手动脑的地方挺多的,很不错

4.2 动动手

(0)针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃
如果你尝试过以下做法,请举下小手:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
# 这种想法是因为 type(1) 会返回 <class 'int'>,如果 type(temp) 返回结果一致说明输入是整数。
while type(temp) != type(1):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
或者可能这样:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
# not操作符的作用是将布尔类型的结果翻转:即取反的意思,not True == Flase
while not isinstance(temp, int):
    print("抱歉,输入不合法,", end='')
    temp = input("请输入一个整数:")
以上方法的思路是正确的,不过似乎忽略了一点儿:就是input()的返回值始终是字符串,所以type(temp)永远是<class 'str'>!

其实有蛮多的做法可以实现的,不过就目前而言我们学习过的内容来看,还不足够。

所以,在让大家动手完成这道题之前,小甲鱼介绍一点新东西给大家!
s为字符串

s.isalnum()  所有字符都是数字或者字母,为真返回 Ture,否则返回 False。

s.isalpha()   所有字符都是字母,为真返回 Ture,否则返回 False。

s.isdigit()     所有字符都是数字,为真返回 Ture,否则返回 False。

s.islower()    所有字符都是小写,为真返回 Ture,否则返回 False。

s.isupper()   所有字符都是大写,为真返回 Ture,否则返回 False。

s.istitle()      所有单词都是首字母大写,为真返回 Ture,否则返回 False。

s.isspace()   所有字符都是空白字符,为真返回 Ture,否则返回 False。
   
例如:

>>> s = 'I LOVE FISHC'
>>> s.isupper()
>>> True

好了,文字教程就到这里,大家赶紧趁热打铁,改造我们的小游戏吧!
答:代码如下:
import random
times = 3
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
guess = 0
print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
while (guess != secret) and (times > 0):
    temp = input()
    while temp.isdigit() == False:
        print("抱歉,输入不合法,",end=" ")
        temp = input("请输入一个整数:")
    guess = int(temp)
    times = times - 1 
    if guess == secret:
        print("我草,你是小甲鱼心里的蛔虫吗?!")
        print("哼,猜中了也没有奖励!")
    else:
        if guess > secret:
            print("哥,大了大了~~~")
        else:
            print("嘿,小了,小了~~~")
        if times > 0:
            print("再试一次吧:", end=" ")
        else:
            print("机会用光咯T_T")
print("游戏结束,不玩啦^_^")
(1)写一个程序,判断给定年份是否为闰年。(注意:请使用已学过的BIF进行灵活运用)
这样定义闰年的:能被4整出但不能被100整除,或者能被400整除都是闰年
答:代码如下:
temp=input("请输入一个年份:")
while temp.isdigit() == False:
    temp=input("请输入一个年份,如2017 :")
temp=int(temp)
if temp/4 == int(temp/4) and temp/100 > int(temp/100) or temp/400 == int(temp/400):
    print(str(temp)+"年是闰年")
else:
    print(str(temp)+"年不是闰年")
(2)请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
答:type()与isinstance()的用法,str(),float(),int()的用法,字符串的一些判断方法,几种数据类型,e计法的使用

鱼哥的参考答案:http://bbs.fishc.com/thread-37420-1-1.html

下车~

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-23 15:00:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-24 16:07:59 | 显示全部楼层
老哥,这里    if year/400 == int(year/400) 是什么意思啊,year/400 不是应该就直接等于了int(year/400)吗, 因为之前已经把year给转化成整形了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-29 22:48:02 | 显示全部楼层
同问,if year/400 == int(year/400) 是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-4 19:51:40 | 显示全部楼层
曾小胜 发表于 2017-12-29 22:48
同问,if year/400 == int(year/400) 是什么意思?

判断两边是不是相等
如果整除,两边都是相等的。不整除的话,左边得出来的是带小数的,右边是取整的,所以是不等的。==表示判断两边是否相等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-4 19:57:45 | 显示全部楼层
夏夜星空 发表于 2017-12-24 16:07
老哥,这里    if year/400 == int(year/400) 是什么意思啊,year/400 不是应该就直接等于了int(year/400) ...

不是直接等于的,举个例子,虽然在之前把year取整了,但是在计算除法的时候,还是会默认将结果表示为浮点数的 A.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-4 20:03:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-4 20:03:40 | 显示全部楼层
曾小胜 发表于 2017-12-29 22:48
同问,if year/400 == int(year/400) 是什么意思?

谢谢大佬支持,我只是菜鸟一个,求带飞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 18:50:17 | 显示全部楼层
夏夜星空 发表于 2017-12-24 16:07
老哥,这里    if year/400 == int(year/400) 是什么意思啊,year/400 不是应该就直接等于了int(year/400) ...

这里是判断年份是否能够被整除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 09:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表