2.x 输出 print "Hello World!"3+ 是 print("Hello World!")
if i == 0:print("零")i = -1elif i > 0:print('正数')elif i < 0:print('负数')else:print("不清楚")
其中 i 是个变量,类似一个占位符。就像方程 ax+b = 0 中的 a、b,可以代入任意在其取值范围内的值。‘==’ 是判断是否相等的计算符,相等则计算结果为真(True),不相等则为假(False)。如果 i = 0,一个 '=' 是赋值,让 i 代入 0,则输出‘零’。如果 i ≠ 0,开始判断第一个 elif (else if),到最后如果两个 elif 都不满足,就 else 兜底,输出‘不清楚’。Java 中可以用 else if,也可以用switch case,不过要根据分支数选择性使用。
可以看到,如果 i = 0,在输出‘零’后,i 又被赋值为 -1。但此时已经走入了 i == 0 分支。所以即使此时 i < 0,也不会再顺序进行后续的判断,整个分支代码块结束。这就是分支与顺序执行的区别。
另外,与Java 在 if 的作用范围有多行语句时使用'{}'不同。Python 使用缩进来区分作用范围。例如:
'''注释开始分支判断判断条件是 i 是否等于 0注释结束'''if i == 0:# 输出零 (注释行)print("零")i = -1else:i = 1print("不清楚")
因为 print ("不清楚") 前的缩进与分支相同。当 i = 0 时,就会顺序的输出:
零不清楚
其中,# 和 ''' 都是用于注释说明的,不会被当做语句执行。# 是单行注释,只有 # 同一行的后续字符会被当做注释。而 ''' ...''' 是多行注释,在两个 ''' 之间的所有内容都会被当做注释。
另外,Python 在一行语句结束时是没有结束标记的。相对的,如果一行写不下,可以用 '\' 表示下一行和这一行是同一行内容。如:
i = 1 + \2 + \3
经过加法(+)运算,上面语句最终 i 被赋值为 6。
这里的 i 可以接受计算后的赋值,它的数据类型就是数值类型。数值常用于计算的有整形 int 和浮点型 float,一个是整数,一个是带小数的。Python 3 之后就没有其他语言中的长整形了。还有一个用于逻辑判断的布尔类型 bool,通常表示真假,值为 True、Fasle。bool 值在 Python 中实际是 int,可以用于运算,True:1、Fasle:0。BTW,其他很多语言中布尔类型是 bit,好处就是占用空间小,如《检索IP所在网段》就用了这个特性。另外还有复数类型,不过不常用。
上例中的 "不清楚","零"是基本类型中的 string 字符串,也可以用单引号表示如 '零',注意单、双引号都是半角的。字符串有很多截取拼接的方法,之后再讲。例:
char = 't'word = f's{char}ar{char}'print(word)会输出:start
另外,print 也可以不只输出一行,如 print("aaa\nbbb"),会将 aaa 和 bbb 分两行输出。因为 \n 是换行符:
print('\n') 会输出空行如果想输出 \n,可以:
print(r'\n')其中 r 表示 raw,输出原始字符串。'\' 是转义符,常用于一些特定符号,如:
print("双引号: \" 输出")输出:双引号: " 输出
如果不用 \ 转义,就会报错,因为字符串会在 \" 结尾。
③ 循环:可以用 while 和 for 来实现循环。
变量 count 每次循环就增大 1,当 count < 5 这个条件成立时,就会执行循环体。直到 count = 5,执行 else 的逻辑。
count = 0while count < 3:print (count, " 小于 3")count = count + 1else:print (count, " 大于或等于 3")
执行结果:
0 小于 31 小于 32 小于 33 大于或等于 3
sites 是一种集合变量,可保存多个值的变量,这是一个字符串列表(列表的使用方法之后再说)。这个循环就是每次输出 sites 列表中的一个元素,直至全部输出:
sites = ["Baidu", "Google","Runoob","Taobao"]for site in sites:print(site)
BaiduRunoobTaobao
range() 函数经常被用于循环:
# 1 到 5 的所有数字:for number in range(1, 6):print(number)
12345
可使用 break 在循环未完成时,跳出当前循环体。会跳出整个 for 的逻辑,包括 else 的,所以此例的结果输出中,不会有“没有循环数据!”的输出。
sites = ["Baidu", "Google","Runoob","Taobao"]for site in sites:if site == "Runoob":print("菜鸟教程!")breakprint("循环数据 " + site)else:print("没有循环数据!")print("完成循环!")
循环数据 Baidu循环数据 Google菜鸟教程!完成循环!
break 语句可以跳出 for 和 while 的循环体。如:循环条件永远为真(while True:),可通过手动在循环中用break结束循环
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,直接继续进行下一轮循环。如跳过 Runoob:
sites = ["Baidu", "Google","Runoob","Taobao"]for site in sites:if site == "Runoob":continueprint("循环数据 " + site)else:print("没有循环数据!")print("完成循环!")
循环数据 Baidu循环数据 Google循环数据 Taobao完成循环!
for letter in 'Runoob':if letter == 'o':passelse:letter = '+'passprint ('当前字母 :', letter)
当前 : +当前 : +当前 : +当前 : o当前 : o当前 : +
如果没有 pass,这段代码会报错,因为 if 段中没有语句。这种情况多用于,if 中处理逻辑还没设计好,或需求有待商榷。要预留位置,以便开发之后的逻辑。当然 pass 也可以就是单纯为了好看,或者做个标记,如 else 中的 pass。
这个执行结果看起来挺占地方的,也可以输出到一行,在 print 中传 end 参数即可,默认不传的情况下 end 是换行符。如:# Fibonacci series: 斐波纳契数列a, b = 0, 1while b < 1000:print(b, end=',')a, b = b, a+b
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987, 循环列表时,可以使用内置函数enumerate()同时获取索引(元素顺序位置)和值:
enumerate 意为"枚举",表示逐一列举。for i, v in enumerate(list)
fruits = ["苹果", "香蕉", "橙子"]# 获取索引和值for index, fruit in enumerate(fruits):print(f"{index}: {fruit}")
0: 苹果1: 香蕉2: 橙子
fruits = ["苹果", "香蕉", "橙子"]for i, fruit in enumerate(fruits, start=10):print(f"索引 {i}: {fruit}")
索引 10: 苹果索引 11: 香蕉索引 12: 橙子
还有一种特定情况下能达到循环效果的:Python 推导式。它可以从一个数据序列构建另一个新的数据序列的结构体。适用于生成列表、字典、集合和生成器。
multiples = [i for i in range(30) if i % 3 == 0]print(multiples)
输出
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]