本人在使用 python 语言进行 if 循环的代码编写中,需要多次写入 if 判断语句,而且每次的判断数字都是依次递增 1 的,人工手写起来太耗时了,而且出错的话不好回过头来检查是哪里出错,所以想向大神请教下,不知是否有批量生成这种语句的代码?在这里小生先谢谢了!真心希望能得到大神的回答
|  |      1ipwx      2020-02-07 11:48:32 +08:00 啥意思,没看懂。能不能把原始需求说一下 | 
|  |      2jugelizi      2020-02-07 11:51:42 +08:00 难道   if(id==1) ... if(id==2) ... if(id==100) 这样的? | 
|  |      3ClericPy      2020-02-07 11:52:34 +08:00  4 同一楼, 别拿自己判断的做法来求思路, 直接提原始需求可以避免走弯路 | 
|  |      4cassyfar      2020-02-07 11:52:48 +08:00 ctrl c ctrl v? | 
|  |      5reus      2020-02-07 11:53:32 +08:00 via Android 说出你原本要解决的问题 | 
|      6suifengingo OP 首先谢谢各位大佬的热心解答, 正如二路所说的那样,这个 if 判断语句的需求就是类似于如下这样的: if(id==1) ... if(id==2) ... if(id==100) 需要判断的数字远远多于 100,不知是否有批量生成这种循环语句的代码?再次谢谢大佬! | 
|      7suifengingo OP @ClericPy 首先谢谢大佬的热心解答, 正如二楼所说的那样,这个 if 判断语句的需求就是类似于如下这样的: if(id==1) ... if(id==2) ... if(id==100) 需要判断的数字远远多于 100,不知是否有批量生成这种循环语句的代码?再次谢谢大佬! | 
|      8suifengingo OP | 
|      9suifengingo OP @cassyfar 可是它每次判断时候比较的数字是依次递增 1 的呀,复制粘贴的话还要再一次一次地人工去修改每个判断语句的数字,还是很麻烦 | 
|  |      10freed      2020-02-07 12:18:05 +08:00 循环... | 
|      11reself      2020-02-07 12:20:04 +08:00 via Android 醉了。。。表驱动了解一下 | 
|  |      12keepeye      2020-02-07 12:30:43 +08:00 每个 if 块里的逻辑不一样? | 
|  |      13lairdnote      2020-02-07 12:30:51 +08:00 map  难道不行? | 
|      14hakono      2020-02-07 12:33:22 +08:00  2 你这,每个 id 不同的话,执行的代码逻辑都完全彻底不相同吗? 一般这种递增的判断逻辑,每个代码块要做的事情都是有共通部分的,要做的事情就是把那一块代码逻辑写成不同 id 都通用的代码就行了。如果代码逻辑是通用的还要一个个 if。。。。。。。。 如果 id 不同执行的操作完全不同的话,我不能理解的是楼主说的这句话的意思 “而且出错的话不好回过头来检查是哪里出错” 请说清楚是“什么”出错。是手贱代码写错把 id==100 写成 id == 1000 这种错误 还是代码执行逻辑中的错误 前者和你加多少个 if 的写法无关,也没法解决 后者你只需要做好打 log 和异常处理就解决了 无论是哪种问题都不出在这 if 的写法 对了,如果操作逻辑每个都不同的话,还有个方法倒是能提升点效率和易读性(几百个 elif 的代码执行下来的效率。。。) 建立个字典,id 做 key,要执行的逻辑的函数做 value function func1(){ pass } function func2(){ pass } id_func_map = { 1: func1, 2: func2 } 要执行了,直接从 map 里使用 id_func_map.get(id,None) 取出来对应的函数调用执行,如果取出来的是 None,证明没有这个操作逻辑,抛错误 | 
|      15ispinfx      2020-02-07 12:34:43 +08:00 via iPhone  1 x y problem | 
|  |      16andylsr      2020-02-07 12:36:22 +08:00  4 你都会 py 了,干嘛不写另一个 py 来生成这段代码呢 | 
|      17luman      2020-02-07 12:41:07 +08:00  1 很好奇是什么业务逻辑 | 
|      18nuistzhou      2020-02-07 12:41:16 +08:00 楼上说的表驱动没错 | 
|  |      19crella      2020-02-07 12:43:03 +08:00 via Android  1 excel 自动填充,虽然功能简陋,但是搭配 note Xpad2 的正则表达式 没什么做不到的 | 
|      20suifengingo OP @hakono 谢谢您,这个每一块 if 语句代码的逻辑都是相同的,正如您所说的,是每个不同 id 都通用的代码,只是不知如何用计算机代替人工去批量生成 id 从 1 到上千数字的这些逻辑相同的 if 代码块,虚心向您请教 | 
|  |      21ma6254      2020-02-07 12:54:55 +08:00 via Android 你还是没有说明白原需求 14 楼说的没错,表驱动是正解 这样不复杂的业务逻辑没必要上 AST 生成 | 
|      22suifengingo OP @andylsr 的确是这么想的,可是能力不足,不知道如何用 python 来批量写出这种自增的 if 循环语句,所以虚心向大佬请教 | 
|      23suifengingo OP 要实现的 if 判断语句的需求是如下这样的: if(id==1) n + 1; if(id==2) n+2; ... if(id==1000) n+1000 想要通过计算机来批量生成这些 id 依次增加 1 的 if 判断语句 | 
|  |      24Sylv      2020-02-07 13:00:13 +08:00 via iPhone while/for 循环学习一下 | 
|      25suifengingo OP @ma6254 谢谢您,想要实现的 if 判断语句的需求是如下这样的: if(id==1) n + 1; if(id==2) n+2; ... if(id==1000) n+1000 想要通过计算机来批量生成这些 id 依次增加 1 的 if 判断语句 | 
|      26ho121      2020-02-07 13:02:34 +08:00 via Android  1 @suifengingo  n+id 不就好了? | 
|  |      27allenloong      2020-02-07 13:04:54 +08:00 “批量生成这种语句的代码”,"数字都是依次递增 1 的"-把这些数字提前存起来 “每一块 if 语句代码的逻辑都是相同的”-拿到一个数字然后看看这个数字在不在 | 
|  |      28TangMonk      2020-02-07 13:06:06 +08:00 这个时候就需要 Ruby 的元编程了 | 
|  |      29wysnylc      2020-02-07 13:06:17 +08:00 via Android 1,双重循环 2,map 循环 | 
|  |      30jmc891205      2020-02-07 13:18:08 +08:00 for id in range(1, 1001) ....n = n + id | 
|  |      31ayase252      2020-02-07 13:26:02 +08:00 via iPhone  1 我很好奇的是为什么有这种逻辑,难道针对 1000 种 case 有 1000 种完全不同的处理方法? | 
|  |      32webshe11      2020-02-07 13:29:51 +08:00 楼主还是没有说清原始需求,只说了自己想出来的解决方法。根据“这个每一块 if 语句代码的逻辑都是相同的”猜测用 for 循环就可以了 | 
|  |      33Juszoe      2020-02-07 13:31:06 +08:00 via Android if id >= 1  and id <= 1000: n + id 一样的逻辑为什么要那么多 if | 
|  |      34binux      2020-02-07 13:32:46 +08:00 if id in [1, 2, 3, 4] | 
|  |      35henryhu      2020-02-07 13:33:44 +08:00 如果有 1000 个 case,每个 case 的处理都不一样,那么,写 case 里的处理所花的时间远远大于写 copy/paste and edit case 条件的时间,为啥会在意这一点点时间? 如果 case 处理都是类似的话,我相信有更好的处理方式,而不是简单重复代码。 | 
|  |      36jiezhi      2020-02-07 13:35:24 +08:00 vim 宏 | 
|  |      37hxse      2020-02-07 14:16:02 +08:00 为啥不直接 n+id | 
|  |      38ClericPy      2020-02-07 14:49:24 +08:00 我如果没有理解错的话, 这个的需求是... 生成代码, 而不是拿到代码的执行结果... https://paste.ubuntu.com/p/TVWrjgYfpq/ 虽然感觉这样生成代码挺没有意义的 PS: 题外话, 如果拿结果, 一个函数甚至是 lambda 函数就够了, operate = lambda id, n: id+n. 上面表驱动什么的说的都不像是讲生成代码的... | 
|      39fool079      2020-02-07 15:14:00 +08:00 via iPhone 看了 lz 的需求,表驱动完全可以满足,建议学习一下 | 
|  |      40Baymaxbowen      2020-02-07 15:18:18 +08:00 via iPhone 最蠢的办法不就是自动生成代码吗 | 
|  |      41xbtlin      2020-02-07 15:26:21 +08:00 楼主是认真的吗? 循环 or 表驱动(查表) 无论用什么编程语言,写成这样还不优化,都不适合当程序员。 | 
|      42reself      2020-02-07 16:32:08 +08:00 via Android  2 楼主不说清楚问题背景的话,又会是一个 X-Y Problem | 
|      43suifengingo OP 上面的只是打个比方,想要实现语句比这个要复杂的多,每个 if 判断块里面还有代码, 简化后的 if 判断语句的需求: if(id==1) *%*%¥# cv2.imwrite("./dir/001/" + k, img) if(id==2) *%*%¥# cv2.imwrite("./dir/002/" + k, img) ... if(id==10) *%*%¥# cv2.imwrite("./dir/010/" + k, img) 想要通过计算机来批量生成这些 id 依次增加 1 的 if 判断语句 | 
|      44suifengingo OP @ClericPy 谢谢您!上面我所写的那些只是打个比方,真正想要实现语句比这个要复杂的多,每个 if 判断块里面还有代码,简化后的 if 判断语句的需求: if(id==1) *%*%¥# cv2.imwrite("./dir/001/" + k, img) if(id==2) *%*%¥# cv2.imwrite("./dir/002/" + k, img) ... if(id==10) *%*%¥# cv2.imwrite("./dir/010/" + k, img) 想要通过计算机来批量生成这些 id 依次增加 1 的 if 判断语句 想再次向您请教 | 
|      45suifengingo OP @reself 谢谢大佬,不好意思,上面说的只是打个比方,想要实现语句比这个要复杂的多,每个 if 判断块里面还有代码, 简化后的 if 判断语句的需求: if(id==1) *%*%¥# cv2.imwrite("./dir/001/" + k, img) if(id==2) *%*%¥# cv2.imwrite("./dir/002/" + k, img) ... if(id==10) *%*%¥# cv2.imwrite("./dir/010/" + k, img) 想要通过计算机来批量生成这些 id 依次增加 1 的 if 判断语句 | 
|      46suifengingo OP @webshe11 谢谢大佬,不好意思,上面说的只是打个比方,想要实现语句比这个要复杂的多,每个 if 判断块里面还有代码,简化后的 if 判断语句的需求: if(id==1) *%*%¥# cv2.imwrite("./dir/001/" + k, img) if(id==2) *%*%¥# cv2.imwrite("./dir/002/" + k, img) ... if(id==10) *%*%¥# cv2.imwrite("./dir/010/" + k, img) 想要通过计算机来批量生成这些 id 依次增加 1 的 if 判断语句 由于 if 判断块内部还有其余要随着 id 的变化而变化的代码,所以不知该如何用循环来批量生成,还望多多指点 | 
|      47tairan2006      2020-02-07 16:55:42 +08:00 你这个不是直接应该用 str(id).rjust(3, '0')直接生成 dir 么,如果只有这个的话 | 
|  |      48SingeeKing PRO 难道不是 *%*%¥# cv2.imwrite("./dir/%03d/" % id+ k, img) | 
|  |      49wutiantong      2020-02-07 17:17:00 +08:00 现在写 python 的同学连函数都不用知道了么? | 
|      50suifengingo OP 谢谢各位大佬,这个代码刚刚已经成功实现了 | 
|  |      51cominghome      2020-02-07 18:10:06 +08:00  1 直接说原始需求吧,你这嵌套 100 个 if 八成是需求有问题 | 
|  |      52ClericPy      2020-02-07 18:25:49 +08:00  1 原来问的是模版字符串..... 关键词前面加 Python 一搜几百万条结果 f-string template format string %s | 
|  |      53crella      2020-02-07 19:16:13 +08:00 via Android text = '' (1 .. 1000).each do |_x| text << " if (id== #{_x}) #{_x}+ 1 end " end eval(text) | 
|  |      54Dvel      2020-02-07 19:42:46 +08:00 | 
|  |      55ipwx      2020-02-07 19:44:59 +08:00 “if 判断块内部还有其余要随着 id 的变化而变化的代码”?你能不能一次性说完? - - - - 直接点说,很少很少很少需要生成一堆代码。你思路一开始就是错的。 bonus:要产生 00x,只要:'{:03d}'.format(id) 就行。 | 
|  |      56miao      2020-02-07 19:48:34 +08:00 via Android php 程序员表示我竟然每一条回复都看完了。 | 
|  |      57ExplorerLog      2020-02-07 20:09:20 +08:00 要学会抽象 | 
|  |      58zhanghb      2020-02-07 20:16:02 +08:00  2 看了下来,我还是想贴一下这个( XY problem ):     https://coolshell.cn/articles/10804.html https://en.wikipedia.org/wiki/XY_problem | 
|  |      59ma6254      2020-02-07 20:54:15 +08:00 学会与人沟通,学会提一个好问题真的非常重要,节约你和大家的时间 | 
|  |      60zhujinhe      2020-02-07 22:30:54 +08:00 既然你这个 id 和目录一直, 为啥不省略 if 呢?  直接 ``` cv2.imwrite("./dir/{:03d}/".format(id) + k, img) ``` | 
|  |      61icbmicbm      2020-02-07 23:00:07 +08:00 via iPhone 再写个脚本咯 | 
|  |      62UnknownR      2020-02-07 23:01:16 +08:00 看你的需求是 foldername 根据 id 的变化来变化,那用循环不好吗 ``` $array = [1..100] for($i=0, $i -lt $array.count; $i++){ $id = $array[$i].ToString() do something $CustomNum = ([string[]]"0" * (3 - $id.length)) + $id cv2.imwrite("./dir/$CustomNum" + k, img) } ``` | 
|  |      63reus      2020-02-07 23:08:42 +08:00 via Android  4 说了半天,都不会说出“原始问题”,浪费众人时间的垃圾帖子。 | 
|  |      64Elliota      2020-02-07 23:49:08 +08:00 使用代码片段,然后在结合按键精灵吧 | 
|  |      65secondwtq      2020-02-07 23:54:47 +08:00 | 
|  |      66terence4444      2020-02-07 23:55:55 +08:00 via iPhone  2 一看到要生成 if 代码就知道方向 90% 错了。 | 
|  |      67wangyzj      2020-02-08 00:38:01 +08:00 看原始需求把 你这个要是每个判断都逻辑不一样 那也只能自己生成 但真没见过这样的逻辑 | 
|  |      68muzuiget      2020-02-08 03:25:10 +08:00 问个原始需求这么遮遮掩掩。 | 
|      69MiracleKagari      2020-02-08 08:32:28 +08:00 via Android 不知道 Python 有没有 map,key 是 case,value 是 function | 
|  |      70Qzier      2020-02-08 09:39:24 +08:00 via iPhone 看的人一头雾水 | 
|  |      711nakaELYBbsXbZxY      2020-02-08 11:44:36 +08:00 这,挺简单的,不需要复杂的机制吧。48 楼的思路就可以了 |