Python(14)--循环

while循环格式:

# 语法格式
while 条件:
    满足条件执行的循环体



# 打印1到9
x = 1
while x <10:
    print(x)
    x += 1

# 接收用户输入姓名,不能为空
name = ""
while not name or name.isspace():
    name = input("name:")
print("hello, {}".format(name))

  


for循环:

  while语句可用于在条件为真的情况下反复执行代码块,但是有需要特定的情况,比如遍历可迭代对象(序列就是可迭代对象),需要使用for循环语句

ages = [12, 32, 43, 35, 46]
for age in ages:
    print(age)

words = ["is", "is", "name"]
for word in words:
    print(word)

  

range(start, stop[, step]):

  函数range返回的是一个可迭代对象

  start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

  stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

  step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

# 打印0-5
for i in range(6):
    print(i)

# 打印10以内奇数:指定步长,每两步取一次值
for i in range(1, 10, 2):
    print(i)

# 打印99乘法表:
for i in range(1, 10):
    for j in range(1, i+1):
        print("%s*%s=%s" %(j, i, j*i), end="\t")
    print()

  

注:只要能使用for循环,就不要使用while循环


迭代字典:

  遍历字典,可以像遍历序列那样使用for语句

d = {"x" : 1, "y" : 3, "z": 6}
for key in d:
    print(key, d[key])
# x 1
# y 3
# z 6

  也可以使用d.keys获取所有键

  d.values获取所有值

  d.items以元组方式返回键值对

d = {"x" : 1, "y" : 3, "z": 6}
print(d.keys())
print(d.values())
print(d.items())
# dict_keys(['x', 'y', 'z'])
# dict_values([1, 3, 6])
# dict_items([('x', 1), ('y', 3), ('z', 6)])

  for循环的一个优点是可以在其中使用序列解包

d = {"x" : 1, "y" : 3, "z": 6}
for key, value in d.items():
    print(key, value)
# x 1
# y 3
# z 6

  


并行迭代:

  可能有时候会想要同时迭代两个序列

# 打印名字和对应的年龄, i用作循环索引的变量
names = ["an", "yuan", "li"]
ages = [12, 34, 25]
for i in range(len(names)):
    print(names[i], ages[i])

  zip函数:内置函数,将两个序列缝合,返回一个元组组成的序列,返回的是一个可迭代对象,可以使用list转换为列表

names = ["an", "yuan", "li"]
ages = [12, 34, 25]
print(list(zip(names, ages)))   # [('an', 12), ('yuan', 34), ('li', 25)]

# 缝合后就可以循环中解包
for name, age in zip(names, ages):
    print(name, age)
# an 12
# yuan 34
# li 25


# zip可以缝合任意数量的序列,当序列长度不同时,将终在最短的序列用完时停止
names = ["an", "yuan", "li"]
a = [333, 444, 555]
ages = [12, 34, 25, 34, 56, 66]
print(list(zip(names, ages, a)))   # [('an', 12, 333), ('yuan', 34, 444), ('li', 25, 555)]

  


迭代时获取索引:

  在迭代序列对象的同时要获取索引

  函数:enumerate

s = "banana"
for string in s:
	if "a" in string:
		index = s.index("a")
		print(index)
# 如果自读没有重复,那么可行,但是有重复的,返回的是该字符串中首次出现的字符索引,除非将字符替换,才会查找到后面字符的索引

for index, string in enumerate(s):
	if "a" in s:
		print(index, string)
# 0 b
# 1 a
# 2 n
# 3 a
# 4 n
# 5 a

#使用内置函数enumerate,该函数能够迭代索引和值,索引是自动提供的

  


反向迭代和排序后迭代:

  函数:reversed和sorted,类似列表方法reverse和sort,用于任何序列和可迭代对象,不就地修改对象,返回反转后排序后的版本

s = [1, 5, 3, 8, 2,6]
print(sorted(s))    # [1, 2, 3, 5, 6, 8]

s1 = "hi, world"
print(sorted(s1))   # [' ', ',', 'd', 'h', 'i', 'l', 'o', 'r', 'w']

print(list(reversed(s1)))   # ['d', 'l', 'r', 'o', 'w', ' ', ',', 'i', 'h']
print("".join(reversed(s1)))    # dlrow ,ih

  注:sorted返回一个列表,而reversed有点像zip

    要按字母表排序,可先转换为小写。为此,可将sort或sorted的key参数设置为str.lower。例如,sorted("aBc",key=str.lower)返回['a','B','c']。


跳出循环:

  break

  用于跳出循环,当执行到break时,会跳出整个循环,继续往下执行

for i in range(6):
	if i == 3:
		break
	print(i)
# 0
# 1
# 2

  continue

  用于跳出当前循环,执行下一次循环

for i in range(6):
	if i == 3:
		continue
	print(i)
# 0
# 1
# 2
# 4
# 5

  


死循环和循环中使用else:

  使用标志位tag来控制循环:

  登录成功,接收用户命令,直到输入“q”退出

tag = True
while tag:
    name = input("name:")
    passwd = input("password:")
    if name == "yuan" and passwd == "123456":
        print("login ok!")
        while tag:
            cmd = input(">>>:")
            if cmd == "q":
                tag = False
            print("your enter is %s" %cmd)
    else:
        print("login error!")

  

猜你喜欢

转载自www.cnblogs.com/Mr-chenshuai/p/10024037.html