灵魂溢出 发表于 2020-11-8 17:25:20

easygui模块问题求助

import easygui as g
import random
secret = random.randint(1,10)
g.msgbox("------------------我爱你...个鬼------------------")
msg = "不妨猜一下我现在心里想的是哪个数字:"
temp = g.integerbox(msg,lowerbound = 1,upperbound = 10)
while 1:
    if temp == None:
      temp = g.integerbox("请输入数字",lowerbound = 1,upperbound = 10)
    else:
      break
while temp != secret:
    msg ="哎呀,猜错了,请重新输入吧:"
    temp = g.integerbox(msg,lowerbound = 1,upperbound = 10)

    if temp == secret:
      g.msgbox("我草,你是我心里的蛔虫吗?")
      g.msgbox("哼,猜中了也没有奖励!")
    else:
      while 1:
            if temp == None:
                temp = g.integerbox("请输入数字", lowerbound=1, upperbound=10)
            else:
                break
      if temp > secret:
            g.msgbox("哥,大了大了~~~")
      else:
            g.msgbox("嘿,小了小了~~~")
g.msgbox("不玩了")
我对小甲鱼的代码进行了修改,本意是如果用户没有输入数字,则提醒他输入,但是却导致不运行到底就无法结束,求大神修改,可以直接点击X关闭程序

Twilight6 发表于 2020-11-8 18:15:39


easygui 的 integerbox 组件是你点 X 的时候返回的是 None,点 OK 时候会判断你输入框内的值是否在上下限内

若不在,则组件自动会叫你重新输入此时不会返回值,所以不需要你进行循环重新判断

参考代码:

import easygui as g
import random

secret = random.randint(1,10)
g.msgbox("------------------我爱你...个鬼------------------")
msg = "不妨猜一下我现在心里想的是哪个数字:"
temp = g.integerbox(msg,lowerbound = 1,upperbound = 10)

while temp != secret:
    msg ="哎呀,猜错了,请重新输入吧:"
    temp = g.integerbox(msg,lowerbound = 1,upperbound = 10)
    if temp == None:
      break
    if temp == secret:
      g.msgbox("我草,你是我心里的蛔虫吗?")
      g.msgbox("哼,猜中了也没有奖励!")
      break
    elif temp > secret:
      g.msgbox("哥,大了大了~~~")
    else:
      g.msgbox("嘿,小了小了~~~")
      
g.msgbox("不玩了")

灵魂溢出 发表于 2020-11-8 19:00:08

Twilight6 发表于 2020-11-8 18:15
easygui 的 integerbox 组件是你点 X 的时候返回的是 None,点 OK 时候会判断你输入框内的值是否在上下限 ...

这个不是小甲鱼原来的代码吗{:5_107:}
我要的是那种能够在没有输入的时候提醒用户重新输入

Twilight6 发表于 2020-11-8 19:05:17

灵魂溢出 发表于 2020-11-8 19:00
这个不是小甲鱼原来的代码吗
我要的是那种能够在没有输入的时候提醒用户重新输入



这只是删了几个你原先代码的几个错误点,并不是直接拷贝甲鱼哥代码的

Twilight6 发表于 2020-11-8 19:20:42

灵魂溢出 发表于 2020-11-8 19:00
这个不是小甲鱼原来的代码吗
我要的是那种能够在没有输入的时候提醒用户重新输入

重新看了下 easygui 的文档,把 integerbox 组件改成 enterbox 组件输入

但是不会自动检查范围,你可以自己重新写出这个功能

参考代码:


import easygui as g
import random

secret = random.randint(1,10)
g.msgbox("------------------我爱你...个鬼------------------")
msg = "不妨猜一下我现在心里想的是哪个数字:"
temp = g.enterbox(msg)
while temp.strip() == '':
    msg = '注意!您还没输入数字~'
    g.msgbox(msg)
    temp = g.enterbox("不妨猜一下我现在心里想的是哪个数字:")

while temp != str(secret):
    msg ="哎呀,猜错了,请重新输入吧:"
    temp = g.enterbox(msg)
    while temp.strip() == '':
      msg = '注意!您还没输入数字~'
      g.msgbox(msg)
      temp = g.enterbox("不妨猜一下我现在心里想的是哪个数字:")
    if temp == None:
      break
    if temp == str(secret):
      g.msgbox("我草,你是我心里的蛔虫吗?")
      g.msgbox("哼,猜中了也没有奖励!")
      break
    elif temp > str(secret):
      g.msgbox("哥,大了大了~~~")
    else:
      g.msgbox("嘿,小了小了~~~")

g.msgbox("不玩了")

灵魂溢出 发表于 2020-11-8 21:31:47

Twilight6 发表于 2020-11-8 19:20
重新看了下 easygui 的文档,把 integerbox 组件改成 enterbox 组件输入

但是不会自动检查范围,你可 ...

如果用strip()的方法的话,可以接着用integerbox组件,直接把循环判断是否输入为空改为temp.strip()就可以了,这就是我最初想要的效果了
页: [1]
查看完整版本: easygui模块问题求助