or 和字符串问题
各位大佬,在做判断程序时,使用(if fruit == '西瓜' or '香蕉':),输入任何数字、文字、字母都判断为正确,而变成(if fruit == '西瓜':)则正确判断,请问是哪里有问题,就是想猜多种水果名字,是or用的不对吗,文字类的只能用 xxx in 列表的方式吗?temp = input('猜猜我喜欢的水果:')
fruit = temp
i = 3
while i:
if fruit == '西瓜' or '香蕉':
print('bingo')
fruit = input('还有吗:')
else:
fruit = input('不对哦,再猜一下:')
i -= 1
print('游戏结束') 本帖最后由 疾风怪盗 于 2020-8-28 17:14 编辑
这个不能这么写的吧
if fruit == '西瓜' or '香蕉':
改成这样
if (fruit == '西瓜') or(fruit == '香蕉'):
temp = input('猜猜我喜欢的水果:')
fruit = temp
i = 3
while i:
if fruit == '西瓜' or fruit=='香蕉': #除了xxx in 列表外也可以这样
print('bingo')
fruit = input('还有吗:')
else:
fruit = input('不对哦,再猜一下:')
i -= 1
print('游戏结束')
原因分析:==优先级高于or,所以你fruit==‘西瓜’得到的结果是bool型,又or了个字符串,才会引起错误 疾风怪盗 发表于 2020-8-28 17:13
这个不能这么写的吧
改成这样
这里也不用加小括号 昨非 发表于 2020-8-28 17:23
这里也不用加小括号
我知道,这不是为了更加清晰么,我一般写的时候都加上,读起来舒服点 疾风怪盗 发表于 2020-8-28 17:25
我知道,这不是为了更加清晰么,我一般写的时候都加上,读起来舒服点
嗯嗯,就是现在有一点儿不太清楚,输入的所有非零数字都会被判断成bool True 吗? 本帖最后由 sunrise085 于 2020-8-28 17:29 编辑
有两个问题你没有搞清楚
第一、==的优先级要高于or,你这样写,会先判断fruit=='西瓜',然后将结果与 '香蕉' 进行or运算,只要输入的不是 '西瓜',那么该表达式的结果都是 '香蕉',若输入的是'西瓜',则表达式的结果是 '西瓜' ,也就是说if语句的条件永远成立
第二、判断fruit是不是两者中的一个,不能这样用 or 运算,即使后面加上括号,写成if fruit == ('西瓜' or '香蕉'): 也不对。因为括号内的or运算结果永远是 '西瓜',也就是说其实是在判断 fruit 是不是 '西瓜'
正常的应该这样写:
if fruit == '西瓜' or fruit =='香蕉':
或者这样写
if fruit in [ '西瓜' ,'香蕉']: 昨非 发表于 2020-8-28 17:26
嗯嗯,就是现在有一点儿不太清楚,输入的所有非零数字都会被判断成bool True 吗?
他这么写,不管输入任何东西,if '香蕉' 就是判断为true的吧,又因为是or,所以就取了真,判断一直成立 疾风怪盗 发表于 2020-8-28 17:30
他这么写,不管输入任何东西,if '香蕉' 就是判断为true的吧,又因为是or,所以就取了真,判断一直成立
嗯,明白了,谢谢 if 后面只要不是None或者是False,都是算作True 陈晓奇努力学习 发表于 2020-8-28 17:45
if 后面只要不是None或者是False,都是算作True
你说的不够全面
为假的情况有:数字0(包含 0 和 0.0),空字符串、空列表、空元组、空字典、None 、False等 昨非 发表于 2020-8-28 17:22
原因分析:==优先级高于or,所以你fruit==‘西瓜’得到的结果是bool型,又or了个字符串,才会引起错误
你好,你的意思是我这样写的if是:if true or 字符串?有点不太理解,因为我把这个( or '香蕉')去掉后就正确判断了,==的优先级高,那为什么改成(if fruit == '西瓜':)则程序能正确判断,‘西瓜’不是bool值吗?谢谢 sunrise085 发表于 2020-8-28 17:27
有两个问题你没有搞清楚
第一、==的优先级要高于or,你这样写,会先判断fruit=='西瓜',然后将结果与 '香 ...
你好(然后将结果与 '香蕉' 进行or运算,只要输入的不是 '西瓜',那么该表达式的结果都是 '香蕉',)请问为什么非西瓜都是香蕉,不太理解,另外按其他回复,香蕉变成了字符串,但是我输入数字为啥也变成正确? if fruit == '西瓜' or '香蕉':
你这个判断语句,要理解的话,相当于是if fruit == '西瓜' if '香蕉':
然后fruit是变量,输入的内容,前面相当于是拿输入的内容和西瓜来判断真假,但是问题出在后面,if '香蕉' 永远是真的
那也就变成了,前半句可能真可能假,看你输入的内容,后半句永远为真
or是或的意思,假或真,必然得到结果真
所以不管你输入什么,因为有if '香蕉'的存在,永远判断为真
所以需要改成:
if fruit == '西瓜' or fruit =='香蕉':
这样才能让变量去和西瓜、香蕉做判断 goodwar7 发表于 2020-8-28 21:02
你好,你的意思是我这样写的if是:if true or 字符串?有点不太理解,因为我把这个( or '香蕉')去掉后就 ...
我的意思是,你输入除“西瓜”以外的任何东西,or的前面都是bool型的False,
而if false or 【后半句】,那么if判断的结果都是等效于输入香蕉(这个语法7楼的老师讲的很清楚了,我没有刻意这么试过,当龟屁股吧{:10_277:})
也就是,无论输入什么,if后恒为True 疾风怪盗 发表于 2020-8-28 21:18
你这个判断语句,要理解的话,相当于是
然后fruit是变量,输入的内容,前面相当于是拿输入的内容和西瓜 ...
感谢,这样明白了些,顺便能解答下面的吗{:5_110:}:
temp = input('宝宝最喜欢的人:')
talk = temp
i = 4
name = ['峰峰','伊伊','星星']
while i:
if talk in name:
print('嘿嘿,没错!')
talk = input('还有吗:')
else:
talk = input('再猜猜:')
i -= 1
print('讨厌,不玩了!!!')
宝宝最喜欢的人:峰峰
嘿嘿,没错!
还有吗:星星
嘿嘿,没错!
还有吗:伊伊
嘿嘿,没错!
还有吗:峰峰
嘿嘿,没错!
还有吗:星星
讨厌,不玩了!!!
>>>
为什么最后一行不是:嘿嘿,没错!讨厌不玩了!!!
实在想不出哪里错了。。。为什么会有这样的错误?感觉自己写的都挺正确的。 if -1:
print('-1')
if 0:
print('0')
你把上面这个代码运行一下看看,就发现-1是判断为true,0是判断为false
i -= 1
你的变量i在经过几次-1后,你猜到星星时已经变为0了,while就不执行了,执行print('讨厌,不玩了!!!') 疾风怪盗 发表于 2020-8-28 21:18
你这个判断语句,要理解的话,相当于是
然后fruit是变量,输入的内容,前面相当于是拿输入的内容和西瓜 ...
正解!! goodwar7 发表于 2020-8-28 21:02
你好,你的意思是我这样写的if是:if true or 字符串?有点不太理解,因为我把这个( or '香蕉')去掉后就 ...
除空字符串外字符串永远是true goodwar7 发表于 2020-8-28 21:31
感谢,这样明白了些,顺便能解答下面的吗:
temp = input('宝宝最喜欢的人:')
顺序问题:
因为你的运行方式:
先运行嘿嘿不错
再运行还有吗
所以按照这个模式一直下去就是这样,所以最后一定会变成先print(嘿嘿不错),在问还有吗,最后才结束
页:
[1]
2