初学python:由if-else引出的bool类型问题

初学python,有关if-else的一个小问题

今天想练练python,试试if-else语句和c语言有何不同。先上一个自己定的题目:

输入天气好坏和是否吃了午饭,根据不同的场景,开启尬聊模式。
天气 - – 好、坏
是否吃过饭 - – 是、否
天气很好,没吃午饭 - ---- 今天天气不错,一会一起去吃烧烤怎么样
天气不好,没吃午饭 - ---- 一会一起去吃烧烤怎么样
天气很好,吃了午饭 - ---- 今天天气不错
天气不好,吃了午饭 - ---- ……

嗯,感觉这个应该挺简单的,就用if-else嵌套做吧。以下是我第一次写的原代码:

print('王明抬头看了看天,貌似随意地问道:“小馥,你吃过午饭了吗?”')
weather = input("请输入天气状况,用数字1代表很好,数字0代表不好:")
lunch = input("请输入是否吃过午饭,用数字0代表没吃,数字1代表吃过了:")
print('小馥低下头,说:')
if weather == 1:
    if lunch == 0:
        print('“还没吃”')
        print('"今天天气不错,一会一起去吃烧烤怎么样"')
    else:
        print('“吃过了”')
        print('"今天天气不错"')
else:
    if lunch == 0:
        print('“还没吃”')
        print('"一会一起去吃烧烤怎么样"')
    else:
        print('“吃过了”')
        print('"……"')

感觉没问题,运行:
在这里插入图片描述
这结果明显有问题,应该输出的是“今天天气很好”,可是却输出了“…”。再看代码,肯定是在判断天气时出错了。再用天气不好、没吃饭试试:
在这里插入图片描述
enmmmmm…
哪里的问题呢。。。
目前来看,语法应该没什么问题,否则应该不会出结果。那是不是输入值出错了?先用以下代码测试一下:

weather = input("请输入天气状况,用数字1代表很好,数字0代表不好:")
print(type(weather))

运行结果如下:
第一次测试结果
我的天,居然是str格式的。。。。看来要类型转换一下,把它转为int型就行了。如果我就此转为int型,估计也不会有下面的问题,更不会兴趣大发的跑来写这个。
我偏不,我突然想把它转为bool型!先用下面这段简单的代码试试。

weather = bool(input("请输入天气状况,用数字1代表很好,数字0代表不好:"))
if weather:
	print('天气好')
else:
	print('天气不好')

在这里插入图片描述
??????
我记得bool型中,0代表假,其它数字代表真;if weather为真,输出天气好,否则输出天气不好。我输入了0,代表weather为假,应该输出天气不好。这。。。什么情况?
难道我使用的bool()有问题?先用最简单的方法试一下:

a = bool(0)
print(type(a))
print(a)

在这里插入图片描述
没问题啊,0就是假啊,难道上段代码这段有些不一样?那再试试上段代码中的weather是什么数据类型:

weather = bool(input("请输入天气状况,用数字1代表很好,数字0代表不好:"))
print(type(weather))
print(weather)

在这里插入图片描述
-----------黑人问号.jpg-----------
数据类型就是bool型,输入的是0,为何值却是真????
经过仔细思考(上网百度)后,我找到了原因:

python中,bool是int的子类(继承int),故 True == 1 False == 0 是会返回Ture的

哦,不是特别懂… …
是不是可以理解为有值是真,无值才是假?试试:

print('王明抬头看了看天,貌似随意地问道:“小馥,你吃过午饭了吗?”')
weather = bool(input("请输入天气状况,天气好输入1,不好请直接回车:"))
lunch = bool(input("请输入是否吃过午饭,吃过了输入数字1,没吃过请直接回车:"))
print('小馥低下头,说:')
if weather:
    if lunch:
        print('“吃过了”')
        print('"今天天气不错"')
    else:
        print('“还没吃”')
        print('"今天天气不错,一会一起去吃烧烤怎么样"')
else:
    if lunch:
        print('“吃过了”')
        print('"……"')
    else:
        print('“还没吃”')
        print('"一会一起去吃烧烤怎么样"')

如果想表示为真,则输入数字,否则直接回车。这样,应该就能很好的使用bool类型了。
在这里插入图片描述
完美!
话说早知道bool这么坑,直接用0和1就行了。。。。

Python中的if-else语句有三种形式,分别是if语句、if-else语句和if-elif-else语句。这些语句用于根据条件的真假执行不同的代码块。if语句只有一个条件,如果条件为真,则执行if后面的代码块;如果条件为假,则跳过if后面的代码块。if-else语句有两个代码块,如果条件为真,则执行if后面的代码块;如果条件为假,则执行else后面的代码块。if-elif-else语句有多个条件,每个条件都会被依次判断,如果某个条件为真,则执行对应的代码块;如果所有条件都为假,则执行else后面的代码块。elifelse必须和if一起出现,并且要正确配对。在判断条件时,Python会根据表达式的结果判断其真假。布尔类型bool)只有两个值,True和False,Python将True视为真,将False视为假。对于数字,Python将0和0.0视为假,将其他值视为真。对于其他类型,当对象为空或为None时,Python将其视为假,其他情况视为真。[1] 以下是一个示例,展示了不同类型的表达式在if-elif语句中的判断结果: b = False if b: print('b是True') else: print('b是False') n = 0 if n: print('n不是零值') else: print('n是零值') s = "" if s: print('s不是空字符串') else: print('s是空字符串') l = [] if l: print('l不是空列表') else: print('l是空列表') d = {} if d: print('d不是空字典') else: print('d是空字典') def func(): print("函数被调用") if func(): print('func()返回值不是空') else: print('func()返回值为空') 运行结果: b是False n是零值 s是空字符串 l是空列表 d是空字典 函数被调用 func()返回值为空 这个示例展示了不同类型的表达式在if-elif语句中的判断结果。根据条件的真假,不同的代码块被执行。[3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值