鱼C论坛

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

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

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

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

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

x
是这样的,其实不只今天,以前也有几次遇到这种问题:
  1. def make_album(singer, album, songs=None):
  2.     a = {'singer' : singer, 'album' : album}
  3.     if songs:
  4.         a['songs'] = songs
  5.     return a
  6. b = True
  7. while b:
  8.     a_singer = input("Enter a singer name here. ")
  9.     a_album = input("Enter one of his/her albums here. ")
  10.     ques = input("Would you like to tell us how many songs are in that album?(y/n) ")
  11.     if ques == 'y' or 'Y': # 问题出在这里,也许下面那个if也会有问题。
  12.         a_songs = input("Enter the number of the songs here. ")
  13.     else:
  14.         askif = input("Would you like to fill this poll again?(y/n) ")
  15.         if askif == 'n' or 'N':
  16.             b = False
  17. e = make_album(a_singer, a_album, a_songs)
  18. print(e)
复制代码

代码中的注释部分,我没明白为什么我输入的明明不是y或Y,他仍然回执行他下面缩进级里的东西。
下面那边还有一个if,我怀疑那个也会出现相同的问题。
这是什么原因导致的呢?
应该如何设计条件比较好呢?
最佳答案
2020-12-30 20:36:44
这样改:
  1. if ques in ['y', 'Y']:
复制代码

非空字符串都可以看做True,所以即使ques不是y,整个if也为True,会执行if下面的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-30 20:36:44 | 显示全部楼层    本楼为最佳答案   
这样改:
  1. if ques in ['y', 'Y']:
复制代码

非空字符串都可以看做True,所以即使ques不是y,整个if也为True,会执行if下面的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-29 13:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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