0 前期准备
在练习python前先使用Anaconda新建一个环境,并且使用PyCharm新建一个项目
(1)使用Anaconda新建环境webSafe。
- 打开Anaconda。在开始菜单找到刚刚安装好的Anaconda,右键以管理员方式运行。
- 新建环境。新建一个环境,命名为webSafe。该步骤也可以在系统终端cmd窗口采用命令完成。
(2)使用PyCharm新建项目webSafe,并将其运行环境设置为webSafe。 - 打开pycharm,点击File→New Project。
- 选择项目路径,以及选择webSafe环境
1 python的输出
1.1 c语言与python语言比较
下面我们分别用c语言和python语言分别编写
实例:输出 hello 的程序来体会上面一句含义。
1.1.1 c语言实现输出hello
我们在Linux操作系统中实现c程序的运行,具体操作步骤如下:
(1)首先新建一个文件test.c,并用vim编辑:vim test.c
,内容如下所示
#include<stdio.h>
int main(){
printf("Hello\r\n");
return 0;
}
//print中的“\r\n”表示换行
(2)对test.c进行编译,输入命令:gcc test.c -o test.out
,其中-o表示输出
(3)运行test.out,输入命令:./test.out
,注意需要进入test.out所在文件夹
1.1.2 python 实现输出hello
采用print()函数,括号中为需要输出的内容:
程序为print("hello")
。
可以看出,同样的一个程序,我们的python只用了一行就实现了。
1.2 使用python输出如下格式的内容
例子:使用python输出如下格式的内容
**************
hello
**************
(1)在PyCharm软件下的webSafe项目下新建一个.py文件,文件名为out.py
(2)编辑下面内容:
print("**************")
print("hello")
print("**************")
(3)保存(Ctrl+S)
(4)运行,右键,然后选择Run 'out'
运行。
(5)运行结果如下,可以发现一条语句一行,这是print()函数默认了换行。我们如何让它不换行呢?
(6)如何让hello前面有空格
- 直接在hello前面加空格,代码内容及运行结果分别如下:
print("**********")
print(" hello")
print("**********")
- 字符串的拼接:print(" "+”hello“),代码内容及运行结果分别如下:
print("**********")
print(" "+"hello")
print("**********")
(7)优化代码:用数字来定义*号的个数,代码内容及运行结果分别如下:
print("*"*10)
print(" "+"hello")
print("*"*10)
1.3 print()函数
(1)使用help(print)
查看print的帮助信息
(2) print()函数:print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
:
- value:print的输出内容
- end=‘\n’:自动换行,若需要关闭自动换行,则参数改为end=“”
列如:print("hello",end="") 取消换行
2 python的输入
2.1 input()函数
python的输入采用input()函数
2.2 实例1
设计一个程序,屏幕上输出
请输入你的名字: allen // allen为用户输入进去的
欢迎allen用户登录 //allen是用户输入进去的,随用户输入而改变
具体步骤如下:
(1)在PyCharm软件下的webSafe项目下新建一个.py文件,文件名为in.py
(2)编辑下面内容,此步骤主要是为了详细讲解思路
- 第一步:简单赋变量,代码内容及运行结果如下。
name = "allen"
print(name)
print("欢迎allen用户登录")
- 第二步:把print语句中的allen用变量替换。使用我们前面学过的字符串相加:
print("欢迎"+name+"用户登录")
。代码内容及运行结果如下。
name = "allen"
print(name)
print("欢迎"+name+"用户登录")
- 第三步:input() 函数实现输入:
变量 = input("字符串")
。注意,input()一般结合变量使用,就是将你在屏幕上输入的值赋给变量,而括号内的内容是显示在屏幕上的,作为提示。
代码内容及运行结果如下:
name = input("请输入你的名字:")
print(name)
print("欢迎"+name+"用户登录")
屏幕会在暂停在这,等待你的输入
这样我们在最开始设想的功能就实现了
我们在具体对其进行分析一下:
变量赋值与input()函数结合时,等号右边的input()函数会先执行,用户在屏幕上的输入结果再赋值给变量。
注:python2的输入(我们前面使用的是python3):使用 raw_input("字符串")
2.3 实例2
屏幕上输出
请输入用户名:lisa
请入密码:123
用户名是lisa密码是123
username = input("请输入用户名:")
password = input("请输入密码:")
print("用户名是"+username+"密码是"+password)
3 运算符
Python支持多种运算符,下表大致按照优先级从高到低的顺序列出了所有的运算符,运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符,我们稍后会陆续讲到其他运算符的使用。
运算符 | 描述 |
---|---|
[], [:] | 下标,切片 |
** | 指数 |
~ , + - | 按位取反, 正负号 |
* , / , %, // | 乘,除,模,整除 |
+, - | 加,减 |
>> , << | 右移,左移 |
& | 按位与 |
^ | |
< = , < , >, >= | 小于等于,小于,大于,大于等于 |
==, != | 等于,不等于 |
is, is not | 身份运算符 |
in, not in | 成员运算符 |
not, or , and | 逻辑运算符 |
= , +=, -=, *=, /=, %=, //= , **=, &=, | 复合赋值运算符 |
说明: 在实际开发中,如果搞不清楚运算符的优先级,可以使用括号来确保运算的执行顺序。
3.1 赋值运算符
赋值运算符应该是最为常见的运算符,它的作用是将右边的值赋给左边的变量。下面的例子演示了赋值运算符和复合赋值运算符的使用。
"""
赋值运算符和复合赋值运算符
Version: 0.1
"""
a = 10
b = 3
a += b # 相当于:a = a + b
a *= a + 2 # 相当于:a = a * (a + 2)
print(a) # 算一下这里会输出什么
3.2 比较运算符和逻辑运算符
比较运算符:有的地方也称为关系运算符,包括==、!=、<、>、<=、>=
,我相信没有什么好解释的,大家一看就能懂,唯一需要提醒的是比较相等用的是==
,请注意这个地方是两个等号,因为**=**是赋值运算符,我们在上面刚刚讲到过,==
才是比较相等的比较运算符。比较运算符会产生布尔值,要么是True要么是False。
逻辑运算符:分别是and、or和not。
- and逻辑运算符。and字面意思是“而且”,所以and运算符会连接两个布尔值,如果两个布尔值都是True,那么运算的结果就是True;左右两边的布尔值有一个是False,最终的运算结果就是False。相信大家已经想到了,如果and左边的布尔值是False,不管右边的布尔值是什么,最终的结果都是False,所以在做运算的时候右边的值会被跳过(短路处理),这也就意味着在and运算符左边为False的情况下,右边的表达式根本不会执行。
- or逻辑运算符。or字面意思是“或者”,所以or运算符也会连接两个布尔值,如果两个布尔值有任意一个是True,那么最终的结果就是True。当然,or运算符也是有短路功能的,在它左边的布尔值为True的情况下,右边的表达式根本不会执行。
- not逻辑运算符。not运算符的后面会跟上一个布尔值,它的作用是得到与该布尔值相反的值,也就是说,后面的布尔值如果是True运算结果就是False,而后面的布尔值如果是False则运算结果就是True。
"""
比较运算符和逻辑运算符的使用
Version: 0.1
"""
flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not (1 != 2)
print('flag0 =', flag0) # flag0 = True
print('flag1 =', flag1) # flag1 = True
print('flag2 =', flag2) # flag2 = False
print('flag3 =', flag3) # flag3 = False
print('flag4 =', flag4) # flag4 = True
print('flag5 =', flag5) # flag5 = False
说明:比较运算符的优先级高于赋值运算符,所以flag0 = 1 == 1
先做1 == 1
产生布尔值True,再将这个值赋值给变量flag0。print函数可以输出多个值,多个值之间可以用,进行分隔,输出的内容之间默认以空格分开。
4 if条件判断语句
4.1 if语句结构
4.1.1 单分支结构
if 条件:
子语句(子语句一定要有缩进4个空格,条件成立执行)
4.1.2 双分支结构
if 条件:
子语句(子语句一定要有缩进4个空格,条件成立执行)
else:
子语句(当条件不成立的时候才会执行)
4.1.3 多分支结构
if 条件:
子语句(子语句一定要有缩进4个空格,条件成立执行)
elif 条件:
子语句(子语句一定要有缩进4个空格,条件成立执行)
......
else:
子语句(当条件不成立的时候才会执行)
//else不是必须
注:子语句不缩进,就会报错
4.2 实例
在PyCharm软件下的webSafe项目下新建一个.py文件,文件名为if.py
4.2.1 and应用:
实例要求:屏幕上输出
请输入用户名:tom
请入密码:123
要求如果用户输入的用户名不是tom或者密码不是123
报用户名或密码有误
代码内容如下:
username = input("请输入用户名:")
password = input("请输入密码:")
if username == "tom" and password == "123":
print("欢迎"+username)
else:
print("您输入的用户名或密码有误"
运行结果如下:
4.2.2 or实例:
if 3 > 4 or 4 < 5:
print("yes")
else:
print("no")
运行结果为:yes
4.2.3 not实例:
if not (3 > 4) :
print("yes")
else:
print("no")
运行结果为:yes
4.2.4 多分支实例
小练习:成绩判断
请输入你的成绩:69(此成绩为用户输入)
判断标准:
0-59 输出不及格
60-69 及格
70-79 中
80-89 良
90-100 优秀
代码如下:
print("成绩判断")
num = int(input("请输入你的成绩:"))
if num >= 0 and num < 60:
print("不及格")
elif num>=60 and num < 70:
print("及格")
elif num>=70 and num < 80:
print("中")
elif num>=80 and num < 90:
print("良")
elif num>=90 and num <= 100:
print("优秀")
else:
print("请输入0~100以内的成绩")
注意,无论input()输入什么,均默认其数据类型为字符串。
运行结果如下:
5 变量和数据类型
5.1 数据类型
在程序设计中,变量是一种存储数据的载体。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被读取和修改,这是所有计算和控制的基础。计算机能处理的数据有很多种类型,除了数值之外还可以处理文本、图形、音频、视频等各种各样的数据,那么不同的数据就需要定义不同的存储类型。Python中的数据类型很多,而且也允许我们自定义新的数据类型(这一点在后面会讲到),我们先介绍几种常用的数据类型。
(1)整型:Python中可以处理任意大小的整数(Python 2.x中有int
和long
两种类型的整数,但这种区分对Python来说意义不大,因此在Python 3.x中整数只有int
这一种了),而且支持二进制(如0b100,换算成十进制是4)、八进制(如0o100,换算成十进制是64)、十进制(100)和十六进制(0x100,换算成十进制是256)的表示法。
(2)浮点型:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如123.456)之外还支持科学计数法(如1.23456e2)。
(3)字符串型:字符串是以单引号或双引号括起来的任意文本,比如’hello’和"hello",字符串还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)。
(4)布尔型:布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来(例如3 < 5会产生布尔值True,而2 == 1会产生布尔值False)。
(5)复数型:形如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j。实际上,这个类型并不常用,大家了解一下就可以了。
5.2 变量命名
对于每个变量我们需要给它取一个名字,就如同我们每个人都有属于自己的响亮的名字一样。在Python中,变量命名需要遵循以下这些必须遵守硬性规则和强烈建议遵守的非硬性规则。
(1)硬性规则:
- 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。
- 大小写敏感(大写的a和小写的A是两个不同的变量)。
- 变量名不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。
(2)PEP 8要求:
- 用小写字母拼写,多个单词用下划线连接。
- 受保护的实例属性用单个下划线开头(后面会讲到)。
- 私有的实例属性用两个下划线开头(后面会讲到)。
当然,作为一个专业的程序员,给变量(事实上应该是所有的标识符)命名时做到见名知意也是非常重要的。
(3)注意1: 关键字
查看python的关键字:输入如下代码:
import keyword
print(dir(keyword))
print(keyword.kwlist)
即可以看到python的关键字如下:
[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
(4)注意2:如何区分内建函数
- 颜色 在使用我们的python编译器编写时,内建函数呈现紫色
- 查看官方的帮助手册
内建函数作为变量的后果,这个函数就不能使用了,例如,当运行如下代码时,运行结果出现错误。可以使用del(type)来还原。
name = "lisa"
type = 123
type(name)
5.3 变量的简单使用
5.3.1 使用变量保存数据并进行加减乘除运算
下面通过几个例子来说明变量的类型和变量使用。
"""
使用变量保存数据并进行加减乘除运算
Version: 0.1
"""
a = 321
b = 12
print(a + b) # 333
print(a - b) # 309
print(a * b) # 3852
print(a / b) # 26.75
5.3.2 使用type()检查变量的类型
在Python中可以 使用type()
函数对变量的类型进行检查。 程序设计中函数的概念跟数学上函数的概念是一致的,数学上的函数相信大家并不陌生,它包括了函数名、自变量和因变量。如果暂时不理解这个概念也不要紧,我们会在后续的章节中专门讲解函数的定义和使用。
"""
使用type()检查变量的类型
Version: 0.1
"""
a = 100
b = 12.345
c = 1 + 5j
d = 'hello, world'
e = True
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'complex'>
print(type(d)) # <class 'str'>
print(type(e)) # <class 'bool'>
5.3.3 转化变量类型
可以使用Python中内置的函数对变量类型进行转换。
- int():将一个数值或字符串转换成整数,可以指定进制。
- float():将一个字符串转换成浮点数。
- str():将指定的对象转换成字符串形式,可以指定编码。
- chr():将整数转换成该编码对应的字符串(一个字符)。
- ord():将字符串(一个字符)转换成对应的编码(整数)。
下面的代码通过键盘输入两个整数来实现对两个整数的算术运算。
"""
使用input()函数获取键盘输入(字符串)
使用int()函数将输入的字符串转换成整数
使用print()函数输出带占位符的字符串
Version: 0.1
"""
a = int(input('a = '))
b = int(input('b = '))
print('%d + %d = %d' % (a, b, a + b))
print('%d - %d = %d' % (a, b, a - b))
print('%d * %d = %d' % (a, b, a * b))
print('%d / %d = %f' % (a, b, a / b))
print('%d // %d = %d' % (a, b, a // b))
print('%d %% %d = %d' % (a, b, a % b))
print('%d ** %d = %d' % (a, b, a ** b))
说明:上面的print函数中输出的字符串使用了占位符语法,其中%d是整数的占位符,%f是小数的占位符,%%表示百分号(因为百分号代表了占位符,所以带占位符的字符串中要表示百分号必须写成%%),字符串之后的%后面跟的变量值会替换掉占位符然后输出到终端中,运行上面的程序,看看程序执行结果就明白啦。
5.3.4 字符串变量的索引值
(1)引言
ans = input("您是否想喝咖啡yes/no:")
if "yes" in ans: #判断ans变量中是否包含yes
print("制作咖啡")
elif ans == "no":
print("随时恭候")
(2)字符串变量的索引实例:
astr = "python"
print(astr[5]) #取变量脚标为5的字符串
print(astr[0:2]) #变量[脚标的起始位置:脚标的结束位置] 显示结束位置之前的内容才会被显示,不包含脚标结束位置
#print(astr[6]) 报错
print(astr[0:1000]) #结束位可为超过其字符串长度的任意值,表示获取全部字符串
print(astr[0:1000:2]) #变量[脚本的起始位置:脚标的结束位置:步长值],当不写步长值,默认为1
print(astr[-1]) #取最后一位,负号表示从后开始取
#print(astr[-1:-4]) 报错
print(astr[-1:-1000:-1]) #反向取值,注意,一定要写步长值,不然默认为1
print(astr[:])#表示从头取到尾,步长值默认为1
print(astr[::-1])#步长值为1
5.5 变量的其他赋值类型
变量的赋值类型除了字符串、整数以外,其赋值类型还有列表、元组、字典。
5.5.1 列表
(1)介绍: 在 []中括号写入多个不同类型的数据,每个值直接用逗号分隔,每个数据均有索引值,从0开始(支持脚标取值)。如下,
(2)实例:
- 要求:输入用户名的时候,可以输入tom jerry,tom密码为123 ;jerry密码为456,符合这个条件才登录成功。
- 代码如下:
username = input("请输入用户名:")
password = input("请输入密码:")
userlist = ["tom", "jerry"]
passlist = ["123", "456"]
if username in userlist and password in passlist:
print("欢迎"+username)
else:
print("您输入的用户名或密码有误")
- 运行结果如下:
5.5.2 元组
介绍:在 ()小括号写入多个不同类型的数据,每个值直接用逗号分隔,每个数据均有索引值,从0开始(支持脚标取值)。元组特点基本与列表类似
实例:
前面的例子也可用元组实现。
- 代码如下:
username = input("请输入用户名:")
password = input("请输入密码:")
userlist = ["tom", "jerry"]
passlist = ["123", "456"]
if username in userlist and password in passlist:
print("欢迎"+username)
else:
print("您输入的用户名或密码有误")
- 运行结果如下:
5.5.3 字典
介绍:在{} 写入多个数据,是一组一组的键值对["key":"vlaue"]
,各组键值对之间用逗号分割。注意,字典没有索引值, 用键值来取值 ,如下所示。
实例:
对于前面的例子,我们会发现它存在着一个严重的bug:即只要你输入列表中存在的用户名和列表中存在的密码,且他们不相互对应,系统也会判定成功,我们使用字典可以很有效的解决这个问题
- 代码如下:
username = input("请输入用户名:")
password = input("请输入密码:")
userdict = {"tom":"123","jerry":"456"}
if username in userdict and password == userdict[username]:
print("欢迎"+username)
else:
print("您输入的用户名或密码有误")
#注意,xxx in userdict用于判断xxx是否是userdict字典的键,而键值需要根据键来取值。
- 运行结果如下:`
5.6 变量不同赋值类型的属性
主要介绍整型、字符串、元组、列表、字典等的属性。
5.6.1 整型
(1)查看整型变量的属性
为了查看整型变量的属性,运行如下代码:
inta = 10
print(type(inta)) #查看变量inta的数据类型
print(dir(inta)) #dir()函数为查看变量的属性
运行结果如下:
<class 'int'>
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
其中第2行 就是int型的全部属性,你也可以理解为这些都是可调用的函数,如果读者接触过面向对象的程序语言,其实属性也有面向对象的概念在里面,int类型就相当与一个类,里面封装有很多函数可以调用。
(2)简单介绍几个属性
- 1)
__doc__
属性
在上述属性中,有一个__doc__的属性,输入代码print(inta.__doc__)
调用变量inta的__doc__属性。如下所示,从下图可以看出_doc__代表的是描述,主要描述该数据类型的特点。
- 2)
bit_length
属性。注意,bit_length
本身为函数
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(inta.bit_length))
,执行结果如下
②我们来看一下bit_length
属性的效果,输入代码print(inta.bit_length())
,运算结果如下,其中4代表该变量值的二进制位数(12的二进制表示为0b1100)。
上面还有很多,我在这就不一一赘述了,读者可以通过help()函数了解相关用法,再去应用它们
5.6.2 字符串
(1)查看整型变量的属性
为了查看字符串变量的属性,运行如下代码:
stra = "Python"
print(type(stra))
print(dir(stra))
运行结果如下:
<class 'str'>
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
(2)简单介绍几个属性
- 1)
__doc__
属性
在上述属性中,有一个__doc__的属性,输入代码print(stra.__doc__)
调用变量stra的__doc__属性。如下所示,从下图可以看出_doc__代表的是描述,主要描述该数据类型的特点。
- 2)
lower
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(stra.lower))
,执行结果如下
②我们来看一下lower
属性的效果,输入代码print(stra.lower())
,运算结果如下,将变量stra的值全转小写
- 3)
upper
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(stra.upper))
,执行结果如下
②我们来看一下upper
属性的效果,输入代码print(stra.upper())
,运算结果如下,将变量stra的值全转大写
- 4)
split
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(stra.split))
,执行结果如下
②我们来看一下split
属性的效果,输入代码print(stra.split("t"))
,运算结果如下,以括号内字符为分隔符,切割字符串
5.6.3 元组
元组中的值不可变的。
(1)查看整型变量的属性
为了查看元组变量的属性,运行如下代码:
tuplea = ("tom","jerry")
print(type(tuplea))
print(dir(tuplea))
运行结果如下:
<class 'tuple'>
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
(2)简单介绍几个属性
- 1)
index
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(tuplea.index))
,执行结果如下
②我们来看一下index
属性的效果,输入代码print(tuplea.index("jerry"))
,运算结果如下,index为查看某元素的第一个索引值。
5.6.4 列表
列表中的值可变。
(1)查看整型变量的属性
为了查看元组变量的属性,运行如下代码:
lista = ["tom","jerry"]
print(type(lista))
print(dir(lista))
运行结果如下:
<class 'list'>
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
(2)简单介绍几个属性
- 1)
index
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(lista.index))
,执行结果如下
②我们来看一下index
属性的效果,输入代码print(lista.index("tom"))
,运算结果如下,index为查看某元素的第一个索引值。
- 2)
append
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(lista.append))
,执行结果如下。append属性为追加,即在列表的后面追加元素。
②我们来看一下append
属性的效果,输入代码print(lista.append("bob"))
以及print(lista)
,运算结果如下,在列表的后面追加了"bob"。
5.6.5 字典
字典中的值可变。
(1)查看整型变量的属性
为了查看元组变量的属性,运行如下代码:
dicta = {"tom":"123","jerry":"456"}
print(type(dicta))
print(dir(dicta))
运行结果如下:
<class 'dict'>
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
(2)简单介绍几个属性
- 1)
keys
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(dicta.keys))
,执行结果如下。keys为查看字典中的键。
②我们来看一下keys
属性的效果,输入代码print(dicta.keys())
,运算结果如下,index为查看某元素的第一个索引值。
- 2)
values
属性
①我们通过help()函数了解其详细的用法介绍,输入代码print(help(dicta.values))
,执行结果如下。values为查看字典中的键值。
②我们来看一下values属性的效果,输入代码
print(dicta.values())`,运算结果如下,index为查看某元素的第一个索引值。
6 循环语句
6.1 while 循环
6.1.1 while 循环语句结构
while 条件:
子语句
#当条件满足时,子语句执行
6.1.2 小游戏:猜数字
(1)猜数字游戏规则如下:
————————————————————————————————————————————————————————
- 程序可以取出一个100以内的随机整数
- 用户输入一个数字
- 用户输入的数字与程序自动生成的数字进行比较,若用户输入的过大,则屏幕显示“你猜大了”;若偏小,则屏幕显示“你猜小了”;若猜对了,则屏幕显示“恭喜你猜对了”
- 用户可以猜10次
————————————————————————————————————————————————————————
(2)代码如下
import random #调用random模块
c_choice = random.randint(1,100) #取[1, 100]的随机整数
num=0
while num < 10:
num = num+1
p_choice = int(input("请输入100以内的整数:"))
if p_choice > c_choice:
print("你猜大了")
elif p_choice < c_choice:
print("你猜小了")
else:
print("恭喜你猜对了")
(3)运行结果如下
6.1.3 break和continue子语句
(1)break子语句
break:结束循环体
break实例:
6.1.2节小游戏的代码有一个bug,当猜对时,还得继续猜,直到10次循环结束为止。那么是否可以,当猜对时,结束循环呢?
对6.1.2节小游戏的代码改进如下:
import random #调用random模块
c_choice = random.randint(1,100) #取[1, 100]的随机整数
num=0
while num < 10:
num = num+1
p_choice = int(input("请输入100以内的整数:"))
if p_choice > c_choice:
print("你猜大了")
elif p_choice < c_choice:
print("你猜小了")
else:
print("恭喜你猜对了")
break #增加了break子语句,立即跳出循环
运行结果如下
(2)continue子语句
continue:跳过本次循环,继续下一次循环
continue实例
#1到10的偶数和
num = 0
sum = 0
while num < 10:
num += 1 #num = num + 1 <=> num ++ <=> num += 1
if num % 2 :
continue #coninue下面的语句不执行,跳到下一次循环
sum += num
print(sum)
1到10的偶数和为:
6.2 for循环
根据变量赋值的次数进行循环
for循环的结构:
for i in 类型:
子语句
6.2.1 for循环变量赋值为字符串
for i in "python": #字符串
print("hello"+" "+ i)
6.2.2 for循环变量赋值为列表
for i in ["tom","jerry","bob"]: #列表
print("hello"+" "+ i)
6.2.3 for循环变量赋值为元组
for i in ("tom","jerry","bob"): #元组
print("hello"+" "+ i)
6.2.4 for循环变量赋值为字典
输出的是键
for i in {"tom":"123","jerry":"456","bob":"789"}: #字典
print("hello"+" "+ i)
如何输出键值
adict = {"tom":"123","jerry":"456","bob":"789"}
for i in adict: #字典
print("hello"+" "+ adict[i])
6.2.5 for循环变量赋值为数字
(1)直接这样写,会报错
for i in 10:
print("hello"+" "+ i)
(2)我们引入range()
for i in range(10):
print("hello"+" "+ str(i))
那么我们如何让它不从0开始,而是我们自己设定?
我们先通过help()函数查看range()函数的相关用法,如下
for i in range(1,11):
print("hello"+" "+ str(i))
实例:
#1到10偶数求和
sum = 0
for i in range(1,11):
if i % 2:
continue
sum += i
print(sum)
#1到10奇数求和
sum = 0
for i in range(1,11):
if not(i % 2):
continue
sum += i
print(sum)