Python 语言的 if 循环如何批量生成,在线向大神请教!

2020-02-07 11:44:43 +08:00
 suifengingo

本人在使用 python 语言进行 if 循环的代码编写中,需要多次写入 if 判断语句,而且每次的判断数字都是依次递增 1 的,人工手写起来太耗时了,而且出错的话不好回过头来检查是哪里出错,所以想向大神请教下,不知是否有批量生成这种语句的代码?在这里小生先谢谢了!真心希望能得到大神的回答

4340 次点击
所在节点    问与答
71 条回复
xbtlin
2020-02-07 15:26:21 +08:00
楼主是认真的吗?
循环 or 表驱动(查表)
无论用什么编程语言,写成这样还不优化,都不适合当程序员。
reself
2020-02-07 16:32:08 +08:00
楼主不说清楚问题背景的话,又会是一个 X-Y Problem
suifengingo
2020-02-07 16:45:06 +08:00
上面的只是打个比方,想要实现语句比这个要复杂的多,每个 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 判断语句
suifengingo
2020-02-07 16:47:48 +08:00
@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 判断语句

想再次向您请教
suifengingo
2020-02-07 16:49:01 +08:00
@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 判断语句
suifengingo
2020-02-07 16:52:23 +08:00
@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 的变化而变化的代码,所以不知该如何用循环来批量生成,还望多多指点
tairan2006
2020-02-07 16:55:42 +08:00
你这个不是直接应该用 str(id).rjust(3, '0')直接生成 dir 么,如果只有这个的话
SingeeKing
2020-02-07 17:11:12 +08:00
难道不是

*%*%¥#
cv2.imwrite("./dir/%03d/" % id+ k, img)
wutiantong
2020-02-07 17:17:00 +08:00
现在写 python 的同学连函数都不用知道了么?
suifengingo
2020-02-07 17:45:31 +08:00
谢谢各位大佬,这个代码刚刚已经成功实现了
cominghome
2020-02-07 18:10:06 +08:00
直接说原始需求吧,你这嵌套 100 个 if 八成是需求有问题
ClericPy
2020-02-07 18:25:49 +08:00
原来问的是模版字符串.....
关键词前面加 Python 一搜几百万条结果
f-string
template
format string
%s
crella
2020-02-07 19:16:13 +08:00
text = ''
(1 .. 1000).each do |_x|
text << "
if (id== #{_x})
#{_x}+ 1
end
"
end

eval(text)
Dvel
2020-02-07 19:42:46 +08:00
@suifengingo #43
@suifengingo #44
@suifengingo #45
@suifengingo #46
V2EX 支持在一次回复中艾特多个人。
ipwx
2020-02-07 19:44:59 +08:00
“if 判断块内部还有其余要随着 id 的变化而变化的代码”?你能不能一次性说完?
- - - -

直接点说,很少很少很少需要生成一堆代码。你思路一开始就是错的。

bonus:要产生 00x,只要:'{:03d}'.format(id) 就行。
miao
2020-02-07 19:48:34 +08:00
php 程序员表示我竟然每一条回复都看完了。
ExplorerLog
2020-02-07 20:09:20 +08:00
要学会抽象
zhanghb
2020-02-07 20:16:02 +08:00
看了下来,我还是想贴一下这个( XY problem ):
https://coolshell.cn/articles/10804.html
https://en.wikipedia.org/wiki/XY_problem
ma6254
2020-02-07 20:54:15 +08:00
学会与人沟通,学会提一个好问题真的非常重要,节约你和大家的时间
zhujinhe
2020-02-07 22:30:54 +08:00
既然你这个 id 和目录一直, 为啥不省略 if 呢? 直接
```
cv2.imwrite("./dir/{:03d}/".format(id) + k, img)

```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/642737

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX