#!/usr/bin/python3
'''
Python3.6.x简单教程
示例、注释
交互式和脚本式编程
变量类型
数字(Number)
字符串(String)
列表(List)
元组(Tuple)
字典(Dictionary)
运算符
条件语句
if条件语句
Python中没有switch case语句
循环语句
While循环语句
For循环语句
循环嵌套
Break语句
Continue语句
Pass语句
函数
'''
# 常用python包
# import string 字符串操作
# import math 数学工具
# import os 文件和文件夹操作
# import datetime 日期时间操作
# import random 随机数
# import parser 解析文件
# 其他第三方package
# 了解Python自带工具包,参看《Python标准库》一书
# 示例程序
# print("Hello Python3.6")
# # 查看python版本号
# import sys
# print("Python版本号:",sys.version) # dsfsdsfdsd
# 注释dasdfasdfadsfasdfasdfsadfasdfasdfasdfasdfsadfsdfsadfsadfsadfsadfsdfsadfsadfsadf
# print("该行代码被注释掉了,所以不会打印出来")
# 多行注释
'''
这是python中的多行注释
这是另一行被注释的内容
'''
"""
sdfasdfsa
sdfasdfsa
sdfsadfas
"""
'''
fsdfsd
'''
# 变量赋值
# num = 1
# myname = "jack"
# a,b,c = 1,2,3
#
# d = 9.05
# e = 8
#
# print("myname:",type(myname))
# print("b:",type(b))
#
# print(type(d))
# print(type(e))
#
# myname,b = b,myname
#
# print("myname:",type(myname))
# print("b:",type(b))
#
#
# print("a,b,c的值分别为:",a,b,c)
# 变量数据类型
# 数字类型
# number1 = 1 # int型
# number2 = 10.2 # float型
# number3 = 4654654564645645645 # long型
# number4 = 2 + 3j # 复数
#
# print(number1)
# print(number2)
# print(number3)
# print(number4)
#
# print(type(number1))
# print(type(number2))
# print(type(number3))
# print(type(number4))
# 字符串string
# import string
# myname = "jack"
# address = 'shenzhen'
# print(myname[0])
# print(myname[0:4:3])
# print(myname[1:])
# print(myname * 2)
# print('=' * 20)
# print("我的名字是" + myname)
# print("我的名字是",myname)
# 列表list
# 列表使用[]表示,其中的元素以逗号,隔开,列表是有序集合
# list = ['jack',12,'shenzhen',45,23.34]
# tinylist = ["apple","android"]
# print(type(list))
# print(list)
# print(list[0])
# print(list[1:3])
# print(list * 2)
# print(list + tinylist)
# list[0]='tom'
# print(list)
# 元组tuple
#元组使用()表示,其中的元素也是以逗号,隔开,不过元组不能二次赋值,相当于只读列表,元组是有序集合
# tuple = ('jack',12,'shenzhen',45,23.34)
# tinytuple = ("apple","android")
# print(type(tuple))
# print(tuple)
# print(tuple[0])
# print(tuple + tinytuple)
# 元组值不允许修改,下面代码会报错
# tuple[0] = 'tom'
# 字典dict
#字典使用{}表示,字典有索引key和对应的值value组成,字典值是通过索引来存取的,而非通过偏移来存取
# dict = {}
# dict['name'] = 'jack'
# dict['age'] = 12
# dict['address'] = 'shenzhen'
# dict['hobby'] = 'coding'
# dict[2] = 'demoitem'
# print(type(dict))
# print(dict['name'])
# print(dict.keys())
# print(dict.values())
# print(dict)
# 类型转换
# x = 'a'
# print(int(x))
# float(x)
# str(x)
# tuple(x)
# list(x)
# dict(d)
# 运算符
# 算术运算符
# 比较运算符
# 赋值运算符
# 逻辑运算符
# 位运算符
# 成员运算符
# 身份运算符
# 算术运算符
# + - * / % ** //
# a = 5
# b = 3
# print(a + b)
# print(a - b)
# print(a * b)
# print(a / b)
# print(a % b)
# print(a ** b)
# print(a // b) # 返回商的整数部分
# 比较运算符
# == # 等于
# != # 不等于
# > # 大于
# < # 小于
# >= # 大于等于
# <= # 小于等于
# a = 5
# b = 3
# print(a == b)
# print(a != b)
# print(a > b)
# print(a < b)
# print(a >= b)
# print(a <= b) # 返回商的整数部分
# 赋值运算符
# = 赋值
# += 加法赋值
# -= 减法赋值
# *= 乘法赋值
# /= 除法赋值
# %= 取模赋值
# **= 幂赋值
# //= 取整除赋值
# a = 10
# b = 20
# c = a + b
# c += a
# c = c + a
# c -= a
# c = c - a
# c *= a
# c = c * a
# c /= a
# c = c / a
# c %= a
# c = c % a
# c **= a
# c = c ** a
# c //= a
# c = c // a
# 逻辑运算符
# and
# or
# not
# a = 10
# b = 20
# if (a and b):
# print("变量a和b都是true")
# else:
# print("变量a和b至少有一个不为true")
#
# if (a or b):
# print("变量a和b至少有一个是true")
# else:
# print("变量a和b都不为true")
#
# if (not a):
# print("变量a为false")
# else:
# print("变量a为true")
# 位运算符
# & 按位与
# | 按位或
# ^ 按位异或
# ~ 按位非
# << 左移
# >> 右移
# a = 2 # 000 00100
# b = 4 # 0000 0100
# print("a的二进制值:" + bin(a))
# print("b的二进制值:" + bin(b))
# print("a和b按位与的二进制值:" + bin(a & b))
# print("a和b按位或的二进制值:" + bin(a | b))
# print("a和b按位异或的二进制值:" + bin(a ^ b))
# print("a按位非的二进制值:" + bin(~a))
# print("a左移1位的二进制值:" + bin(a << 1))
# print("a右移1位的二进制值:" + bin(a >> 1))
# 成员运算符
# 成员运算符用来判断某个变量值是否存在于给定的集合中
# in 存在
# not in 不存在
# a = 10
# b = 2
# list = [1,2,3,4,5]
#
# if (not (a in list)):
# print("a的值存在于list中")
# else:
# print("a的值不存在于list中")
#
# if (b in list):
# print("b的值存在于list中")
# else:
# print("b的值不存在于list中")
#
# if (a not in list):
# print("a的值不存在于list中")
# else:
# print("a的值存在于list中")
# 身份运算符
# 用于比较两个对象的存储单元
# is 判断两个标识符是不是引用自一个对象,如果引用自同一个对象(同一个内存单元),则返回true,否则返回false
# is not 判断两个标识符是不是引用自不同对象,如果引用自同一个对象(同一个内存单元),则返回false,否则返回true
# a = 20
# b = 30
# if (a is b):
# print("a和b指向同一个内存单元")
# else:
# print("a和b指向不同内存单元")
#
# print(id(a))
# print(id(b))
# if (a is not b):
# print("a和b指向不同内存单元")
# else:
# print("a和b指向同一个内存单元")
#
# print(id(a))
# print(id(b))
#
# # 修改变量b的值
# b = 'tom'
# if (a is b):
# print("a和b指向同一个内存单元")
# else:
# print("a和b指向不同内存单元")
#
# print(id(a))
# print(id(b))
#
# b = 79
# print(id(b))
#
# if (a is not b):
# print("a和b指向不同内存单元")
# else:
# print("a和b指向同一个内存单元")
#is 和 == 区别
#is 用于判断两个变量引用的对象是否是同一个,==用于判断引用的变量的值是否相等
# 条件语句
# Python中指定任何非0非空(null)的值为true,0或者null为false
# if 判断条件:
# 执行符合该条件下的语句
# else:
# 执行其他语句
# a = 10
# if (a > 20):
# print("a大于20")
# else:
# print("a不大于20")
#
# gender = 'F'
# if (gender == 'F'):
# print("此人为女生")
# else:
# print("此人为男生")
# if 判断条件1:
# 执行符合条件1下的语句
# elif 判断条件2:
# 执行符合条件2下的语句
# elif 判断条件3:
# 执行符合条件3下的语句
# else:
# 如果上述条件都不符合,则执行该语句
# score = 89
# if (score == 100):
# print("成绩满分")
# elif (score >= 90):
# print("成绩在90和100分之间")
# elif (score >= 60):
# print("成绩在60和90分之间")
# elif (score >= 0):
# print("成绩在0和60分之间")
# else:
# print("成绩分数不正常")
# 循环语句
# While循环语句
# a = 5
# while(a > 0):
# print("当前轮次a的值为:",a)
# a -= 1
# import time
# # 无限循环,即死循环
# while(True):
# print("死循环...")
#time.sleep(2)
# while循环使用else语句
# a = 5
# while (a > 0):
# print("当前轮次a的值为:", a)
# a -= 1
# else:
# print("a的值已经不再大于0:",a)
# For循环语句
# for循环可以遍历任何序列的元素,如一个列表或者一个字符串。
# for letter in 'Python':
# print("当前字符为:",letter)
#
# fruits = ['apple','banana','mango']
# for current_fruit in reversed(fruits):
# print("当前水果为: ",current_fruit)
# for num in range(10):
# print("当前数字: ",num)
#
# # for循环使用else语句
# for num in range(10):
# print("当前数字: ", num)
# else:
# print("数字已经打印完毕")
# 循环嵌套
# for嵌套循环
# a = [1,2,3,4,5]
# b = [1,1,1,1,1]
# for a_item in a:
# sum = 0
# for b_item in b:
# sum += b_item
# else:
# sum += a_item
# print("列表b中所有元素与a中当前元素的总和为:",sum)
# else:
# print("结束")
# while嵌套循环
# a = 5
# while (a > 0):
# print('&' * a)
# b = 3
# while(b > 0):
# print('*' * b)
# b -= 1
# a -= 1
# Break语句和Continue语句
# break:用于终止整个循环
# continue:用于跳过当前循环轮次,开始下一轮循环
# print("break语句示例")
# for letter in 'Python':
# if letter == 'h':
# continue
# print("当前字母为:",letter)
#
# print("continue语句示例")
# for letter in 'Python':
# if letter == 'h':
# continue
# print("当前字母为:", letter)
# Pass语句
# Python中的pass语句为空语句,即不执行任何内容,表示直接跳过的意思。
# for letter in 'Python':
# if letter == 'h':
# pass
# print("这是pass块")
# print("当前字母为:",letter)
# print("循环结束,bye")
# 函数
# 函数是为了重复使用的代码块,Python中提供了很多内建函数,不过我们也可以定义自己的函数,称为自定义函数。
# 定义函数
# def add(a,*b):
# "定义一个加法函数,返回两个数的和"
# print("a的值为:",a)
# sum = 0
# sum += a
# #print("b的值为:",b)
# for var in b:
# sum += var
# return sum
# #
# #
# # # 调用函数
# print(add(1,8,3,2,4,5,6))
# 参数类型
# 必备参数:必备参数必须以正确的顺序传入函数,调用时的数量必须和定义时的一样
# 关键字参数:使用关键字参数允许函数调用时参数的顺序与定义时不一致,因为此时Python解释器能够用参数名称匹配参数值
#默认参数:调用函数时,如果没有传入默认参数的值,那么就会利用定义时的默认值
# 不定长参数:你可能需要一个函数能处理比当初定义时更多的参数,这些参数称为不定长参数,这种参数声明时不会命名
# 必备参数
#print(add(1,2))
# 关键字参数
#print(add(b = 3,a = 8))
#
# # 默认参数,也称缺省参数,默认参数必须在参数列表的最后一个
# def printinfo(name,age = 12):
# print("name:",name)
# print("age:",age)
# #
# printinfo("jack",34)
# printinfo("tom")
# 不定长参数,加了*号的变量名会存放所有未命名的变量参数
# def func_name([formal_args,] *var_args_tuple):
# statements
# def printinfo(name,*vartuple):
# print("输出:")
# print("name:",name)
# print("打印不定长参数:")
# for var in vartuple:
# print(var)
# print("参数打印结束")
#
# #
# printinfo("jack")
# printinfo("tom",14,"john","shenzhen",5.03)
# printinfo("tom",14,"john")
# 变量作用域:全局变量 局部变量
# 定义在函数内部的变量拥有局部作用域,定义在函数外部的变量拥有全局作用域
# 局部变量只能在其被定义的函数内部访问,而全局变量则可以在整个程序范围内访问。
# total = 9 # 全局变量
# def sum (arg1,arg2):
# global total
# print(total)
# total = arg1 + arg2 # 局部变量total
# #print("函数内是局部变量:",total)
# return total
#
# print(sum(1,2))
# print(total)