Python中以10为基数的int()的文本无效:“x”错误?

Python中以10为基数的int()的文本无效:“x”错误?,python,while-loop,prompt,Python,While Loop,Prompt,我正在开发一个程序,提示用户输入一个整数范围内的数字。如果他们输入的数字超出范围,系统会提示他们再输入一个,如果他们输入一个字母,系统也会提示他们更改答案。以下是我得到的: def code_one(d, f): s = input('Enter a number between' + str(d) + 'and' + str(f) + ': ') s = int(s) if int(d) <= s <= int(f): return s

我正在开发一个程序,提示用户输入一个整数范围内的数字。如果他们输入的数字超出范围,系统会提示他们再输入一个,如果他们输入一个字母,系统也会提示他们更改答案。以下是我得到的:

def code_one(d, f):
    s = input('Enter a number between' + str(d) + 'and' + str(f) + ': ')
    s = int(s)
    if int(d) <= s <= int(f):
        return s
    else:
        while s < int(d) or s > int(f):
            s = input(str(s) + 'is out of range. Please try again. ')
            s = int(s)
            if s < int(d) or s > int(f):
                continue
            else:
                return s
        while s.isdigit == False:
            s = input(str(s) + 'is not a number. Please try again.' )
            if s.isdigit == False:
                continue
            else:
                return s

在s.isdigit==False读取行之前,它工作正常:然后,如果我输入一个字母而不是一个数字,我会得到以10为底的int的错误invalid literal:'x',x是我碰巧输入的任何字母。如何解决此问题?

您必须调用isdigit:s.isdigit。您应该先检查它是否为数字,而不是先转换为整数。isdigit不是测试字符串是否表示整数的方法。它拒绝'-1'。您正在使用s=ints将s转换为字符串,因此,如果输入1,您将其从字符串转换为int。现在,如果您将int选中为isdigit,您将得到一个错误。因此,最好检查strs.isdigitPerhaps是否从代码中删除这些不必要的空行空行。但我相信它们会让代码更具可读性。像以前那样的地方会让代码看起来不太好。在教科书、github代码和教程中,你几乎看不到这种格式。但是,这是一种个人编码风格。
def code_one(d, f):

    while True:
        answer = input('Enter a number between %d and %d: ' % (d, f))

        try:
            answer = int(answer)

        except ValueError:
            print('%s is not a number.  Please try again.' % answer)
            continue

        if d <= answer <= f:
            return answer

        else:
            print('%d is out of range.  Please try again.' % answer)