python全栈开发学习03

#_author:felix
#date 2018/7/3
# 格式化输出
# ctrl+? 选中的行都注释
name = input ("Name:")
age = int(input("Age:"))
job = input("Job:")
salary = input("Salary:")


if salary.isdigit(): #长得像不像数字
salary = int(salary)
# else:
# #print("must input digit!")
# exit("must input digit")
msg = '''
-------info of %s---------
Name:%s
Age:%d
Job:%s
salary:%f
You will be retired %s years
---------end--------
''' %(name,name,age,job,salary,65-age)
print(msg)



#_author:felix
#date 2018/7/3
'''
#数据类型知识点
#python3中不区分整形与长整形
我之前手机装了个termux 装了python3
我尝试着去试他能最多运行到2的多少次方,我最终试到了2的一百万次方,我就没试了,
在尝试一千万的时候就卡住了

#for循环
for i in range(1,100):
if i % 2 == 1:
print("loop:",i)
'''
#利用步长
# for i in range(1,100,2):
# print(i)
#跳过50-70不打印
# for i in range(100):
# if i > 70 or i < 50:
# print(i)



#写一个登陆接口
#报错IndentationError: expected an indented block 说明没缩进

#passwd_authentication = False #flagzhi

# _user = "felix"
# _passwd = "123"
# for i in range(2):
# username = input(" Username: ")
# password = input(" Password: ")
#
# if username == _user and password == _passwd:
# print("Welcome %s login...." % _user)
# passwd_authentication = True
# break
# else:
# print("Invalid username or password")
#
#
# if not passwd_authentication:
# print("登陆次数过多!")

_user = "felix"
_passwd = "123"
for i in range(2):
username = input(" Username: ")
password = input(" Password: ")

if username == _user and password == _passwd:
print("Welcome %s login...." % _user)
break
else:
print("Invalid username or password")

else:
print("登陆次数过多!")

#只要上面的for循环正常执行完毕,中间没有被打断,就会执行else语句
#break过后就不会执行最后面的else语句,for后面不能加elif 只能加else



#_author:felix
#date 2018/7/4
# 设置断点调试程序
_user = "felix"
_passwd = "123"
counter = 0
while counter < 3:
username = input(" Username: ")
password = input(" Password: ")

if username == _user and password == _passwd:
print("Welcome %s login...." % _user)
break
else:
print("Invalid username or password")
counter += 1
if counter == 3:
keep_going_choice = input("继续登陆吗?[y/n]")
if keep_going_choice == "y":
counter = 0

else:
print("登陆次数过多!")


#_author:felix
#date 2018/7/4
'''continue语句,break,以及flag的使用'''
exit_flag = False
for i in range(10):
if i<5:
continue
print(i)
for j in range(10):
print("layer2",j)
if j == 6:
exit_flag = True
break
if exit_flag:
break


#_author:felix
#date 2018/7/4
'''
a=['a','b','c','d','e','f']

#增删改查
#查 切片
print(a[0:]) #取到最后
print(a[0:-1]) #取到倒数第二个值
print(a[0::2])#从左到右隔一个去取
print(a[0::-2])#从右到左隔一个去取
print(a[::-2])
print(a[:])#打印整个列表

print(a[3:])

#添加 append insert

a.append('z') #插到末尾最后位置
print(a)
a.insert(1,'w')#插入到任意位置
print(a)

#修改

a[0] = 'r'
print(a)

a[1:3]=['t','y']
print(a)

#删除 remove pop del
a.remove('a') #直接把值写入,删除
print(a)

a.pop(1)#括号里是索引
b=a.pop(1)
print(a)
print(b)

del a[0]
del a #可以删除某个固定的内容,也可以把整个对象删除


w=['to','be','or','not','to','be'].count('to') #计算某个值出现的次数
print(w)



#extend 类似于append

a = [1,2,3]
b = [4,5,6]
a.extend(b)

print(a)
print(b)


#index 通过名称找索引
a = ['a','b','c','d','e','f']
print(a.index('b'))


#reverse 倒转 无返回值
a = ['a','b','c','d','e','f']
a.reverse()
print(a)


#sort 数字从小到大排序,字母从大写到小写排序
a = [2,4,6,9,8,5]
a.sort()
print(a)

#sort 数字从小到大排序,字母从大写到小写排序
a = [2,4,6,9,8,5]
a.sort(reverse=True)
print(a)


#将倒着排序 按着ctrl 鼠标到sort会出现提示 reverse默认False
a = [2,4,6,9,8,5]
a.sort(reverse=True)
print(a)


总结:

查:
索引
切片
.count 查看某个元素出现的次数
.index 根据内容找其对应的位置

增加:
.append() 追加
.insert(索引,'内容')
.extend 扩展

修改:
列表名[索引] = '新的值'
通过切片修改 列表名[开始:结束] = ['内容1','内容2',...] 不匹配就会默认删掉没有匹配的

删除:
remove("内容")
pop(索引) 如果不指定默认删除最后一个
del /列表名/列表名[索引].clear() 清空排序:sort()reversed()如何判断是否是一个列表:type(列表名) is list #会返回一个true
#_author:felix
#date 2018/7/5
#写一个购物车

product_list = [
('Mac',9000),
('Kindle',800),
('tesla',900000),
('book',100),
('biycle',2000)
]

salary = input('please input your salary:')
shopping_car = []
if salary.isdigit():
salary = int(salary)
#打印商品列表
while True:
for i,v in enumerate(product_list,1):
print(i,'>>>>',v)
#引导用户选择商品
choice = input('选择购买的商品编号[退出:q]:')

#验证输入是否合法
if choice.isdigit():
choice = int(choice)
if choice > 0 and choice <= len(product_list):
#将用户选择的商品通过choice取出来
p_item = product_list[choice-1]
if p_item[1] < salary:
salary -= p_item[1]
shopping_car.append(p_item)
else:
print('余额不足,还剩%s'%salary)
print(p_item)
else:
print('编码不存在')
elif choice == 'q':
print('-------------你已经购买如下商品------------')

for i in shopping_car:
print(i)
print('余额:%s'%salary)
break
else:
print('invalid input')



#_author:felix
#date 2018/7/6

#字典
'''
>>> header = {
'Host' : 'www.java.sun.com',
'Connection' : 'keep-alive'
}
>>> header['Host']
'www.java.sun.com'
>>> empty_d = {}
>>> empty_d['host'] = 'www.java.sun.com'
>>> empty_d
{'host': 'www.java.sun.com'}
>>> empty_d['host']
'www.java.sun.com'
>>> empty_d = {}
>>> empty_d['host']
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
empty_d['host']
KeyError: 'host'
>>> v1=empty_d.get['host']
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
v1=empty_d.get['host']
TypeError: 'builtin_function_or_method' object is not subscriptable
>>> v1=empty_d.get('host')
>>> type(v1)
<class 'NoneType'>
>>> v2 = empty_d.get("host","www.python.com")
>>> v2
'www.python.com'
>>> empty_d
{}

字典的get方法可以返回一个默认值,但不会对字典产生影响,字典里的内容不会改变
字符串,整数类不可变类型都可以作为字典的键,元组也可以作为键,前提是元组的元素都是不可变类型。

与列表的推导一样,字典也有相应的字典推导,如下,生成了10个链接,以1-10的数字作为键,以键为页号的url作为值

>>> urls_d = {i:"www.python.com/?page{}".format(i) for i in range(1,11)}
>>> urls_d
{1: 'www.python.com/?page1', 2: 'www.python.com/?page2', 3: 'www.python.com/?page3', 4: 'www.python.com/?page4', 5: 'www.python.com/?page5', 6: 'www.python.com/?page6', 7: 'www.python.com/?page7', 8: 'www.python.com/?page8', 9: 'www.python.com/?page9', 10: 'www.python.com/?page10'}
>>>

可以使用字典的 items() 方法对字典进行循环遍历,每次可以同时获得键和值:或者使用 keys() 方法对键进行遍历,每次可以利用键获得相应的值,
两种方法类似,对比两种方法
>>>for key,val in urls_d.items():
print(key,val)

========================= RESTART: E:/python/test.py =========================
1 www.python.com/?page1
2 www.python.com/?page2
3 www.python.com/?page3
4 www.python.com/?page4
5 www.python.com/?page5
6 www.python.com/?page6
7 www.python.com/?page7
8 www.python.com/?page8
9 www.python.com/?page9
10 www.python.com/?page10

>>> for key in urls_d.keys():
print(key,urls_d[key])


========================= RESTART: E:/python/test.py =========================
1 www.python.com/?page1
2 www.python.com/?page2
3 www.python.com/?page3
4 www.python.com/?page4
5 www.python.com/?page5
6 www.python.com/?page6
7 www.python.com/?page7
8 www.python.com/?page8
9 www.python.com/?page9
10 www.python.com/?page10
>>>


#关于集合

集合的特点是无序且无重复的元素,python提供了集合类型set和相关的操作,主要包括 成员测试,添加元素,去除元素等方法,也提供了数学中常见的集合的
交,并,差 运算等。

可以使用set()或大括号{} 来初始化集合,如下
>>> s1 = set(['a','b','c'])
>>> s1
{'a', 'b', 'c'}
>>> s2 = {'a','b','c'}
>>> s2
{'a', 'b', 'c'}
>>> s1 == s2
True
>>>

空集合只能用set进行定义,当{}中没有写入任何内容,其实就相当于建了个字典
>>> s3 = {}
>>> type(s3)
<class 'dict'>
>>> s4 = set()
>>> s4
set()
>>> type(s4)
<class 'set'>
>>>

可以用add()方法向集合中添加一个元素,或者可以使用update()向集合中添加多个元素,可以用 in 检查某个元素是否在此集合中

>>> s4.add('x')
>>> s4
{'x'}
>>> s4.update(['y','z'])
>>> s4
{'y', 'z', 'x'}
>>> 'y' in s4
True
>>>

可以用循环遍历集合中的元素
>>>s4 = {'y', 'z', 'x'}
>>>for x in s4:
print(x)

========================= RESTART: E:/python/test.py =========================
x
y
z


#随机数

可以利用python中的random 模块中的方法生成随机数,如 random.random 将生成0 - 1 之间的随机数,如下
>>> import random
>>> random.random()
0.6710898931607918
>>>
可以使用randoma.randint(a,b)方法返回a-b之间(包括a,b)的整数

>>> random.randint(2,9)
5
>>> random.randint(2,9)7>>> random.randint(2,9)9
>>> random.randint(2,9)
6
>>> random.randint(2,9)
7

如果希望可以在程序中多个产生随机数的位置产生相同的随机数,则可以通过设置随机数的种子值来实现,如下
>>> random.random()
0.6619420090129978
>>> random.seed(20)
>>> random.random()
0.9056396761745207
>>> random.random()
0.6862541570267026
>>> random.random()
0.7665092563626442
>>> random.seed(20)
>>> random.random()
0.9056396761745207
>>>
#enumerate的使用
可以使用enumerate在对列表,元组等类型操作时,同时返回元素的索引和元素的值
for ind,val in enumerate([10,20,30,40,50,60]):
print(ind,val)

========================= RESTART: E:/python/test.py =========================
0 10
1 20
2 30
3 40
4 50
5 60
>>>

for ind,val in enumerate([10,20,30,40,50,60],1):
print(ind,val)

========================= RESTART: E:/python/test.py =========================
1 10
2 20
3 30
4 40
5 50
6 60
>>>

for ind,val in enumerate([10,20,30,40,50,60],3):
print(ind,val)

========================= RESTART: E:/python/test.py =========================
3 10
4 20
5 30
6 40
7 50
8 60
>>>

#元组 只可读!!
#如果元组里只有一个元素,在其后面加个逗号
查询与列表一样
嵌套:
a = [[1,2,3],'felix',5,(3,5,6)]
print(a[0][1])
打印出2
n级嵌套一样



'''
#_author:felix
#date 2018/7/9

'''
不可变类型:整型,字符串,元组
可变类型:列表,字典

键必须是不可变类型
字典两大特点:无序,键唯一

字典的操作:

增:
a = {'name':'felix'}
a['age'] = 21
print(a)

a.setdefault('hobby','python') #如果字典里有对应的键,则不修改原来键对应的值
print(a)

setdefault有返回值

查:
通过键去查
a[name]
看到所有的键:print(a.keys())
看到所有的值:print(a.values())
看到所有的键值对:print(a.items())

改:

a = {'name':'felix','age':'21'}
a['name'] = 'alex'
a = {'name':'felix','age':'21'}
b = {'1':'111','2':'222'}
a.update(b)
将字典b里的东西加入字典a

删:

a = {'name':'felix','age':'21'}
del a['name'] #a中的name的键值对删除

a.clear() #将字典a清空

a.pop('age') #会删掉age对应的键值对,pop有返回值,返回age对应的值


a.popitem() #随机删除一组键值对

del a #删除整个字典


其他操作以及涉及到的方法:

dic1 = dict.fromkeys(['host1','host2','host3'],'test')
创建一个字典,n个键值对为 hostn ,test

字典的嵌套

字典排序:
dic = {5:'555',2:'222',4:'444'}
print(sorted(dic))


字典的遍历:

a = {'name':'felix','age':'21'}

(推荐用这个,效率高)
for i in a:
print(i,a[i])

====================== RESTART: E:/python/test_dict.py ======================
name felix
age 21
>>>
或者:
for i in a.items():
print(i)

====================== RESTART: E:/python/test_dict.py ======================
('name', 'felix')
('age', '21')
>>>

或者(和第一个是同样的效果)
for i,v in a.items():
print(i,v)

====================== RESTART: E:/python/test_dict.py ======================
name felix
age 21



关于字符串:
#1 重复输出字符串
print'hello'*20

#2 通过索引获取字符串中的字符,与列表的切片相同
print('helloworld'[2:])

#3 成员判断 in
print('el' in 'hello') #如果在会打印True

#4 格式字符串
print('felix is a man')
print('%s is a man'%'felix')

#5 字符串拼接
a = '123'
b = 'fdgd'
c = '4rf'
w = a+b+c
以上拼接效率低,用下面的方法
a = '123'
b = 'fdgd'
c = '4rf'
w = ''.join([a,b,c]) # '' 里面可以加东西如---+++。不加表示无间隔拼接


字符串的内置方法:

str = 'hello kitty'

print(str.count('l')) #看字符串str中有几个l
print(str.capitalize()) #将字符串首字母大写
print(str.center(50,'-')) #变成-------------------hello kitty--------------------
print(str.endswith('y')) #验证以什么结尾 返回一个布尔值
print(str.startswith('y')) #验证以什么开始 返回一个布尔值
print(str.expandtabs(tabsize = 10))#str = 'he\tllo kitty' 会在he tllo之间增加十个空格
print(str.find('t')) #返回查找到的第一个 t 的索引值

print(str.format(name = 'felix')) #另一种方式格式化输入,字符串变为 str = 'hello kitty {name}'
#输出就会变成 hello kitty felix
print(str.format_map({'name':'felix'}))

index() find() 功能一样,如果没有会报错,find会返回-1 推荐用find

print('adf224'.isalnum()) #如果字符串里只有字母,汉字和数字会返回布尔值True

更多关于字符串 http://www.runoob.com/python3/python3-string.html


作业
程序 :三级菜单
要求:
1.打印省市县三级菜单
2.可返回上一级
3.可以随时退出程序

'''





posted @ 2018-07-22 22:46  Hongchen的博客  阅读(232)  评论(0编辑  收藏  举报