老师,运行之后我输入的猜测数字为空字符串或者浮点数的话,会报错,两个报错内容一样,这个该修改哪里呢

老师,运行之后我输入的猜测数字为空字符串或者浮点数的话,会报错,两个报错内容一样,这个该修改哪里呢

# coding:utf-8

import random
import sys
from datetime import datetime

class Guess_num_game(object):
    def __init__(self):
        pass

    def guide_page(self, guide_word):
        # 输出标题
        self.guide_word = '欢迎进入数字猜猜猜小游戏'
        print('{}{}{}'.format('*' * 50, self.guide_word, '*' * 50))

    def all_num(self, n):
        # 判断n是否为数字,并返回结果
        return n.isdigit()

    def num_legal(self, ls):
        self.ls = ls
        # 判断起始值和终止值大小
        if int(ls[0]) == int(ls[-1]):
            print('您输入的区间数字相同!!请重新启动程序。')
        elif int(ls[0]) > int(ls[-1]):
            print('您输入的数字区间大小有误!!请重新启动程序。')
        else:
            return 1
        sys.exit()

    def set_final_num(self, num1, num2):
        # 利用filter函数过滤以确保输入值全为数字
        num_range = list(filter(self.all_num, [num1, num2]))
        # 若全是数字,则_filter列表里应该由两个字符
        if len(num_range) == 2:
            _legal = self.num_legal(num_range)
            if _legal == 1:
                print('所产生的随机数字区间为: %s' % num_range)
                return random.randint(int(num1), int(num2))
        else:
            print('您所输入的为非数字字符, 请重新启动!')
            sys.exit()

    def check_num_legal(self, num):
        # 判断用户输入的猜测数字是否在随机区间内
        if int(num) < int(self.ls[0]) or int(num) > int(self.ls[-1]):
            print('对不起您输入的数字未在指定区间!!!')

            return 1

    def write_record(self, times, value):
        value_ = '第{}次您猜测的数字为:{}'.format(times, value)
        now = datetime.now()
        with open('record.txt', 'a', encoding='utf-8') as f:
            f.write(f'\n{now}:{value_}')

    def main(self, rand1):
        temp = 0
        while True:
            guess_num = input('请继续输入您猜测的数字:')
            # 判断猜测数字是否为数字类型
            if self.all_num(guess_num):
                guess_num = int(guess_num)
            else:
                print('您所输入的为非数字字符, 请重新启动!')
            # 判断猜测数字是否在指定区间
            if self.check_num_legal(guess_num):
                continue
            temp += 1
            # 调用日志写入函数,传入猜测的次数和用户猜测的数字
            self.write_record(temp, guess_num)
            print('*' * 10)
            # 判断猜测数字与随机数字的大小比较
            if guess_num < rand1:
                print('Lower than the answer')
            elif guess_num > rand1:
                print('Higher than the answer')
            else:
                print('恭喜您!只用了%s次就赢得了游戏' % temp)
                break

if __name__ == '__main__':
    guess_num = Guess_num_game()
    print(guess_num.guide_page(guide_word='欢迎进入数字猜猜猜小游戏'))
    i = input('数字区间起始值:')
    j = input('数字区间终止值:')
    rand = guess_num.set_final_num(i, j)
    guess_num.main(rand)

相关截图:

https://img1.sycdn.imooc.com//climg/61b2003909ff752007550335.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕凡 2021-12-10 10:28:20

同学,你好!

all_num( )函数中的n.isdigit( )只能判断输入内容是不是整数,可以将判断猜测数字是否在指定区间后的代码放进if self.all_num(guess_num)中,在是数字的情况下再继续执行代码,如下图:

https://img1.sycdn.imooc.com//climg/61b2baca0939216b07160621.jpg

祝学习愉快~

  • 提问者 坏狐狸Y #1
     def main(self, rand1):
            temp = 0
            while True:
                guess_num = input('请继续输入您猜测的数字:')
                # 判断猜测数字是否为数字类型
                if self.all_num(guess_num):
                    guess_num = int(guess_num)
                else:
                    print('您所输入的为非数字字符, 请重新启动!')
                # 判断猜测数字是否在指定区间
                if self.check_num_legal(guess_num):
                    continue
                temp += 1

    老师,昨晚我梳理了一遍,发现是else后没有结束程序, 在print后面加一个sys.exit()就可以了

    2021-12-10 13:57:38
  • 好帮手慕凡 回复 提问者 坏狐狸Y #2

    同学,你好!

    可以的,作业并未对在输入浮点型和空的情况下做处要求,祝学习愉快~

    2021-12-10 14:02:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师