鱼C论坛

 找回密码
 立即注册
查看: 1382|回复: 6

[已解决]零基础入门python 30课课后习题的一点问题

[复制链接]
发表于 2018-2-8 23:39:53 | 显示全部楼层 |阅读模式

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

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

x
关于在指定路径下查找指定类型的视频文件,为什么这样写判断语句没有问题:
mport os

def search_moviefile(start_dir):
    os.chdir(start_dir)

    for each_file in os.listdir(os.curdir):
        target = ['.mp4','.rmvb','.avi']
        if os.path.splitext(each_file)[1] in target:
            print(os.getcwd() + os.sep + each_file)
        if os.path.isdir(each_file):
            search_moviefile(each_file)
            os.chdir(os.pardir)

start_dir = input('请输入待查找的初始目录:')
search_moviefile(start_dir)

而红字部分改成 : if os.path.splitext(each_file)[1] == 'mp4','avi','rmvb':
就会将mkv格式的视频,srt的字母也打印出来?很小白的一个问题

最佳答案
2018-2-9 11:14:02
czlv 发表于 2018-2-9 11:07
突然发现我的问题写错了,后面的'mp4','rmvb','avi'应该是'mp4' or 'rmvb' or 'avi',语法没有问题,不会 ...

if os.path.splitext(each_file)[1] == 'mp4' or'avi' or 'rmvb':
相当于
if (os.path.splitext(each_file)[1] == 'mp4') or'avi' or 'rmvb':
if os.path.splitext(each_file)[1] == 'mp4' or'True or True:
不论os.path.splitext(each_file)[1] == 'mp4'是否为True
都等同于
if True:
所以起不到筛选的作用。
如果按你的方式写,就要这样:
if (os.path.splitext(each_file)[1] == 'mp4') or (os.path.splitext(each_file)[1] =='avi' ) or (os.path.splitext(each_file)[1] =='rmvb'):
显然比用in麻烦多了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-8 23:44:40 | 显示全部楼层
这样会出语法错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 07:49:26 From FishC Mobile | 显示全部楼层
用==意图何在?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-9 11:04:15 | 显示全部楼层

判断?我是小白。。不能这么用吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-9 11:07:27 | 显示全部楼层
冬雪雪冬 发表于 2018-2-8 23:44
这样会出语法错误

突然发现我的问题写错了,后面的'mp4','rmvb','avi'应该是'mp4' or 'rmvb' or 'avi',语法没有问题,不会报错,就是筛选不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 11:09:10 | 显示全部楼层
czlv 发表于 2018-2-9 11:04
判断?我是小白。。不能这么用吗

不是不能用,这里用==明显不科学啊
为何不用 in 呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 11:14:02 | 显示全部楼层    本楼为最佳答案   
czlv 发表于 2018-2-9 11:07
突然发现我的问题写错了,后面的'mp4','rmvb','avi'应该是'mp4' or 'rmvb' or 'avi',语法没有问题,不会 ...

if os.path.splitext(each_file)[1] == 'mp4' or'avi' or 'rmvb':
相当于
if (os.path.splitext(each_file)[1] == 'mp4') or'avi' or 'rmvb':
if os.path.splitext(each_file)[1] == 'mp4' or'True or True:
不论os.path.splitext(each_file)[1] == 'mp4'是否为True
都等同于
if True:
所以起不到筛选的作用。
如果按你的方式写,就要这样:
if (os.path.splitext(each_file)[1] == 'mp4') or (os.path.splitext(each_file)[1] =='avi' ) or (os.path.splitext(each_file)[1] =='rmvb'):
显然比用in麻烦多了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-7 14:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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