好好学不玩手机 发表于 2020-2-27 17:57:17

第033讲动动手第二题

题目要求:2. 尝试一个新的函数 int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入。
我的代码:
def A(num):
    while True:
      try:
            if num == int():
                print(num, '输入正确')
                break
      except ValueError:
            print('请重新输入')

num = input('请输入一个整数')
print(A(num)


运行一直没反应,不明白是哪里出错了。。

qiuyouzhi 发表于 2020-2-27 18:00:47

少了一个小括号(复制问题吧)

qiuyouzhi 发表于 2020-2-27 18:03:40

本帖最后由 qiuyouzhi 于 2020-2-27 18:06 编辑

int()是一个BIF,不能用于判断,应该这样改
def A(num):
    while True:
      try:
            if num.isdigit(): # 判断输入的字符串是否为数字
                print(num, '输入正确')
                break
      except ValueError:
            print('请重新输入')

num = input('请输入一个整数')
A(num)

好好学不玩手机 发表于 2020-2-27 18:09:33

qiuyouzhi 发表于 2020-2-27 18:03
int()是一个BIF,不能用于判断,应该这样改

但我发现输入小数的时候他不会提示错误...

qiuyouzhi 发表于 2020-2-27 18:11:47

好好学不玩手机 发表于 2020-2-27 18:09
但我发现输入小数的时候他不会提示错误...

对啊
因为不会触发ValueError
建议用if和else

LYF511 发表于 2020-2-27 18:27:20

用try更好理解
try:
    int(num)
except:
    #错误代码
else:
    #正确代码

txxcat 发表于 2020-2-27 20:24:17

def A(num):
    while True:
      try:
            if num == int():#int()的值是0,而num是input传入的字符串,永远都不会相等,会跳过中间的内容,又没有触发错误,所以下一步是重新回到while True,不会运行break,这就是一个死循环。
                print(num, '输入正确')
                break
      except ValueError:
            print('请重新输入')

num = input('请输入一个整数')
print(A(num)

然后谈谈你的思路,你在函数里只有判断,没有输入,结果就是输入错误的时候,print了'请重新输入',然后While True,然有又循环,不停打印。所以正确的做法要么在函数的循环里input,要么在程序主体里循环,函数只判读。
方案1:
def A():
    while True:
      num = input('请输入一个整数:')
      try:
            num = int(num)
      except ValueError:
            print('请重新输入!')
      else:   
            print(num, '输入正确!')
            break
    return num

print(A())
方案2:
def A(num):
    try:
      num = int(num)
    except ValueError:
      print('请重新输入!')
      return False
    else:   
      print(num, '输入正确!')
      return num

while True:
    num = input('请输入一个整数:')
    a=A(num)
    if a==False:
      continue
    else:
       print(a)
       break
页: [1]
查看完整版本: 第033讲动动手第二题