学习python-Day08


今日学习

补充:

    print('1' > '2')  # False
    print('333' > '222')  # True
    print('33' > '111')  # True
    
1.字符串的数字比较大小是按照各个字符比较-----位置一一对应的比较,只要在前面位置上字符(数字)的值得出大小,则结果就确定了。
2.如果名字是布尔值,则可以不做比较,直接结果是布尔值。
    
'''and'''

    print(1 == 2 and 3)  # False
    print(1 == 1 and False)  # False
  1.and的链接多个条件必须都成立才能成立,如有一个不成立,则结果为False



    print(10 > 3 and 100)  # 100
    print(1 and 10)  # 10    
  2.and的链接多个条件时都是成立,但是里面有一个具体的值,则结果为具体值。
  3.and链接条件的结果最终取决于后面的,最后的值是明确的数据值,则直接返回该数据值。( and 链接多个条件要一个个往后看,是否有不符合条件的,没有则返回为True,有具体数据值,则返回为该具体数据值)
    

    print(1 == 1 and 2 == 2)  # True
    print(True and 1 == 1)  # True
  4.and链接多个条件,且都为表达式都成立,则结果转换为布尔值。
    
'''or'''
   print(1 == 1 or 111)  # True
   print(1 or 10 > 20)  # 1
   print(10 or 100)  # 10
  1.or 链接多个条件只要其中一个成立则结果成立。
  2.or 链接多个条件的判断是取决于前面的条件是否成立,前面是表达式且成立,则返回结果为True,无论后面是数据值还是True都不影响。
  3.or 链接多个条件要是从前往后看,是否有条件成立的,没有则返回为False,有具体数据值,则返回为该具体数据值
    
'''not'''
它的结果肯定是个布尔值

循环结构之while循环

while 条件:
   ( 条件成立后执行的子代码)

1.先判断while后面的条件是否成立,如果成立则执行子代码。
2.子代码运行完毕后,再次回到while后面的条件判断出,判断条件是否成立
3.如果条件成立则执行子代码,完毕又再次回到while后面的条件来判断是否成立
4.如此往复,循环执行,直到while后面的条件不成立刻结束。

eg:
    while True:
        name = input('name>>>:')
        pwd = input('pwd>>>:')
        if name == 'xz' and pwd =='23'
            print("ok!")
        else:
            print('NO')

'''我们可以设计一个计数器来结束while循环执行'''

#定义一个计时器
count = 1
while count < 11:
    print('num:',count)
    count += 1
    '''
        num: 1
        num: 2
        num: 3
        num: 4
        num: 5
        num: 6
        num: 7
        num: 8
        num: 9
        num: 10
      '''
1.设置计时器规定while能循环几次操作。
2.但是会有局限性,如果while子代码里面不确定是否执行成功,但是次数有限,会使程序提前结束。
3.这是while后面条件判断是否结束循环还有在循环体代码中添加关键字( break 、 continue )强制结束循环。   
       

while+break

while True:
    name = input('name>>>:')
    pwd = input('pwd>>>:')
    if name == 'xz' and pwd =='23':
        print('ok')
        #强制结束
        break
        '''结束本break所在的循环体  最近while下的循环体 '''
    else:
        print('no')

一个break只能结束在它所在的循环体代码。
while True:
    print('我是外层的循环')
    while True:
        print('我是内层的循环')
        break  #①
    break #②
    
1.如果位置①和位置②没有break,则结果就为一层“我是外层的循环”,剩下无限循环“我是内层的循环”。
2.如果只有位置①上有break,则结果就为一层“我是外层的循环”和一层“我是内层的循环”这样无限循环。
3.如果位置②和位置①都有break,则结果就只有一层“我是外层的循环”和一层“我是内层的循环”。
 
        

while+continue

# 循环打印1到10   但是到了7就跳过
count = 1
while count < 11:
    if count == 7:
        #让count自增1
        count += 1   # ①
        #跳过本次循环,开始下次循环
        continue
     print(count)
     count += 1
1.该循环打印的结果是 1 2 3 4 5 6 8 9 10
原因是continue具有结束本次循环的,直接开始下次循环的作用,if先判断当 count 为7时就会执行 continue,跳过本次循环。
2.如果没有位置①的代码就会造成count一直为 7,一直出不了continue的循环就是死循环,结果只有1 2 3 4 5 6。
3.加位置①的代码是为了使程序能够执行到while后面的条件不符合后结束循环。

while True:
    print(1)
    while True:
        print(3)
        continue  #①
    continue   #②
1.如果没有位置①代码,则结果是 1 3 3 3 ...
循环一直在子子代码的小循环体内。
2.如果只有位置①的代码,则结果是 1 3 3 3 3...
3.如果都有位置①和位置②的代码,则结果是 1 3 3 3 3 ...
4.原因是continu直接跳出当前循环,开始下一次循环,还是里最近的while循环体,一直循环。

while+else

count = 1
while count <5:
    print("num", count)
    if count == 3:
            break
    count += 1
else:
    print("end")
    
1.else 是等 while 后面的条件正常结束后才执行。
2.当while循环正常执行,中间没有break的时候,会执else后面的语句。
但是如果while语句中有brerak,那么就不会执行else后面的内容了。
3.如果将 else: 去掉,将 print与 while对齐,也会打印出结束循环的效果。但是有没有break都打印。

死循环与全局标志位

1.死循环
count = 10
while True:
    count *= 10 
这是一串死循环的代码,它能使cpu一直在高速运行,长时间这样使电脑发热。最好先避免死循环的发生。
while True:
    name = input('name>>>:')  
计算机需要获取用户的信息,即使在循环中,但是计算机还是有时间去等待,并非高速运行。

2.全局标志位(可以不用)
flag = True
while flag:
    print(1)
    while flag:
        print(3)
        while flag:
            print(2)
            flag = False
在面对 while 里面嵌套 各个 while中,如果不想多个 break来结束各个循环体,我们可以采用全局标志来代替多个break的使用,这只是简化的代码。

作业

1.准确说出下列判断的结果(不要执行代码)
v1 = 1 or 3 1
v2 = 1 and 3 3
v3 = 0 and 2 and 1 0
v4 = 0 and 2 or 1 1
v5 = 0 and 2 or 1 or 4 1
v6 = 0 or False and 1 False

2.编写一个用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序

count = 1
while count < 5:
	name = input('username>>>:')
	qwd = input('password>>>:')
	if name == 'xz' and qwd == '1823':
		print("成功!!!")
		break
	else:
		print("用户登录错误,你还有%s 次登录机会" % (4 - count))
		count += 1
else:
	print("尝试三次错误,你已经没有机会!!!")

3.编写一个用户登录程序
用户如果登录失败 可以无限制尝试
用户如果登录成功 则进入内层循环 获取用户输入的指令 并打印该指令
eg: 用户输入cmd指令 则程序打印'正在执行您的指令:cmd'
给用户提供一个退出命令 用户一旦输入则退出这个程序
eg: 用户输入q指令 则程序先打印该指令再结束

i1 = input('')
while True:
    name = input('username>>>:')
    pwd = input('password>>>:')
    if name == 'xz' and pwd == '123':
        print("成功!!!")
        while i1 != 'q':
            i1 = input('')
            print("正在执行您的指令:%s" % i1)
            continue
        else:
            print(i1)
        break

4.编写猜年龄的游戏(拔高练习 尝试编写)
用户有三次猜测的机会 如果用完则提示用户是否继续尝试
用户输入y则继续给三次机会 如果用户输入q则直接结束程序

import random
# 这里需要导入一个随机数
print('''
-------游戏说明------------
1.输入你的年龄
2.答对恭喜你猜对了!
3.答错了,会提醒你是否继续游戏。
4.按’y‘继续游戏,按’n‘退出游戏
--------------------------
''')

# 定义变量,年龄
age = input("输入年龄>>>:")
age = int(age)
count = 1

# 这是设置循环次数
while count < 4:
    # 这是计算机随机数设置
    computer = random.randint(0, 21)
    if age == computer:
        print("猜对了!!!")
        # 猜对就结束本循环
        break
        # 猜错要另外考虑输入格式’y‘和’n‘的问题
    else:
        print("你已经猜错了%s次,最多猜%s次" % (count, 3 - count))
        count += 1

        # 获取用户输入
        key = input("是否继续游戏(y/n):")
        if key == 'y':
            age = input("输入年龄>>>:")
            computer = random.randint(0, 21)
            if age == computer:
                print("猜对了!!!")
                break
        if key == 'n':
            break
     # 验证一些用户的输入值是否超过三次,超过就结束
    if count % 3 == 0:
        key = input("你已经猜错三次,没有机会猜了!!!是否继续'y'/'n':")
        if key == 'y':
            count = 1
            age = input("输入年龄>>>:")
            computer = random.randint(0, 21)
            if age == computer:
                print("猜对了!!!")
                break
        if key == 'n':
            print('你已退出')
            break