字典
1.边输入边构成字典
dict={}
while True :
name=input("请输入名字:")
score=input('请输入分数:')
if name :
dict[name]=score
else :
break
print(dict)
2.字典可以无限极嵌套
cities={
'北京':{
'朝阳':['国贸','CBD','天阶','我爱我家','链接地产'],
'海淀':['圆明园','苏州街','中关村','北京大学'],
'昌平':['沙河','南口','小汤山',],
'怀柔':['桃花','梅花','大山'],
'密云':['密云A','密云B','密云C']
},
'河北':{
'石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'],
'张家口':['张家口A','张家口B','张家口C'],
'承德':['承德A','承德B','承德C','承德D']
}
}
for i in cities['北京']:
print(i)
#循环内容可以为二级索引
for i in cities['北京']['海淀']:
print(i)
3.利用for in rang将两个列表转换为字典
```python
#列表的定义方法,是字符的话方括号里面需要加上引号
#里面是数字只需要用方括号括起来
list_1 = ['a', 'b', 'c']
list_2 = [1, 2, 3]
#用什么要先创建什么
dict_1 = {}
for i in range(len(list_1)):
#字典的索引可以不是数字
dict_1[list_1[i]] = list_2[i]
print(type(dict_1))
print(dict_1)
4.遍历字典
```python
print("=======欢迎进入狗狗年龄对比系统========")
control = "N"
while control=="N":
try:
age = int(input("请输入您家狗的年龄:"))
#print(" ")
age = float(age)
if age < 0:
print("您在逗我?")
elif age == 1:
print("相当于人类14岁")
#break
elif age == 2:
print("相当于人类22岁")
#break
else:
human = 22 + (age - 2)*5
print("相当于人类:",human)
#break
#except BaseException(这个是ValueError的父类所以调用父类即可,ValueError包括于Baseexcept中的一种,所以就不用写出BaseException中的每一种错误。):
except ValueError:
print("输入不合法,请输入有效年龄")
print("")
control = input("退出(Y/N)?")
print("")
###退出提示
input("点击 enter 键退出")
'''
1.第一个点,while的判断条件是N,而不是True,这就可以控制当前循环完成后,或抛出异常后可以选择是否继续
2.age = int(input("请输入您家狗的年龄:"))的位置,如果放在try的外面便会报错。
'''
#对比前面加上了就算输入没错也可以选择是否继续输入,而且我认为finally用的好,通过finally便不用在try里每个语句后面加上control = input("退出(Y/N)?")
print("=======欢迎进入狗狗年龄对比系统========")
control = "N"
while control=="N":
try:
age = int(input("请输入您家狗的年龄:"))
#print(" ")
age = float(age)
if age < 0:
print("您在逗我?")
elif age == 1:
print("相当于人类14岁")
#break
elif age == 2:
print("相当于人类22岁")
#break
else:
human = 22 + (age - 2)*5
print("相当于人类:",human)
#break
#except BaseException(这个是ValueError的父类所以调用父类即可,ValueError包括于Baseexcept中的一种,所以就不用写出BaseException中的每一种错误。):
except ValueError:
print("输入不合法,请输入有效年龄")
control = input("退出(Y/N)?")
print("")
finally:
control = input("退出(Y/N)?")
def fib_loop_while(max):
a, b = 0, 1
while max > 0:
a, b = b, a + b
max -= 1
yield a
#for 的循环可以是一个函数
for i in fib_loop_while(10):
print(i)
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
for var in vartuple:
print (var)
return
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )
列表推导式
列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。
每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。
这里我们将列表中每个数值乘三,获得一个新的列表:
>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]
>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]
#在for循环前对操作对象调用函数
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
#for前面的是最终输出的形式,比如 [x*y for x in vec1 for y in vec2],这里没有print的字样但是输出的是x*y
#我们可以用 if 子句作为过滤器:
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]
>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']
#相当于输入5次str(round(355/113, i))。
#以下实例将3X4的矩阵列表转换为4X3列表:
>>> matrix = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]
>>> [[row[i] for row in matrix] for i in range(4)]
>>> [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
是一个整体,不然row[i] for row in matrix里的i是哪来的…
这个List Comprehension相当于一个嵌套循环,外层循环变量是i,内层循环变量是row。
把列表的外层循环改为普通for循环的话,等价于:
temp_list = []
for i in range(4):
temp_list.append([row[i] for row in matrix])
而
for i in range(4):
[row[i] for row in matrix]
#每次输出每行中的一个元素
print(row[i])
输出为
9
10
11
12
这里就是因为print的输出是按照竖着来输出的所以这里就自动地行变成列。