#python基础知识学习
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
# print('hello world');
#
# name = input('please enter your name :');
# print('hello', name);
# print('1024*768=',1024*768):
# 代码块,代码缩进规范
#
# a = 100
# if a >= 100:
# print('I have', a )
# else:
# print('I only' , a)
########################################
#转义符 r'' 表示 '' 内部的字符串默认不转义
# print('12\'3');
# print(r'\\""\\');
#多行字符串写法 : ''' XXX '''
# print(''' 我是,
# 超级帅的,
# 飞飞''');
###############################
#布尔值、or或(或者)、and与(并且)、not非(取反)
#
# print(True);
# print(False);
# print(3 > 5);
# print( True or False );
# print(True and False );
# print(1>2); #False
# print(not 1>2) #True
###############################
#空值 None
# print(None) #None
# print( not None) #True
# print( not '') #True
# print( None == '') #False
###############################
#变量和常量:常量通常用全部大写的变量名
#
# a = 10
# b = a
# a = 20
# print(a , b); # 20 10
# PI = 3.14159265359
#除法( / , // )、取余数%
# print(10/2) #计算浮点数结果 5.0
# print(10//3) #计算整数结果 3
# print(10%3) #取余数 1
# 'Hello, \'Adam\''
# a = '\'Hello, \\\'Adam\\\'\'';
# print( a ) # 'Hello, \'Adam\''
# b = 'r\'Hello, "Bart"\''
# print( b ) # r'Hello, "Bart"'
##############################################
#字符串方法 : 单个字符转整数编码 ord(), 整数编码解码 chr()
# print(ord('S')) # 83
# print(chr(65)) # A
# print(ord('飞')) # 39134
# print(chr(20013)) # 中
# 字符串方法 : len() 计算字符串子字符数量
# a = len( 'aaa' )
# b = len('你好,世界')
# print( a , b ) # 3 5
# 字符串 encode() 编码为 bytes字节 , decode(): bytes字节反编码为字符
# print( '你好'.encode('utf-8') )
# 字符串格式化
# str = 'Hello,%s 你好啊。我是: %s, %d 岁' %('小明','王老师',26)
# print( str )
# print('%02d' %(9)) # 09
s1 = 72
s2 = 85
# print('小明的成绩提高了%.1f %%' %( (s2-s1)/s1*100 ) ) # 小明的成绩提高了 18.1%
################################################
# 数据类型 list
lists = ['A','B','C','D']
# print( lists , '长度为: %d' %( len(lists) ) )
#打印 lists 的第一个和最后一个
# print(lists[0] , lists[-1]) # A D
# list是一个可变的有序表,所以,可以往list中追加元素到末尾:append( item )
lists.append('F')
# print( lists ) # ['A','B','C','D','F']
# 也可以把元素插入到指定的位置,比如索引号为1的位置:insert( index , item )
lists.insert( 1 , 'a' )
# print( lists ) # ['A','a','B','C','D','F']
# 删除末尾元素: pop()
lists.pop()
# print( lists ) # ['A','a','B','C','D']
# print( not not [] ) # False 空数组转为布尔值为 False
#tuple
# 另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改:
# lists2 = ('A','B','C',[1,2])
# lists2[0] = 1 # 修改 ‘元素指针’ 会报错
# print(lists2[0]) # A
# lists2[-1][0] = 0 #修改元素内部元素的值 ,不会报错, 因为 lists2[-1] 指针还是 [0,2] , 并没有改变
# print( lists2 ) # ('A','B','C',[0,2])
#####################################
# 条件判断
# h = input('enter your height(CM)')
# w = input( 'enter your weight(KG)' )
# if not (h and w):
# print('必须输入体重和身高哦')
# else:
# scale = int(w) / (float(h)/100) / (float(h)/100)
# print( scale )
# if scale < 18.5:
# print('体重过轻')
# elif(scale < 25 and scale >= 18.5 ):
# print('标准')
# elif(scale < 28 and scale >= 25 ):
# print('过重')
# else:
# print('肥胖')
#################################################
# dict和set
#####################
#dict
# Python内置了字典:dict的支持,dict全称dictionary,使用键-值(key-value)存储,具有极快的查找速度。
students = {'a':21,'b':22,'c':23}
# print(students['a']) # 21
# 如果key不存在,dict就会报错:
#
# print( students['f'] ) #会报错
# 要避免报错,可以先检测 'f' 是否存在,方法一:通过in判断key是否存在:
# if 'f' in students:
# print( students['f'] )
# else:
# print('\'f\'不存在 students 中')
# 二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
# students.get('f') # 不存在返回None
# students.get('f' , 1 ) # 不存在返回 0
# if students.get('f' , 1 ) == 0 :
# print('默认值为0')
# print( students )
#删除 key 用pop(key)方法,对应的value也会从dict中删除:
# students.pop( 'a' )
# print( students )
##################
# set
# set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
# 要创建一个set,需要提供一个list作为输入集合:
s = set([1,2,3,'a'])
# print( s )
###################
# 可变对象 & 不可变对象
# arr = [1,2,3] # 可变对象
# arr.append('3')
# print( arr ) #[1,2,3,'3'] arr改变了
# str = 'abc' # 不可变对象
# str.replace('a','A') # 返回一个新的字符串: 'Abc'
# print( str ) # abc 没有改变
########################################################
#函数
num = hex(10)
# print( num ) # 0xa (16进制)
# 内置函数
#
# all(iterable) 、 any([])(iterable) 用于判断给定的 可迭代参数 iterable
# b = all([1,'2',True]) #参数的每一项都为 True 返回True , 否则返回False
# c = any([0,False,[]]) # 参数的每一项都为 False 返回 False , 否则返回True
# print( b , c) # True False
###################
# 数据类型转换
# int( arg ) #转为整数
# float( arg ) #转为浮点数
# str( arg ) #转为字符串
# bool( arg ) #转为布尔值
# print( str(hex(255)) )
###################
#定义函数
#在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
#求和函数
def sumFn( x , y ):
return x+y
# print( sumFn( 1 , 2 ) ) # 3
#解一元二次方程函数
def getResult( a , b , c ):
a = float(a)
b = float(b)
c = float(c)
if c == 0:
return 0
if b*b < 4*a*c :
return None
return [(-b + math.sqrt(b*b - 4*a*c))/2*a , (-b - math.sqrt(b*b - 4*a*c))/2*a ]
# print( getResult( 0, 4, 2 ) )
###########################
#
#函数参数 : 1.位置参数
def sum(n , m ):
return n + m
#在这里 n 就是一个位置参数 , 当偶们调用函数时,必须传n , m 两个位置一一对应的参数:
x = sum( 2 , 2 )
# print( x ) # 4
# 默认参数
#求x的y次方的函数
def power(x , y):
s = 1
while y > 0:
s *= x
y -= 1
return s
# print( power( 2 , 3 ) ) # 8
# power() 函数中 ,我们必须传入两个参数, 如果缺少一个, 会报错,这时候我们可以使用默认参数:
def power2(x , y=2):
s = 1
while y > 0:
s *= x
y -= 1
return s
# print( power2( 2 ) ) # 4
#默认参数的坑 , 默认参数指向可变对象时,会在函数定义的时候就内存中生成一遍,后修的修改都是在操作内存中的这一个对象。所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
#
def add(a =[]):
a.append(1)
return a
# print( add() ) #[1]
# print( add() ) #[1,1]
#可变参数
# 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。
# 要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:
def calc( nums ):
sum = 0
for x in nums:
sum += x*x
return sum
# 但是调用的时候,需要先组装出一个list或tuple:
# print( calc([1,2,3]) ) # 14
# print( calc((1,2,3,4)) ) # 30
#如果利用可变参数可以传入一个或者多个,可以这样写:
def calc1( *nums ):
sum = 0
for x in nums:
sum += x*x
return sum
# print( calc1(1,2,3) ) # 14
# print( calc1() ) # 0
#如果参数是一个list或者tuple,可以这样写:
s = calc1(*[1,2,3,4])
# print(s) # 30
#关键字参数
#关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:
def person( name , age , **kw):
print('name:',name,'age:',age)
print( 'city' in kw ) #True
print( kw['city'] ) #beijing
# person( '小明' , 18 , gender='女女', city='beijing');
#递归
#汉诺塔的移动可以用递归函数非常简单地实现。
s = 0
def move(n , a , b , c) :
global s
if n == 1 :
s= s + 1
print( a, '---->' , c )
else :
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move( 3 , 'A' , 'B' , 'C')
print('最少移动:', s ,'次')