动态类型
程序运行过程中,变量的类型可能会发生改变
a = 'hello' print(a) a = 10 print(a) #运行结果 hello 10
- 在程序执行过程中,
a
的类型刚开始是int
,后面变成了str
C++
/Java
这样的语言则不允许这样的操作,一个变量定义后类型就是固定的了。这种特性则称为 “静态类型”,如果尝试修改静态类型的类型,变异阶段就会报错
一个编程语言,是否是动态类型,只是取决于运行时,类型是否发生改变,而不取决于变量定义的时候是否声明类型
在 python
中,也可以进行类型声明,不过不写也不影响什么:
a:str = 'hello' print(a) a:int = 10 print(a)
优劣
动态写法比较灵活,提高了语法的表达能力,然而,在编程中,“灵活”是一个贬义词,更容易出错。相比之下,静态类型的语言还是更好一些,尤其是在大型的程序中,多人协作发开的程序中
因此很多公司,在创业之初,喜欢用 Python 来开发,产品规模小,也就是一两个程序猿,很快就能搞出来。但是当项目到达一定规模之后,动态类型的劣势就逐渐体现出来了,很多公司就会针对之前 Python 写的代码使用其他语言进行重构
动态类型特性是一把双刃剑:
- 对于中小型程序,可以大大的减少代码量(比如写一段代码就可以同时支持多种类型)
- 对于大型程序,则提高了模块之间的交互成本(程序猿 A 提供的代码难以被 B 理解)
输入输出
和用户交互
程序需要和用户进行交互
- 用户把信息传递给程序的过程,称为 “输入”
- 程序把结果展示给用户的过程,称为 “输出”
输入输出的最基本的方法就是控制台。用户通过控制台输入一些字符串,程序再通过控制台打印出一些字符串
对于机械操作的面板,就叫“控制台”,控制台上会有一些按钮,开关,操作杆… 后来有了计算机之后,控制台的概念也就延续下来了,只不过计算机是通过键盘鼠标等进行操作,把操作结果显示到屏幕上
计算机里,就把用户能输入命令,向计算机安排工作,计算机再把结果显示出来,这样的程序就称为“控制台”
PyCharm
运行程序时,下方弹出的窗口就可以视为控制台:
Windows
自带的 cmd
程序,也可以视为是控制台
控制台是一种人和计算机交互的最基础方式
但是日常生活中却不常用,更常见的交互方式是“图形化界面”
但是图形化界面的程序编写并不容易,我们还是使用控制台的方式来与计算机进行交互
基于控制台输出
Python
使用 print
函数输出到控制台:
print('hello')
格式化字符串
将字符串与数据进行拼接打印:
a = 10 print(f"a = {a}") # 输出结果 a = 10
- 这个语法,叫做“格式化字符串”,
f- string
,此处的f
是 “format
““ - 此时,就可以使用{ }这样的语法,王字符串里嵌入变量或者表达式
a = 10 print(f"a = {a + 10}") #输出结果 a = 20
像格式化打印字符串,很多编程语言都进行了各自的探索
C
,printf 使用%d
,%s
这样的占位符C++
,采用了std:: cout
,使用<<
Java
,采用字符串拼接,允许字符串和其他类型的值进行拼接Python
最早支持的格式化字符串,也是效仿C
的printf
,做出了改进。直到Python
3.6 版本才开始支持f-string
通过控制台输入
python
使用 input
函数,从控制台读取用户的输入
num = input('请输入一个整数: ') print(type(num)) print(f'你输入的整数是 {num}') #输出结果 请输入一个整数: 10 <class 'str'> 你输入的整数是 10
input
执行的时候,就会等待用户输入
- 这个等待可能是一个非常长的等待,完全就看用户什么时候去输入
- 如果用户始终不输入,就会一直在这里死等,不见不散~
input
的返回值,其实是一个 str
- 如果只是单纯的拿到用户的输入,然后打印,此时就按照
str
打印即可 - 如果需要根据用户输入的内容进行算术计算,此时就需要先把读到的
str
转换成int
a = input('请输入第一个整数') b = input('请输入第二个整数') print(f'a + b = {a + b}') #输出结果 请输入第一个整数4 请输入第二个整数5 a + b = 45
进行类型转后之后:
a = input('请输入第一个整数') b = input('请输入第二个整数') a = int(a) b = int(b) print(f'a + b = {a + b}') #输出结果 请输入第一个整数4 请输入第二个整数5 a + b = 9
条件语句
什么是条件语句
条件语句能够表达 “如果 … 否则 …” 这样的语义. 这构成了计算机中基础的逻辑判定
条件语句也叫做分支语句,表示了接下来的逻辑可能有几种走向
如果,我认真敲代码,我就很容易找到工作;
- 这是一个条件,如果条件成立,就会容易找到工作
否则,我就容易毕业就失业 - 条件不成立,就容易毕业就失业
条件语句,就是根据一个具体条件的成立与否,来决定接下来的逻辑走向
语法格式
Python
中使用 if
else
关键字表示条件语句
(1)if
if expression: do_something1 do_something2 next_something
- 如果
expression
值为True
, 则执行do_something1
,do_something2
,next_something
- 如果
expression
值为False
, 则只执行next_something
, 不执行do_something1
,do_something2
(2)if-else
if expression: do_something1 else: do_something2
- 如果
expression
值为True
, 则执行do_something1
- 如果
expression
值为False
, 则执行do_something2
(3)if - elif - else
if expression1: do_something1 elif expression2: do_something2 else: do_something3
- 如果
expression1
值为True
, 则执行do_something1
- 如果
expression1
值为False
, 并且expression2
为True
则执行do_something2
- 如果
expression1
值为False
, 并且expression2
为False
则执行do_something3
注意: Python
中的条件语句写法, 和很多编程语言不太一样
if
后面的条件表达式, 没有 ( ), 使用 : 作为结尾if / else
命中条件后要执行的 “语句块”, 使用缩进 (通常是 4 个空格或者 1 个 tab)来表示, 而不是 { }- 对于多条件分支, 不是写作
else if
, 而是elif
(合体了)
示例: 输入 1 表示愿意认真学习, 输入 2 表示躺平摆烂 `
choice = input('输入 1 表示认真学习,输入 2 表示躺平') if choice == '1': print(('你能找到工作')) elif choice == '2': print('你废了') else: print('输入错误')
- 注意
if
、elif
和else
后面都有:
缩进和代码块
在 Python
中使用缩进表示代码块. 不同级别的缩进, 程序的执行效果是不同的
a = input('输入第一个整数:') b = input('输入第一个整数:') if a == '1': if b == '2': print('aaa') print('bbb') print('ccc') #运行结果 输入第一个整数:1 输入第一个整数:2 aaa bbb ccc
- 两个条件都满足才会打印
aaa
,因为打印aaa
的语句有两级缩进,相当于是if b == '2'
条件内部的代码块 - 第一个条件满足,就会打印
bbb
,因为打印bbb
的语句只有一级缩进,相当于是if a== '1'
条件内部的代码块 - 两个条件即使都不满足,也能打印
ccc
,因为打印ccc
的语句,没有缩进,相当于和两个if
都无关
当前有多级嵌套的时候,当前的雨具属于哪个代码块,完全取决于缩进的级别
空语句
pass
表示空语句, 并不会对程序的执行有任何影响, 只是占个位置, 保持 Python
语法格式符合要求.
a = int(input("请输入一个整数:")) if a != 1: pass else: print("hello")
- 虽然希望条件满足的时候,什么都不做,但是由于
Python
对于语法格式,尤其是缩进和代码块要求较高,所以如果什么都不写,是不符合语法要求的,所以必须得写一个pass
空语句来占位
练习
1. 输入一个整数,判断是否是奇数
a = int(input('输入一个整数')) if a % 2 == 1: print(f'{a} 是一个奇数') else: print(f'{a} 不是一个奇数')
- 这串代码在
C++/Java
是不太行的,因为在那边-19 % 2 == -1
,和1
是不相等的。但在Python
中,-19 % 2 == 1
2. 输入一个整数,判断是正数还是负数
a = int(input('输入一个整数')) if a > 0: print(f'{a} 是正数') elif a < 0: print(f'{a} 是负数') else: print(f'{a} 是 0')
3. 判断年份是否是闰年
每隔 4 年润一次;如果是世纪闰年,得看能否被 400 整除
year = int(input('输入一个年份')) if year % 100 == 0: # 世纪闰年的判定 if year % 400 == 0: print('闰年') else: print('平年') else: # 普通闰年的判定 if year % 4 == 0: print('闰年') else: print('平年')