S1 Python 基础
定义规范
声明变量
name = "Alex Li"
变量定义规则
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
定义方式
驼峰体
AgeOfOldboy = 56
NumberOfStudents = 80
下划线
age_of_oldboy = 56
number_of_students = 80
你觉得哪种更清晰,哪种就是官方推荐的,我想你肯定会先第2种,第一种AgeOfOldboy咋一看以为是AngelaBaby
变量的修改
。。。。
定义变量不好的方式举例
- 变量名为中文、拼音
- 变量名过长
- 变量名词不达意
常量
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量
在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
AGE_OF_OLDBOY = 56
在c语言中有专门的常量定义语法,const int count = 60;
一旦定义为常量,更改即会报错
基本数据类型
什么是数据类型?
对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中常用的数据类型有多种,今天我们暂只讲3种, 数字、字符串、布尔类型
数字
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64 >>> type(a) #type()是查看数据类型的方法 <type 'long'> >>> b = 2**60 >>> type(b) <type 'int'>
除了int和long之外, 其实还有float浮点型, 复数型
字符串
在Python中,加了引号的字符都被认为是字符串!
那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合 msg = "My name is Alex , I'm 22 years old!" 多引号什么作用呢?作用就是多行字符串必须用多引号 msg = ''' 今天我想写首小诗, 歌颂我的同桌, 你看他那乌黑的短发, 好像一只炸毛鸡。 ''' print(msg)
字符串拼接
数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。 >>> name 'Alex Li' >>> age '22' >>> >>> name + age #相加其实就是简单拼接 'Alex Li22' >>> >>> name * 10 #相乘其实就是复制自己多少次,再拼接在一起 'Alex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex Li' 注意,字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接 >>> type(name),type(age2) (<type 'str'>, <type 'int'>) >>> >>> name 'Alex Li' >>> age2 22 >>> name + age2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects #错误提示数字 和 字符 不能拼接
布尔型
布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断
但其实你们并不明白对么? let me explain, 我现在有2个值 , a=3, b=5 , 我说a>b你说成立么? 我们当然知道不成立,但问题是计算机怎么去描述这成不成立呢?或者说a< b是成立,计算机怎么描述这是成立呢? 没错,答案就是,用布尔类型 >>> a=3 >>> b=5 >>> >>> a > b #不成立就是False,即假 False >>> >>> a < b #成立就是True, 即真 True 计算机为什么要描述这种条件呢?因为接下来就可以根据条件结果来干不同的事情啦呀!比如 if a > b print(a is bigger than b ) else print(a is smaller than b ) 上面是伪代码,但是不是意味着, 计算机就可以根据判断结果不同,来执行不同的动作啦?
格式化输出
现有一练习需求,问用户的姓名、年龄、工作、爱好 ,然后打印成以下格式 ------------ info of Alex Li ----------- Name : Alex Li Age : 22 job : Teacher Hobbie: girl ------------- end ----------------- 你怎么实现呢?你会发现,用字符拼接的方式还难实现这种格式的输出,所以一起来学一下新姿势 只需要把要打印的格式先准备好, 由于里面的 一些信息是需要用户输入的,你没办法预设知道,因此可以先放置个占位符,再把字符串里的占位符与外部的变量做个映射关系就好啦 name = input("Name:") age = input("Age:") job = input("Job:") hobbie = input("Hobbie:") info = ''' ------------ info of %s ----------- #这里的每个%s就是一个占位符,本行的代表 后面拓号里的 name Name : %s #代表 name Age : %s #代表 age job : %s #代表 job Hobbie: %s #代表 hobbie ------------- end ----------------- ''' %(name,name,age,job,hobbie) # 这行的 % 号就是 把前面的字符串 与拓号 后面的 变量 关联起来 print(info) %s就是代表字符串占位符,除此之外,还有%d,是数字占位符, 如果把上面的age后面的换成%d,就代表你必须只能输入数字啦 age : %d 我们运行一下,但是发现出错了。说%d需要一个数字,而不是str, what? 我们明明输入的是数字呀,22,22呀。 不用担心 ,不要相信你的眼睛我,们调试一下,看看输入的到底是不是数字呢?怎么看呢?查看数据类型的方法是什么来着?type() name = input("Name:") age = input("Age:") print(type(age)) 执行输出是 Name:Alex Age:22 <class 'str'> #怎么会是str Job:IT .... 让我大声告诉你,input接收的所有输入默认都是字符串格式! 要想程序不出错,那怎么办呢?简单,你可以把str转成int age = int( input("Age:") ) print(type(age)) 肯定没问题了。相反,能不能把数字转成字符串呢?必然可以,str( yourStr )
%s ,%d 占位符
input 接受输入的都是字符串str
基本运算符
运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
算数运算
以下假设变量:a=10,b=20
比较运算
以下假设变量:a=10,b=20
赋值运算
以下假设变量:a=10,b=20
逻辑运算
练习答案
1.简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型. 答: 编译型语言: 使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。 特点: 在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件. 执行方式: 源代码 ———> 编译(一次编译) ———>目标代码———>执行(多次执行)———>输出 解释型语言: 使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。 特点: 解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。 执行方式: 源代码 ———> 解释器(每次执行都需要解释)———>输出 编译型: C c++, c# 解释型: python PHP ruby, java 执行 Python 脚本的两种方式是什么 答: 1、./run.py.shell直接调用python脚本 2、python run.py 调用python 解释器来调用python脚本 Pyhton 单行注释和多行注释分别用什么? 答: 1, 单行注释使用 # 号 2, 多行注释使用 “”“”“” ‘’‘’‘’ 布尔值分别有什么? 答: 布尔值分别有:True 和False 布尔值为False的有:[] () {} 0 False "" 等 声明变量注意事项有那些? 答案: 模块名,包名 :小写字母, 单词之间用户_分割。 类名:首字母大写。 全局变量: 大写字母, 单词之间用户_分割。 普通变量: 小写字母, 单词之间用户_分割。 函数: 小写字母, 单词之间用户_分割。 实例变量: 以_开头,其他和普通变量一样 。 私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。 专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。 如何查看变量在内存中的地址? id 写代码 实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败! 实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次 实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次 username = ['seven','Alex'] password = '123' count = 0 while count < 3: username = input('用户名:') password = input('密码:') if username in username and password == password: print('登陆成功!') break else: print('登陆失败!') count += 1 写代码 a. 使用while循环实现输出2-3+4-5+6...+100 的和 ``` 答: i = 2 count = 0 while i <= 100: if i % 2 == 0: count += i else: count -= i i += 1 print(count) ``` b. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 ``` 答: n1 = True n2 = 1 while n1: if n2 == 12: print(n2) break if n2 == 6 or n2 == 10: n2 += 1 continue print(n2) n2 += 1 ``` c. 使用while 循环输出100-50,从大到小,如100,99,98...,到50时再从0循环输出到50,然后结束 ``` count =100 while count > 50: print(count) count -=1 if count==50: count=1 while count<=50: print(count) count+=1 break ``` d. 使用 while 循环实现输出 1-100 内的所有奇数 ``` count =0 while count <=100: if count %2!=0: print(count) count +=1 ``` e. 使用 while 循环实现输出 1-100 内的所有偶数 ``` count =0 while count <=100: if count %2==0: print(count) count +=1 ``` 现有如下两个变量,请简述 n1 和 n2 是什么关系? n1 = 123456 n2 = n1 制作趣味模板程序(编程题) 需求:等待用户输入名字、地点、爱好,根据用户的名字和爱好进行任意显示 如:敬爱可爱的xxx,最喜欢在xxx地方干xxx 答案: name = input("请输入姓名:") address = input("请输入地点:") hobby = input("请输入爱好:") print("敬爱可爱的 %s, 最喜欢在%s地方干%s" % (name, address, hobby)) 输入一年份,判断该年份是否是闰年并输出结果。(编程题) 注:凡符合下面两个条件之一的年份是闰年。 (1) 能被4整除但不能被100整除。 (2) 能被400整除。 答案: def get_year(): year = int(input("请输入年份:")) if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: print("%s 年是闰年" % year) else: print("%s 年不是闰年" % year) get_year() 假设一年期定期利率为3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?(编程题) money = 10000 rate = 0.0325 years = 0 while money <= 20000: years += 1 money = money*(1+rate) print(str(years)) 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? count = 0 height = 100 meter = 0 while count < 10: meter += height #下落 height /= 2 meter += height #反弹 count +=1 print(meter,height)