逻辑与循环

1.Python环境下的逻辑关系

以下先通过数字和字符串进行比较,探寻Python环境中计算机对逻辑关系的判断:

print(3<6)
print(3>6)
print('北京'=='北京')
print('北京'=='首都')
#结果为:True
#        False
#        True
#        False

由以上结果可以看出,逻辑成立则为True,不成立则为False。这个判断逻辑的过程叫做布尔运算,True和False为布尔值。
在Python的环境中,逻辑假(False)的数量是有线的,并且除了假的,就一定是真(True)的。

FalseTrue
0非0数字
空字符串:’’非空字符串,如:‘False’
空列表:[]非空列表,如:[‘a’,0]
:空字典: {}非空字典,如:{‘a’:0,‘b’:0}
None——

此外,bool()函数可以用来直接判断逻辑是否为真,示例如下:

a='a';
b=''
c=['a',0]
d={'a':0,'b':0}
print(bool(a),bool(b),bool(c),bool(d))
#结果为:True False True True

2.条件语句与布尔值间的运算

1)if条件语句

if语句常用于编程之中,判断其后的条件是否成立,成立则执行之后的语句,否则直接跳过if后的内容。if可以单独使用,也可以搭配elif或else使用。其用法示例如下:

i=int(input('输入一个数字:'))
#通过inpute输入计算机的是str类型
if i==1:
	a='正数'
	print(a,i)
	#如果输入是1,输出为:正数 1
elif i==-1:
	a='负数'
	print(a,i)
	#如果输入是-1,输出为:负数 -1
else:
	print('Error')
	#如果输入其它数,输出为:Error

需要注意的是,在Python环境下,缩进具有具体意义,因此书写格式不规范,会引起计算机报错或运行逻辑出问题。

2)布尔值之间的运算

多数情况下,我们书写代码所用到的条件比较复杂,比如需要多个条件同时成立,这时就需要布尔值之间进行运算,而常见的运算有五种,分别为and,or,not,in,not in。

①and

and表示“与”逻辑,前后两个条件同时成立为真,否则为假。其示例如下:

print(1>2 and 1>0#结果为:False
print(1<2 and 2<3)
#结果为:True

②or

or表示“或”逻辑,两个条件之中只需要成立一个即为真。其示例如下:

print(1<0 or 2<1)
#结果为:Fales
print(1<0 or 2>1)
#结果为:True
print(1>0 or 2>1)
#结果为:True

③not

not表示逻辑“否”,条件成立则为假,反之为真。示例如下:

print(not 2<1)
#结果为:True
print(not 2>1)
#结果为:False

④in

in用于判断一个元素是否在一堆元素之中,因此in是判断元素是否在列表中的常用逻辑。示例如下:

a=['a',90,0,'go']
print('a' in a)
#结果为:True
print(90 in a)
#结果为:True
print('g' in a)
#结果为:False

观察最后一段代码可以发现,尽管字符“g”存在于列表元素“go”里,逻辑依然是“假”,这是因为计算机进行比较的最小单位是元素,而“ ‘g’==‘go’ ”是不成立的。

单纯的字符串也是列表,因此同样可以判断字符是否在字符串之中:

print('g' in 'go to','g' in ['g','o',' ','t','o'])
#实际上这两种方式表达的意义相同
#结果为:True True

此外,in也可以用于直接判断元素是否在字典的中,但无法直接判断元素是否在字典的中,示例如下:

fc={'a':90,'b':80,'c':60}
print('a' in fc,90 in fc)
#结果为:True False

如果需要判断元素是否为字典值,则需要用字典值组成新的数组,示例如下:

fc={'a':90,'b':80,'c':60}
print(90 in list(fc.values()))
#结果为:True

此外,键和值类型相同的字典,需要进行in逻辑判断时,最好采用将键和值分开放入两个列表再进行判断的方式,以免出现混淆。

⑤not in

not in与in的用法完全一样,区别在于逻辑刚好相反。in逻辑为真,not in为假,反之not in为真。例如:

a=['a',90,0,'go']
print('a' not in a)
#结果为:False
print(90 not in a)
#结果为:False
print('g' not in a)
#结果为:True

3)逻辑逻辑的组合

以上的五种运算在Python环境中优先级不同,为了避免运算顺序有误,可以适当应用括号()来规范顺序。比如我们写一段判断闰年的代码:
判断方法:
1.普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
2.世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
3.对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年。

while True:
#先设定一个死循环
    year = int(input('输入年份:'))
    if (year%4==0 and year%100!=0)or(year%100==0 and year%400==0)\
            or(year%3200==0 and year%172800==0):
       #“\”可以将两行的内容衔接起来
        print(str(year)+"年是闰年")
    else:
        print(str(year)+"年不是闰年")

pass语句

有些时候,我们需要在条件成立的情况下什么都不操作,示例如下:

#判断输入的数字是不是5,如果是则什么都不操作
i=int(input('请输入数字'))
if i==5:
    
else:
    print('i不是5')

运行结果为:在这里插入图片描述
上述的结果可以看出,如果希望计算机什么都不做而在if条件句后什么都不写,计算机会报错。这时候就需要我们的pass语句了:

i=int(input('请输入数字'))
if i==5:
   pass
else:
    print('i不是5')

运行结果为:在这里插入图片描述
这样一来就得到我们需要的结果了。

pass语句经常会与if语句结合以避免不需要操作的地方什么都不输入引起计算机报错,但需要注意的是,如果if逻辑之下还有其他的任务需要执行,那么pass就会变得毫无意义,比如:

i=5
if i==5:
    print(i)
    pass
    print(i)
else:
    print('i不是5')
    #结果为:5
    #        5 

在此时pass和空行就没有区别了。

3.循环体系

以上我们认识了逻辑运算和条件语句,接下来要就要用它们进行一定的结合。在Python中,循环依旧非常常见。

1)for循环

for循环全称叫做for…in…循环,在循环开始前需要指定一个参数和一个作为遍历的对象列表(或字典)。循环体的缩进需要保持一致,其语法如下:

for 参数 in 列表或字典:
	循环体

下面我们通过举例说明for循环的一些规则:

i=7
for i in range(5,8):
	print(i)
#结果为:5
#	    6
#		7

上述结果表明,在循环中出现的参数,无论之前是否已经被赋值,都将会被重新被依次赋值为“in”后面列表中的元素。在循环正常结束时,参数的值为列表的末位元素值。

i=7
fc={'a':90,'b':80,'c':60}
for i in fc:
    print(i,fc[i])
#结果为:a 90
#		 b 80
#		 c 60
fc={'a':90,'b':80,'c':60}
for i in list(fc.keys()):
    print(i,fc[i])
#结果为:a 90
#		 b 80
#		 c 60

上述对比表明当in后面是字典时,计算机会按照字典键值进行遍历,其结果与先由字典键值组成新的列表,在对这个列表进行遍历是一样的。此外,如果“in”后面跟的是字符或字符串,计算机也是按照对应的字符串列表进行对应的输出。

for循环在进入循环之前就已经知道循环的具体次数和顺序,因此for循环一般不会出现死循环现象。

2)while循环

while循环,即条件成立就循环,因此一般在进入循环之前需要对要使用的参数进行赋值,并且计算机不知道循环执行的具体次数,也不会对参数进行自动的操作。只有当条件不满足之后,循环才会结束。其语法为:

while 条件:#这里的条件可以是复杂的布尔值运算
	循环体
	#循环体要保持相同的缩进

相比于for循环,while的语法更加简单,但同时也出现了陷入死循环的风险。例如:

import time
#声明函数
a=3
b=4
while a<b:
	time.sleep(1)
	print('a<b')

运行以上代码,我们会发现计算机每隔一秒会自动输出一个“a<b”,并且会一直执行下去,这就是因为我们没有设置约束条件导致while的循环永远不会结束。因此想要避免死循环,正确的约束条件必不可少。例如:

a=3
b=4
while a<b:
	print('a<b')
	a+=1

这样一来,计算机会在输出一次“a<b”之后,不再满足“a<b”的执行条件从而跳出循环。

需要格外注意的一点是,在一部分软件中,即使条件不成立,循环体依然会执行一次,例如:

a=4
b=4
while a<b:
	print('a<b')

这里依然会输出一次“a<b”。书写代码时要注意,不要因为软件的不同引发输出结果的差异。

3)循环中的特殊语句

除了让循环正常结束,我们还可以设置一些条件让循环提前结束、改变循环体制性顺序等操作,这自然少不了一些特殊语句的配合:

①break语句:跳出循环

再循环体的执行过程中,如果碰到break语句,计算机会立刻跳出当前循环执行之后的代码。例如:

j=0
list='python'
while j<6:
    j+=1
    for i in range(7):
        if i<j:
            print(list[i],end='')
        else:
            print('')
            break
#结果为: #p
        #py
        #pyt
        #pyth
        #pytho
        #python

print()函数每执行过一次就会产生一个换行,使用“ end="" ”语句可以去掉换行,让多个需要打印的内容在同一行显示。

上例中可以看出,break可以跳出一层循环而回到外层循环。这个性质决定了它可以提前结束循环,也可以走出死循环。因此break语句可以与while的死循环搭配,实现只有满足特定条件才会跳出循环的程序。例如有无数次机会的猜数游戏:

figure=7
n=0
while True:
    guss=int(input('输入一个数字'))
    if (guss < 0 or guss > 100):
        print('不在区间!')
    elif (guss<figure):
        print('猜小了!')
    elif (guss>figure):
        print('猜大了!')
        n+=1
    else:
        print('猜对了!')
        break

只有当输入值是7才会结束循环。break语句的存在,让计算机能够进行理论上可以达到循环无限次的未知次数的循环。

② continue语句:回到起点

continue可以立即跳过当前循环内没执行完的部分回到循环的开始,并且保留当前的参数值。continue不会跳出本层循环,因此限制条件依然必不可少。示例如下:

#找到“python”中掺杂的单词:
for i in "payftvhgoqn":
    if i=='p'or i=='y'or i=='t'or i=='h'\
          or i=='o'or i=='n':
        continue
    print(i, end="")
 #结果为:afvgq

③else语句

else语句除了搭配if使用,也可以搭配循环使用。在循环正常结束(没有遇到break)以后,会自动执行else语句,因此也可以视为else本身也是循环的一部分。此外,else的执行也可以视为循环正常结束的标志。示例如下:

#找到“Python”并判断是否正常退出:
for i in "paybtchdoen":
    if not(i=='p'or i=='y'or i=='t'or i=='h'\
          or i=='o'or i=='n'):
        continue
    print(i, end="")
else:
    print('')
    print("程序正常退出")
    #结果为:python
    #       程序正常退出

了解了基础的逻辑与循环之后,我们需要学会将循环和条件、逻辑运算相结合,因为在编程中,多数情况下这三者是结伴出现的。

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值