鱼C论坛

 找回密码
 立即注册
查看: 1121|回复: 9

关于循环的问题

[复制链接]
发表于 2019-7-12 08:32:01 | 显示全部楼层 |阅读模式

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

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

x
  1. # p10_3.py
  2. import easygui as eg

  3. msg = '我要来登记你的信息 查你水表'
  4. title =  '查水表的来了!'
  5. fieldnames = ['*姓名','*真实姓名','固定电话','*手机号码','*电子邮箱','居住地址']
  6. fieldvalues = []
  7. fieldvalues = eg.multenterbox(msg,title,fieldnames)
  8. errmsg = ''
  9. while 1:
  10.     if fieldvalues == None:
  11.         
  12.         
  13.         for i in range(len(fieldnames)):
  14.             option = fieldnames[i].strip()
  15.             if fieldvalues == '' and option[0] == '*':
  16.                 errmsg += ('【%s】为必填的项目\n\n' % fieldnames[i])

  17.     if errmsg == '':
  18.         break
  19.     fieldvalues = eg.multenterbox(errmsg,title,fieldnames,fieldvalues)

  20. print('用户的资料如下:%s' % str(fieldvalues))
复制代码


这段进入死循环 就是一直跳不出来  即使所有*的都输入了信息 都跳不出来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-12 10:53:27 | 显示全部楼层
能啊?可以跳出来····· 你把所有的框框输完
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 11:42:42 | 显示全部楼层
、尾指一勾 发表于 2019-7-12 10:53
能啊?可以跳出来····· 你把所有的框框输完

跳不出来 就是 如果带星号的不管信息输入没输入 都跳不出来 就是一直死循环的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 11:43:27 | 显示全部楼层
、尾指一勾 发表于 2019-7-12 10:53
能啊?可以跳出来····· 你把所有的框框输完

可是我当时设的应该是 只要把带星号的输入就可以跳出来了 我这个功能没法实现诶 大佬帮我改一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-12 14:02:15 | 显示全部楼层
哈哈怪 发表于 2019-7-12 11:43
可是我当时设的应该是 只要把带星号的输入就可以跳出来了 我这个功能没法实现诶 大佬帮我改一下
  1. # p10_3.py
  2. import easygui as eg

  3. msg = '我要来登记你的信息 查你水表'
  4. title = '查水表的来了!'
  5. fieldnames = ['*姓名', '*真实姓名', '固定电话', '*手机号码', '*电子邮箱', '居住地址']
  6. fieldvalues = []
  7. fieldvalues = eg.multenterbox(msg, title, fieldnames)
  8. errmsg = ''
  9. while 1:
  10.     # 先筛选出必填项
  11.     must_field = [i for i in fieldnames if i[0] == '*']
  12.     for i, v in zip(range(len(fieldnames)), fieldvalues):
  13.         option = fieldnames[i].strip()
  14.         # 现在判断这些必填项是否有数据
  15.         if option in must_field:
  16.             if v == '':
  17.                 errmsg += ('【%s】为必填的项目\n\n' % fieldnames[i])

  18.     if errmsg == '':
  19.         break
  20.         
  21.     fieldvalues = eg.multenterbox(errmsg, title, fieldnames, fieldvalues)

  22. print('用户的资料如下:%s' % str(fieldvalues))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-7-12 17:30:19 | 显示全部楼层

你那个must_field 里面的那个i[0]明显没有一个等于‘*’,都没有拆开诶
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 17:34:16 | 显示全部楼层

我重新试过你的 依旧不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-12 17:36:00 | 显示全部楼层

大佬 你写的太高端 我有一个问题 就是 for i,v  这里是什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-16 10:16:34 | 显示全部楼层
哈哈怪 发表于 2019-7-12 17:30
你那个must_field 里面的那个i[0]明显没有一个等于‘*’,都没有拆开诶
  1. must_field = [i for i in fieldnames if i[0] == '*']
复制代码


这段代码拆开的写法是这样的

  1. must_field = []
  2. for i in fieldnames:
  3.     if i[0] == '*':
  4.         must_field.append(i)
复制代码


i[0] 就是已经是字符串的拆开状态了 举例:
  1. i ='*手机号码'
  2. i[0]
  3. Out[3]: '*'
  4. i[0] == '*'
  5. Out[4]: True
复制代码

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

使用道具 举报

发表于 2019-7-16 10:23:44 | 显示全部楼层
哈哈怪 发表于 2019-7-12 17:36
大佬 你写的太高端 我有一个问题 就是 for i,v  这里是什么意思
  1. for i, v in zip(range(len(fieldnames)), fieldvalues):
复制代码


这段代码的意思是:

同时迭代两个迭代器,分别打上 i v 变量标签

range(len(fieldnames)) 的每个元素迭代出来用 i 表示

fieldvalues 的每个元素迭代出来用 v 表示

  1. for i, v in zip(range(len(fieldnames)), fieldvalues): 的结果:
  2. fieldnames 为:0 时; fieldvalues为:123
  3. fieldnames 为:1 时; fieldvalues为:123
  4. fieldnames 为:2 时; fieldvalues为:
  5. fieldnames 为:3 时; fieldvalues为:123
  6. fieldnames 为:4 时; fieldvalues为:123
  7. fieldnames 为:5 时; fieldvalues为:
复制代码


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-16 21:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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