Python02 标准输入输出、数据类型、变量、随记数的生成、turtle模块详解
1 标准输出
python3利用 print() 来实现标准输出
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print """ print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream. """ pass
1.1 输出字符串
在 sprint() 的括号中加上字符串就可以在控制台输出指定的文字,比如输出 “Hello Boy” 的实现代码如下
print("Hello Boy")
1.2 输出多个字符串
print() 函数可以接收多个字符串,各个字符串之间用逗号进行隔开,在输出时逗号不会输出而是用空格代替
print("Hello", "Boy", "Good", "World")
技巧01:print() 可以接收多个字符串的原理是print() 方法可以接收任意多个参数,这一点从源码中可以看出;详情请参见方法的形参部分知识点
技巧02:遇到逗号用空格代替的原因是print()方法有一个默认参数 seq ,该参数的作用就是作为多个输出值的分隔符,其默认值就是空格
1.3 输出整数或者计算结果
输出整数时直接会将整数进行输出,输出计算结果时会对数学表达式进行计算后再将结果进行输出
1.4 输出多个变量
print() 方法也可以接收多个变量进行输出,各个变量之间利用逗号进行分隔
1.5 结束符
print() 方法默认的结束符时换行符,这一点从源码中可以看出
1.5.1 默认结束符的效果
1.5.2 自定义结束符的效果
2 标准输入
python3提供的input()方法可以让用户输入一个字符串,并存放到一个变量中去;print()方法可以在括号中添加提示信息,这些提示信息会被输出到控制台
def input(*args, **kwargs): # real signature unknown """ Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed to standard output without a trailing newline before reading input. If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. On *nix systems, readline is used if available. """ pass
2.1 输入字符串
2.2 输入类型
利用input()输入的数据都是字符串类型的数据
坑01:利用input()输入的任何数据都是字符串类型的数据,如果想利用输入的数据进行一些数学运算就必须进行类型转换
2.2.1 input()实战
需求:用户根据提示信息提供圆的半径和圆周率的取值,系统自动输出直径、圆周、面积等信息
坑01:在进行数学计算之前如果不对数据进行类型转化就会报类型错误
radius = input("请输入半径:\n") PI = input("请输入圆周率的取值:\n") diameter = float(radius) * 2 area = float(PI) * float(radius) * float(radius) perimeter = float(PI) * diameter print("直径为:", diameter, ";周长为:", perimeter, "; 面积为:", area)
3 数据类型
在程序中不同的数据需要定义不同的数据类型
3.1 整型
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1
,100
,-8080
,0
,等等。计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x
前缀和0-9,a-f表示,例如:0xff00
,0xa5b4c3d2
,等等。
技巧01:利用print()方法输出十六进制的数时输出的是转化成了十进制的数
3.2 浮点型
浮点数也就是小数;浮点数可以用数学写法,如1.23,3.14,-9.01;但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
3.3 字符串
字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识。
3.3.1 多行字符串
\n 这个转义字符代表换行,为了简化,Python允许用'''...'''
的格式表示多行内容
3.4 布尔型
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。
3.5 空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
3.6 其他类型
列表、字典等多种数据类型,还允许创建自定义数据类型(即:对象)
待更新......2018-3-20 10:25:44
4 变量
变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句为:String name = new String("warrior");
因为python是动态语言,所以一个变量的类型取决于该变量的指向,如果该变量的指向的东西的类型发生了变化,那么该变量的类型也会发生变化
4.1 变量在内存中的表示
技巧01:在python中一切都是对象,所以python中变量存储的都是地址信息而不是数据值;变量的值就是变量指向数据的地址信息
name = "warrior"
4.1.1 python解释器会根据上面的代码做两件事
》在内存中创建一个“warrior”字符串
》在内存中创建一个名为name的变量,而且该变量指向“warrior”
4.1.2 变量之间的赋值
坑01:这里并不是将name01的值赋值给了name02,而是name02指向name01指向的数据
技巧01:因为name01和name02都指向同一个字符串"warrior",所以name01和name02的内容都是字符串"warrior"在内存中的地址信息(备注:因为name01和哪么02都指向了同一个字符串,所以他们的内存地址是一样的,他们的值也是一样的)
解释:
python解释器在遇到 name02 = name01 这行代码时执行的操作
》在内存中创建一个名为name02变量
》让name02变量指向name01所指向的内容(理解:name01和name02中存放的不是数据,而实数据对应的地址信息,name02 = name01实际上是将name01中存放的地址信息赋值给了name02)
解释:
python解释器在遇到 name02 = “fury” 这行代码时执行的操作
》改变name02的指向,即:改变name02中存放的地址信息值
技巧01:变量的指向发生变化后,变量的值以及变量的地址都会发生变化
技巧02:变量的值就是变量指向数据的地址信息
name01 = "warrior" name02 = name01 print("name01指向的值为:",name01,"-----", "name02指向的值为:",name02) print("name01变量的地址信息为:", id(name01),"-----", "name02变量的地址信息为:", id(name02)) print(name01 is name02) print(name01 == name02) name01 = "fury" print("name01指向的值为:",name01,"-----", "name02指向的值为:",name02) print("name01变量的地址信息为:", id(name01),"-----", "name02变量的地址信息为:", id(name02)) print(name01 is name02) print(name01 == name02)
5 随机数
python自带的random模块可以用来生成随机数
5.1 猜数字游戏
5.1.1 需求
随机产生一个数字同用户输入的数字进行比较,知道猜中为止
5.1.2 代码实现
import random randomNum = random.randint(0,10) inputNum = input("请输入一个0到10之间的整数:") judge = True while (judge): if (randomNum != int(inputNum)): if (randomNum < int(inputNum)): inputNum = input("大啦,请在输入一个0到10之间的整数:") if (randomNum > int(inputNum)): inputNum = input("小啦,请在输入一个0到10之间的整数:") else: print("恭喜你,才对啦!") judge = False
5.1.3 改进
规定输入次数、设定随记数范围
6 turtle模块
6.1 命令介绍
6.1.1 运动命令
forward(d) -> 向前移动d个像素点
backward(d) -> 向后移动d个像素点
right(dgree) -> 向右转动dgree度
left(dgree) -> 向左转动dgree度
goto(x, y) -> 光标移动到(x, y)处
speed(apeed) -> 设定画笔的速度,速度值为[0, 10]之间的整数
6.1.2 画笔控制命令
down() -> 画笔落下,即:开始画图
up() -> 画笔抬起,即:停止画图
技巧01:goto(x,y) 之前一般需要执行up(),goto(x, y)之后一般需要执行down()
pensize(width) -> 设置画笔的宽度的像素值
pencolor(color) -> 设置画笔的宽度
fillcolor(color) -> 设置填充颜色
技巧02:fillcolor(color)通常需要和 begin_fill() 和 end_fill() 配合使用
begin_fill() -> 开始填充颜色
end_fill() -> 结束填充颜色
6.1.3 特殊指令
turtle.mainloop() -> 画图结束后静止(注:其实是一直在重复画,只是给我们个感觉是静止而已)
6.2 练习
6.2.1 画正三角形
# 画三角形 import turtle t = turtle.Pen() t.fillcolor("blue") t.pencolor("red") t.pensize(4) t.begin_fill() t.forward(60) t.left(120) t.forward(60) t.left(120) t.forward(60) t.end_fill() turtle.mainloop()
6.2.2 画奥运五环
# 话奥运五环 import turtle t = turtle.Pen() t.pensize(4) t.pencolor("blue") t.circle(30) t.up() t.goto(70, 0) t.down() t.pencolor("black") t.circle(30) t.up() t.goto(140, 0) t.down() t.pencolor("red") t.circle(30) t.up() t.goto(35, -35) t.down() t.pencolor("yellow") t.circle(30) t.up() t.goto(105, -35) t.down() t.pencolor("green") t.circle(30) turtle.mainloop()
6.2.3 利用循环画
import turtle # 同时设置pencolor=color1, fillcolor=color2 turtle.color("red", "yellow") turtle.begin_fill() for i in range(50): turtle.forward(200) turtle.left(170) turtle.end_fill() turtle.mainloop()
6.2.4 画五角星
import turtle t = turtle.Pen() t.pencolor("yellow") t.fillcolor("red") t.pensize(4) t.begin_fill() for i in range(5): t.forward(100) t.right(144) t.end_fill() turtle.mainloop()