1

我正在寻找创建代码,该代码需要用户在继续之前输入大于 2 的整数。我正在使用python 3.3。这是我到目前为止所拥有的:

def is_integer(x):
    try:
        int(x)
        return False
    except ValueError:
        print('Please enter an integer above 2')
        return True

maximum_number_input = input("Maximum Number: ")

while is_integer(maximum_number_input):
    maximum_number_input = input("Maximum Number: ")

    print('You have successfully entered a valid number')

我不确定如何最好地设置整数必须大于2的条件。我才刚刚开始学习python,但想养成良好的习惯。

4

7 回答 7

5

这应该做的工作:

def valid_user_input(x):
    try:
        return int(x) > 2
    except ValueError:
        return False

maximum_number_input = input("Maximum Number: ")

while valid_user_input(maximum_number_input):
    maximum_number_input = input("Maximum Number: ")
    print("You have successfully entered a valid number")

甚至更短:

def valid_user_input():
    try:
        return int(input("Maximum Number: ")) > 2
    except ValueError:
        return False

while valid_user_input():
    print('You have successfully entered a valid number')
于 2013-10-03T11:17:54.210 回答
1
def take_user_in():
    try:
        return int(raw_input("Enter a value greater than 2 -> "))  # Taking user input and converting to string
    except ValueError as e:  # Catching the exception, that possibly, a inconvertible string could be given
        print "Please enter a number as" + str(e) + " as a number"
        return None


if __name__ == '__main__':  # Somethign akin to having a main function in Python

    # Structure like a do-whole loop
    # func()
    # while()
    #     func()
    var = take_user_in()  # Taking user data
    while not isinstance(var, int) or var < 2:  # Making sure that data is an int and more than 2
        var = take_user_in()  # Taking user input again for invalid input

    print "Thank you"  # Success
于 2013-10-03T11:05:11.260 回答
1

我的看法:

from itertools import dropwhile
from numbers import Integral
from functools import partial
from ast import literal_eval

def value_if_type(obj, of_type=(Integral,)):
    try:
        value = literal_eval(obj)
        if isinstance(value, of_type):
            return value
    except ValueError:
        return None

inputs = map(partial(value_if_type), iter(lambda: input('Input int > 2'), object()))

gt2 = next(dropwhile(lambda L: L <= 2, inputs))
于 2013-10-03T12:12:43.840 回答
0

这会验证输入是否为整数,但会拒绝看起来像整数的值(如3.0):

def is_valid(x):
    return isinstance(x,int) and x > 2

x = 0
while not is_valid(x):
    # In Python 2.x, use raw_input() instead of input()
    x = input("Please enter an integer greater than 2: ")
    try:
        x = int(x)
    except ValueError:
        continue
于 2013-10-03T11:41:26.227 回答
0
def check_value(some_value):
    try:
       y = int(some_value)
    except ValueError:
       return False
    return y > 2 
于 2013-10-03T11:18:06.760 回答
0

使用int()其他答案中显示的内置函数的问题在于,它将浮点数和布尔值转换为整数,因此实际上并不能检查您的参数是否为整数。

自己使用内置isinstance(value, int)方法很诱人,但不幸的是,如果传递一个布尔值,它将返回 True。所以如果你想要严格的类型检查,这是我简短而甜蜜的 Python 3.7 解决方案:

def is_integer(value):
    if isinstance(value, bool):
        return False
    else:
        return isinstance(value, int)

结果:

is_integer(True)  --> False
is_integer(False) --> False
is_integer(0.0)   --> False
is_integer(0)     --> True
is_integer((12))  --> True
is_integer((12,)) --> False
is_integer([0])   --> False

ETC...

于 2020-05-18T21:44:44.557 回答
0

希望这可以帮助

import str
def validate(s):       
    return str.isdigit(s) and int(s) > 2
  • str.isdidig() 将消除所有包含非整数、浮点数 ('.') 和负数 ('-') 的字符串(小于 2)
  • int(user_input) 确认它是一个大于 2 的整数
  • 如果两者都为 True,则返回 True
于 2015-11-13T00:01:15.363 回答