python学习第二天 条件循环语句

4 条件语句

4.1 if语句

if expression
	expr_true_suite
if 语句的条件代码块只有当条件表达式expression的结果为真时才执行,否则将继续执行紧跟在该代码块后面的语句,就是说if代码的内容暂不执行了。
单个if语句中的ecpression的条件表达式可以通过布尔操作符and,or 和not实现多重条件判断。
if 2>1 and not 2 > 3:
    print('Correct Judgement !')
Correct Judgement !

4.2 if -else 语句

if expression
	expr_true_suite
else
	expr_true_suite
python提供的与if搭配使用的else,如果if语句的条件表达式结果布尔值为假,
那么程序将执行else语句后面的代码。
if语句支持嵌套,即在一个if语句中嵌入另一个if语句, 从而构成不同层次的
选择结构。python使用缩进而不是大括号或者其他符号来标记代码块的边界,
所以要特别注意else的悬挂问题。
temp = input("猜一猜小姐姐想的是哪个数字?")
guess = int(temp)#input 函数将接收的任何函数类型默认为是str
if guess ==666:
    print("你太了解小姐姐的心思了!")
    print("猜正确也没有奖励!哈哈")
else:
    print("猜错了,小姐姐现在心里想的是666!")
print("游戏结束,不玩儿啦!")
hi = 6
if hi > 2:
    if hi > 7:
        print('好棒!好棒!')
else:
    print('切!')
temp = input("不妨猜猜小哥哥现在心里想的是哪一个数字:")
guess = int(temp)
if guess > 8:
    print('大了,大了!')
else:
    if guess == 8:
        print('你这么理解小哥哥的心思吗?')
        print("哼,理解也是没用的!")
    else:
        print("小了,小了!")
        
print("游戏结束了,不玩了!")

4.3 if - elif - else 语句

if expression1:
	expr1_true_suite
elif expression2:
	expr2_true_suite
	.
	.
	.
elif expressionN:
	exprN_true-suite
else:
	expr_false_suite
elif 语句意思是else if,检查多个表达式是否为真,并在为真值时执行相应代码块中的代码。

4.4 assert 关键词

assert 这个关键词称之为“断言”,当这个关键词后边的条件为False时,程序会自动崩溃并抛出Assertion Error的异常
在进行单元测试的时候,可以用来在程序中插入检查点,只有条件为True时,才能让程序正常工作。
my_list = ['lsgogroup']
my_list.pop(0)
aeesrt len(my_list) >0

AssertionError
assert 4>7

AssertionError
其中pop()方法函数用于移除列表中的一个元素(默认是最后一个元素),并且返回该元素的值。上述列表只有一个元素,所以不论是最后一个还是第一个都将被移除掉,所以剩下空的列表,最后assert的条件为假,发生报错。

5 循环语句

5.1 while 循环

while语句最基本的形式包括一个位于顶部的布尔表达式,下面是属于while 的代码块缩进语句。
while 布尔表达式:
	代码块

while循环代码块会一直循环执行,直到布尔表达式的值为假。

count = 0
while count < 3:
    temp = input("不妨猜猜小哥哥现在心里想的是哪一个数字:")
    guess = int(temp)
    if guess > 8:
        print('大了,大了!')
    else:
        if guess == 8:
            print('你这么理解小哥哥的心思吗?')
            print("哼,理解也是没用的!")
        else:
            print("小了,小了!")
    count += 1
print("游戏结束了,不玩了!")

不妨猜猜小哥哥现在心里想的是哪一个数字:2342
大了,大了!
不妨猜猜小哥哥现在心里想的是哪一个数字:234
大了,大了!
不妨猜猜小哥哥现在心里想的是哪一个数字:432
大了,大了!
游戏结束了,不玩了!
count从0开始,一直到2总共三次,所以循环体运行三次,直到count是3的时候,条件不满足,退出while循环体,执行最后一个print语句。
string = 'abcd'
while string:
    print(string)
    string = string[1:]
abcd
bcd
cd
d

5.2 while-else 循环

while 布尔表达式:
	代码块
else:
	代码块
当while循环正常执行不满足布尔表达式时候,执行else模块。但是如果while循环整中执行了跳出训话语句的话,比如break,将不执行else代码块的内容。
count = 0
while count < 5:
    print("%d is less than 5"% count)
    count = count + 1
else:
    print("%d is not less than 5"%count)

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
count = 0
while count < 5:
    print('%d is less than 5'%count)
    count +=1
    break
else:
    print('%d is not less than 5'% count)
print(count) 				

0 is less than 5
1
即使count的数增加到1,此时经过break跳出while循环体,不再执行循环体代码块。

5.3 for 循环

for循环是迭代循环,它会遍历任何有序序列,如str,list,tuple等,也可以遍历任何可迭代对象,如dict。
每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
for i in 'ILOVEYOU':
    print(i,end =' ')	
I L O V E Y O U 
member = ['张三','李四','爱德华','刘能','赵四']
for name in member:
    print( name)
print()
for name in range(len(member)):
    print(member[name])
张三
李四
爱德华
刘能
赵四

张三
李四
爱德华
刘能
赵四
dic = {'a':1,'b':2,'c':3,'d':4}
for key,value in dic.items():
    print(key,value,sep = ':',end =' ')
print()    
for key in dic.keys():
    print(key,end =' ')
print()
for i in dic.values():
    print(i,end =' ')

a:1 b:2 c:3 d:4 
a b c d 
1 2 3 4     	

5.4 for -else 循环

for 迭代变量  in 可迭代对象:
	代码块
else:
	代码块
当for 循环正常执行的情况下,执行else输出,如果for循环中执行了特殊的语句,比如break等,将不执行else代码块的内容,与while-else的语句一样。
for num in range(10,20):
    for i in range(2,num):
        if num % i == 0:
            j = num / i
            print('%d 等于 %d*%d' %(num,i,j))
            break
    else:
            print(num,'是一个质数')
    	
	 	
10 等于 2*5
11 是一个质数
12 等于 2*6
13 是一个质数
14 等于 2*7
15 等于 3*5
16 等于 2*8
17 是一个质数
18 等于 2*9
19 是一个质数	 	

如果else对应的不是for,而是if,则结果如下:

for num in range(10,20):
    for i in range(2,num):
        if num % i == 0:
            j = num / i
            print('%d 等于 %d*%d' %(num,i,j))
            break
        else:
            print(num,'是一个质数')

10 等于 2*5
11 是一个质数
11 是一个质数
11 是一个质数
11 是一个质数
11 是一个质数
11 是一个质数
11 是一个质数
11 是一个质数
11 是一个质数
12 等于 2*6
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
13 是一个质数
14 等于 2*7
15 是一个质数
15 等于 3*5
16 等于 2*8
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
17 是一个质数
18 等于 2*9
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数
19 是一个质数           

5.5 range()函数

range([start],stop,[step = 1])
这个函数有三个参数,其中的中括号中的参数是可选的,step = 1表示默认值是1,代表步长的意思,这个函数生成一个从start开始到stop结束的数字序列,序列包含start,不包含stop的值。
for i in range(2,9):
    print(i, end = ' ')
print()
for j in range(1,10,2):
    print(j, end =' ')
2 3 4 5 6 7 8 
1 3 5 7 9  

5.6 enumerate()函数

enumerate(sequence,[start = 0])
sequence:一个序列、迭代器或其他支持迭代对象,start下标起始位置,返回的是enumerate(枚举)对象。
seasons = ['Spring','Summer','Fall','Winter']
lst = list(enumerate(seasons))
print(lst)
print()
lst = list(enumerate(seasons,start = 1))
print(lst)

[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
languages = ['Python','R','Matlab','C++']
for language in languages:
    print('I love',language)
print('Done')
for i,language in enumerate(languages,2):
    print(i, 'I love', language)
print('Done')

I love Python
I love R
I love Matlab
I love C++
Done
2 I love Python
3 I love R
4 I love Matlab
5 I love C++
Done

5.7 break 语句

break语句可以跳出当前所在层的循环。
import random
secret = random.randint(1,10)#[1,10]之间的随机数

while True:
    temp = input("\n不妨猜一猜小哥哥现在心里想的是那个数字:")
    guess =  int(temp)
    if guess > secret:
        print('\n大了,大了')
    else:
        if guess ==secret:
            print("\n你这样理解小哥哥的心思啊?")
            print("\n哼,猜正确也是没有奖励的")
            break
        else:
            print( '\n小了,小了')
            
print('\n游戏结束,不玩儿啦!')            
	
不妨猜一猜小哥哥现在心里想的是那个数字:4

小了,小了

不妨猜一猜小哥哥现在心里想的是那个数字:5

你这样理解小哥哥的心思啊?

 哼,猜正确也是没有奖励的

游戏结束,不玩儿啦!	

5.8 continue

	continue函数是终止本轮循环并开始下一轮循环。	

for i in range(10):

    if  i%2 != 0:
        print(i,end = ' ')
        continue
    i = i+2
    print(i,end = ' ')		
    2 1 4 3 6 5 8 7 10 9     

5.9 pass语句

pass语句的意思是不做任何事情,如果你在需要有语句的地方不写任何语句,那么解释器就会报错,而pass语句就是用来解决这个的。

def a_func():
   
SyntaxError: unexpected EOF while parsing   
def a_func():
    pass
这个函数就不会出现报错,只是不做任何动作而已。

5.10 推导式

列表推导式

[ expr for value in collection [if condition] ]
x = [-4,-2,0,2,4]
y = [a*2 for a in x]
print(y)	
[-8, -4, 0, 4, 8]
x = [i**2 for i in range(1,10)]
print(x)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
x = [(i,i**2)for i in range(6)]

y = [i for i in range(100) if (i%2) !=0 and (i%3) ==0]

a = [(i,j) for i in range(0,3) for j in range(0,3)]

b = [(i,j) for i in range(0,3) if i < 1 for j in range(0,3) if j >1]
print(x)
print()
print(y)
print()
print(a)
print()
print(b)

[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

[(0, 2)]

元祖推导式

a = (x for x in range(10))
print(a)
print()
print(tuple(a))
<generator object <genexpr> at 0x0000000007D4DF90>

(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

字典推导式

b = {i:i%2 ==0 for i in range(10) if i %3 ==0}
print(b)
{0: True, 3: False, 6: True, 9: False}

集合推导式

c = {i for i in [1,2,3,4,5,5,6,4,3,2,1]}
print(c)
{1, 2, 3, 4, 5, 6}

其它

d = 'i for i in "I LOVE LSGOGROUP"'
print(d)
print()
e = (i for i in range(10))
print(e)
print()
print(next(e))
print()
print(next(e))
print()
for each in e:
    print(each,end =' ')   
    
print()
print()
s =sum([i for i in range(101)])
print(s)
print()
t = sum((i for i in range(101)))
print(t)
i for i in "I LOVE LSGOGROUP"

<generator object <genexpr> at 0x0000000007D529E0>

0

1

2 3 4 5 6 7 8 9 

5050

5050

5.11 综合例子

passwdlist = ['123','345','890']
valid = False
count = 3
while count > 0:
    password = input('enter password')
    for item in passwdlist:
        if password ==item:
            valid = True
            break
    if not valid:
        print('invalid input')
        count -=1
        continue
    else:
        break

练习题1:编写一个python程序来查找那些可以同时被7和5整除的数字,介于1500和2700之间。

num = [i for i in range(1500,2700) if i %7 ==0 and i%5 ==0]
print(num) 
[1505, 1540, 1575, 1610, 1645, 1680, 1715, 1750, 1785, 1820, 1855, 1890, 1925, 1960, 1995, 2030, 2065, 2100, 2135, 2170, 2205, 2240, 2275, 2310, 2345, 2380, 2415, 2450, 2485, 2520, 2555, 2590, 2625, 2660, 2695]

练习题2:题目描述
  话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
  然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
输入格式
  输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2<=100;t<=300;s<=10;l<=10000且为v1,v2的公倍数)
输出格式
  输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
  第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)

import math
v1,v2,t,s,l = map(int,input().split())
if v1<=100 and v2<=100 and t<=300 and s<=10 and l<=10000 and l%v1==0 and l%v2==0:
    s1,s2,i = 0,0,0
    while s1<l and s2<l:
        s1,s2,i=v1+s1,v2+s2,i+1
        if s1==l or s2==l:
            break
        elif s1-s2>=t:
            s2,i=s2+v2*s,i+s
    if s1>s2:print('R')
    if s1==s2:print('D')
    if s1<s2:print('T')
    print(i)
    
10 5 5 3 20
T
4

你可能感兴趣的:(python学习第二天 条件循环语句)