# 单行注释快捷键 ctrl + /
"""
这是多行注释
"""
'''
这也是多行注释
'''
"""
python变量定义不需要指定其数据类型
num = "hello world"
a = 1
a = 12.3
print(num)
print(a)
"""
"""
变量有什么用?
1 引用数据(否则,数据存放内存中,我们不方便引用)
2 指定数据类型(定义时需要指定数据类型的编程语言)
# 打印num01的内存地址
num01 = 1
num02 = 1
print(id(num01))
print(id(num02))
与java一样,python相同的数据在内存中仅存一份
"""
str01="hello"
str02 = "helloq"
str01="hello"
str02 = "helloq"
print(id(str01[0]))
print(id(str01[1]))
print(id(str01[2]))
print(id(str01[3]))
print(id(str01[4]))
print(id(str01))
print("**********")
print(id(str02[0]))
print(id(str02[1]))
print(id(str02[2]))
print(id(str02[3]))
print(id(str02[4]))
print(id(str02[5]))
print(id(str02))
"""
字符串中每个字母的内存不一定连续,所以字符串地址并不是字符的首地址
"""
"""
输出
"""
# print()默认打印并换行
print("hello","123",100,False)
# 如何使它不自动换行,用end参数
print(123,end=",")
# sep参数在多个打印内容之间加分隔符
print("hello",12.34,"happy",sep="%")
# 如何打印到文件
file01 = open("f:\\a.txt",'w')#双\\ 若没有a文件会自动创建
print("打印到文件测试",file = file01)
# 格式化输出
num = 100
print("%d" %num)#10进制
print("%o" %num)#8进制
print("%x" %num)#16进制
print(bin(num))#二进制
num1 = 1.2345779
print("%.2f" %num1)
print(round(num1,2))
print("%e" %num1)#科学计数法
print("%.2e" %num1)#保留2位小数
num2 = 1000563
print("%g" %num2)#保留6位有效数字,总共6位,多余的位数用科学记数法
print("%.3g" %num2)#保留3位有效数字
str = "happy"
print("%s" %str)#默认左对齐
print("%10s" %str)#右对齐
print("%-10s" %str)#左对齐
print("%.3s" %str)#截取前3个字符打印
print("%10.3s" %str)
print("%s" %str[-2:])#截取后两个字符打印
"""
字符串
python中单引号和双引号等价
str[开始:结束:步长]
"""
#通过注释的方式打印,可以保留其原本的方式
str01 = """ I am happy
I am happy I am happy"""
print(str01)
#用转义字符打印双引号等特殊字符
str02 = "\"d:\\abc.txt\""
print(str02)
#用R r 取消转义功能
print(R"d:\abc.txt")
str03 = "北京你好"
print(str03[2])#正序时,从0开始
str04 = "Iamhappy"
print(str04[-3])#逆序时,从1开始
print(str04[1:3])#左闭右开打印
print(str04[1:])#从第2位开始打印,后面的字符全部打印
print(str04[-2:])#截取后两位字符打印
print(str04[1::2])#访问所有偶数位
#字符串运算符
print("I am happy" * 10)#打印10遍
#长度 len()
print(len("hhhhhhhh"))
#比较长度
print("abc" is "abc")
#比较内容
print("abc" == "abc")
#查找 (true false) in
print("hhh"in "adhjbjjjjhhhhhdas")
"""
运算符
// 整除,即商为整数
** 求幂
"""
#成员运算符 in not in
# 1用于字符串
# 2用于集合
#身份运算符 is not is
# 判断两个对象是否属于同一内存空间,不是判断对象内容相等不相等
num06 = 100
num07 = 100
print(num06 is num07)#true
print(num06 == num07)#true
print(id(num07))
print(id(num06))
str01 = "abcde"
str02 = "abcde"
print(str01 == str02)#true
print(str01 is str02)#true
#反例
str03 = "abd"*50
str04 = "abd"*50
print(str03 == str04)#true
print(str04 is str03)#false,因为是长串,存储跟短串不一样
# 三元运算符 赋值运算符
num = 3 if 3>2 else 2
print(num)
#输入input()
year,month=input("请输入两个数,以逗号隔开")#这样获得的输入是字符串类型
year,month=eval(input("请输入两个数,以逗号隔开"))#eval()的功能是去除系统强加的引号
print(year,month)
#跟sql差不多,用位置决定循环体
if 条件表达式 :
语句1
语句2
.......
else:
语句1
语句2
.......
elif = else if #单分支
while i<=10:
i += 1#用i = i+1会创建新对象,py不支持i++
print(i)
for i in range([起始值],上限值,[跳跃值]):
起始值:默认0,可取到
上限值:取不到
跳跃值:默认1
for i in range(1,100):#左闭右开,默认每次自加1
sum+=i
print(i)#循环体内
print(sum)#循环体外
for i in range(1,100,2):#左闭右开,默认每次自加2
sum+=i
print(i)#循环体内
print(sum)#循环体外
for i in [2,4,6,8]:#该集合元素会依次赋值给i
print(i)
print("打印1000以内的水仙花数")
for i in range(100,1000):#该集合元素会依次赋值给i
ge_num = i%10
bai_num = str(i)[0]
shi_num = str(i)[1]
if i==int(ge_num)**3 + int(shi_num)**3 + int(bai_num)**3:
print(i,end=" ")
#逻辑运算符
与 and
或 or
非 not
'''
可变集合:list,可以存多种类型的数据
不可变集合:
'''
#遍历1
for i in list01:
print(i)
#遍历2
print(list01)
# 遍历3
i=0
while i < len(list01):
print(list01[i],end=" ")
i+=1
#查,跟string用法一样[startPos,desPos,步长]
print(list01[1])
print(list01[1:])
print(list01[-1])
print(list01[1:4])
print(list01[1::2])#访问所有奇数位置的元素
print(list01[:3])
#改
list01[2] = 100
#增
list01.append("haha")
#删除,要删除的元素必须在集合内,否则报错
list01.remove("hello")
#删除集合中的所有元素
list01.clear()
#长度
print(len(list01))
#嵌套集合约等于多维集合