鱼C论坛

 找回密码
 立即注册
查看: 1309|回复: 3

[已解决]关于if的一些微妙小问题

[复制链接]
发表于 2020-12-30 19:54:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
是这样的,其实不只今天,以前也有几次遇到这种问题:
def make_album(singer, album, songs=None):
    a = {'singer' : singer, 'album' : album}
    if songs:
        a['songs'] = songs
    return a
b = True
while b:
    a_singer = input("Enter a singer name here. ")
    a_album = input("Enter one of his/her albums here. ")
    ques = input("Would you like to tell us how many songs are in that album?(y/n) ")
    if ques == 'y' or 'Y': # 问题出在这里,也许下面那个if也会有问题。
        a_songs = input("Enter the number of the songs here. ")
    else:
        askif = input("Would you like to fill this poll again?(y/n) ")
        if askif == 'n' or 'N':
            b = False
e = make_album(a_singer, a_album, a_songs)
print(e)
代码中的注释部分,我没明白为什么我输入的明明不是y或Y,他仍然回执行他下面缩进级里的东西。
下面那边还有一个if,我怀疑那个也会出现相同的问题。
这是什么原因导致的呢?
应该如何设计条件比较好呢?
最佳答案
2020-12-30 20:36:44
这样改:
if ques in ['y', 'Y']:
非空字符串都可以看做True,所以即使ques不是y,整个if也为True,会执行if下面的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-30 20:36:44 | 显示全部楼层    本楼为最佳答案   
这样改:
if ques in ['y', 'Y']:
非空字符串都可以看做True,所以即使ques不是y,整个if也为True,会执行if下面的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-30 20:38:21 | 显示全部楼层
suchocolate 发表于 2020-12-30 20:36
这样改:

非空字符串都可以看做True,所以即使ques不是y,整个if也为True,会执行if下面的代码。

感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-30 20:44:17 From FishC Mobile | 显示全部楼层
这是你写法的问题,你这样写:
 if ques == 'y' or 'Y':
相当于
 if (ques == 'y') or 'Y':
不管条件ques == 'y'是否成立,条件'Y'总是成立的,所以总是会执行该if分支下的语句,这是新手常犯的错误,正确写法为:
 if ques == 'y' or ques == 'Y':
,该写的不能省。简便写法为
 if ques in ('y', 'Y'):
或者
 if ques.lower() == 'y':
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 21:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表