#运算符

#算数运算符
# +  加		1+1结果为2
# -  减		1-1结果为0
# *  乘		2*2结果为4
# /  除		2/2结果为1
# %  取模	2%2结果为0
# ** 幂		2**2结果为4
# // 整除	2//2结果为1

#赋值运算符
a=2
a+=1 	#a=a+1
a-=1 	#a=a-1
a*=1 	#a=a*1
a**=3 	#a=a*a*a
a/=2 	#a=a/2
a//=3 	#a=a//3 除不尽时 取整
a%=2 	#取模 a=a%2
print(True-1) 	#结果为0,1-1=0  (True==1,False==0)
print(25**0.5) 	#开平方


#比较运算符
print(True==1)  # 等于号 结果为True  (True==1,False==0)
print("1">"0")  # 大于号 结果为True  可比较字符串  根据哈希值比较
print(1!=2)     # 不等于 结果为True  1不等于2
print(1<2)		# 小于号 结果为True	1小于2
print(2>=2)		# 大于等于 结果为True	  2大于或等于2
print(2<=2)		# 小于等于 结果为True	  2小于或等于2

#位运算符
#位运算符是把数字转为二进制来进行计算
# 运算符	描述	实例   
#a 为 60,b 为 13
#二进制格式为
# a = 0011 1100

# b = 0000 1101

# &	按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0	(a & b) 输出结果 12 ,二进制解释: 0000 1100
# a&b = 0000 1100

# |	按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。	(a | b) 输出结果 61 ,二进制解释: 0011 1101
# a|b = 0011 1101

# ^	按位异或运算符:当两对应的二进位相异时,结果为1	(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
# a^b = 0011 0001

# ~	按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1	(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
# ~a  = 1100 0011

# <<	左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。	a << 2 输出结果 240 ,二进制解释: 1111 0000
# >>	右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数	a >> 2 输出结果 15 ,二进制解释: 0000 1111

#逻辑运算符  and、 or、 not
# 以下假设变量 a 为 10, b为 20
# and	x and y	布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。	(a and b) 返回 20。
# or	x or y	布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。	(a or b) 返回 10。
# not	not x	布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。	not(a and b) 返回 False
a = 10
b = 20
print(a and b) #结果为20
print(a<b and a==10) #结果为True,两边同时为True则为True

print(1==1 or 1>2) #结果为True  一边为True在,则为True

print(not(1==1))  #1==1为True ,加上not则取非 True则变False,False变True

#三元运算
# 结果1 if 条件 else 结果2
print("1大于0") if 1>0 else print("1小于0")


#成员运算符 
# Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

# in	如果在指定的序列中找到值返回 True,否则返回 False。	x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
# not in	如果在指定的序列中没有找到值返回 True,否则返回 False。	x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

a = 1
b = 20
arr = [1, 2, 3, 4, 5 ];

if a in arr:
	print("arr中存在a变量") #在arr中找到变量a的值则输出
else:
	print("arr中不存在a变量") #在arr没有中找到变量a的值则输出

if b not in arr:
	print("arr中不存在b变量") #在arr中没有找到变量b的值则输出
else:
	print("arr中存在b变量")#在arr中找到变量b的值则输出



#身份运算符   身份运算符用于比较两个对象的存储单元
# is	is 是判断两个标识符是不是引用自一个对象	x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
# is not	is not 是判断两个标识符是不是引用自不同对象	x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

n = 20
m = 10
if ( n is m ):   # 也可 if ( 20 is 20 ): 
   print ("n 和 m 有相同的标识") #如果n和m里的值相同
else:
   print ("n 和 m 没有相同的标识") #如果n和m里的值不相同

if ( id(n) == id(m) ):
   print ("n 和 m 有相同的标识") #如果n和m里的值相同
else:
   print ("n 和 m 没有相同的标识") #如果n和m里的值不相同

m=20
if ( n is not m ):
   print ("n 和 m 没有相同的标识") #如果n和m里的值不相同
else:
   print ("n 和 m 有相同的标识") #如果n和m里的值相同

#条件控制

#行与缩进
#Python使用缩进来表示代码块,不需要{}
 
if True:
	print("True")
else:
	print("False")
# 结果为 True
 
# if True:
# 	print("True")
# else:
# 	print("False")
#  print(9) #此行代码缩进不一致,运行会报错
#单独一句代码必须顶格编写 不然会报错

#也可编写为:

# if 条件:
# 	结果
# elif 条件:
# 	结果
# else:
# 	结果


#控制台输入

#name= input("请输入你的姓名:")#控制台输入回车,会将输入的值赋给name
#注意:因为控制台输入的值都是string类型,如果要做int类型使用要转类型
#print(name)

#循环之while循环

i=1
while i<=9:
	j=1
	while j<=i:
		print(j,"*",i,"=",(j*i)," ",end="") #  j,"*",i,"=",(j*i)," " 为j*i=(j*i)【," "为在最后添加空格】     end=""为print不换行
		j+=1
	print()
	i+=1



#菱形
#-----------------上半部分
y=1
while y<10: #打印9行
	k=1
	p=1
	while k<10-y: #第一次八个空格
		print(" ",end="")
		k+=1
	while p<y*2: #第一次一个*
		print("*",end="")
		p+=1
	print("") #换行
	y+=1
#-----------------下半部分
y = 9
while y<10 and y>0:
	k=1
	p=1
	while k<=10-y: #第一次一个空格
		print(" ",end="")
		k+=1
	y-=1
	while p<=y*2-1:#1=8*2-1 第一次十五个*
		print("*",end="")
		p+=1
	print("")