python基础

#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 ,'次')
		


posted @ 2017-09-15 10:49  若水若鱼  阅读(148)  评论(0编辑  收藏  举报