python TypeError:'>;在'str'和NoneType实例之间不支持

时间:2019-08-08 19:50:47

标签: python-3.x

这是我需要的输出 输入无效 最大值为10 最小为2

他们开始使用的示例是错误的,您必须使用try / except,而对于true,则评分者可以接受。我在查找最小值和最大值时遇到了麻烦,这是我编写的代码,类似于他们开始使用的代码。他们说要在那里继续,但我不知道该放在哪里。

我已经尝试了很多组合,并试图从这个站点上得到答案。

    largest_so_far = None
    smallest_so_far = None
    while True:
        num = int(input('Enter a number: '))
        if num == 'done' :
            break
        try:
            int(num)
        except:
            print('Invalid input')
    for the_num in [num]:
        if num > largest_so_far:
            largest_so_far = the_num

    for the_num2 in [num]:
        if num > smallest_so_far:
            smallest_so_far = the_num2
            #continue
    print('Maximum', the_num)
    print('Minimum', the_num2)

我想要输出 输入无效 最大值为10 最小为2

但是我得到了错误

TypeError: '>; not suppported between instances of 'str' and NoneType

2 个答案:

答案 0 :(得分:0)

您的两个so_far变量均被初始化为None,并在分配新值之前与它们进行比较;如错误所示,您不能使用>来比较数字和None

答案 1 :(得分:0)

几件事。

  1. 您不会使用用户输入的号码填充任何列表。初始化一个空列表,并在用户输入有效输入时将其添加到列表中。如果您希望用户能够输入'done',请不要立即将其转换为整数。您稍后在try / except块中执行该检查。
user_inputs = [] # Store numbers in here
while True:
    num = input('Enter a number: ')
    if num == 'done' :
        break
    try:
        user_inputs.append(int(num)) # Add it to the list if it is an int.
    except:
        print('Invalid input')
  1. 将最大和最小的初始化移动到while循环之后,而不是将其设置为None,而是将其设置为列表中的第一个元素(但请确保列表中首先有元素)。由于您最初将它们初始化为None,因此您执行的第一个比较将尝试检查整数是否大于或小于None,这没有意义。在这种情况下,将它们初始化为输入列表的第一个元素是有效的。
if len(user_inputs) != 0:
    largest_so_far = user_inputs[0]
    smallest_so_far = user_inputs[0]
else:
    print("You didn't enter any numbers!")
    largest_so_far = None
    smallest_so_far = None
  1. 无需遍历同一列表两次。您可以在一个循环中进行两项检查。对user_inputs中的每个元素执行一个for-each循环。在检查最小元素的位置固定比较。您应该使用<运算符,而不是>运算符。
for element in user_inputs:
    if element > largest_so_far:
        largest_so_far = element
    if element < smallest_so_far:
        smallest_so_far = element
  1. 在您的代码中,the_numthe_num2将是列表的最后一个元素,而不是目标的最小/最大值。相反,请打印出最小和最大值。
print("Maximum:", largest_so_far)
print("Minimum:", smallest_so_far)

输出:

Enter a number: 12
Enter a number: 51
Enter a number: -2
Enter a number: 3.4
Invalid input
Enter a number: test
Invalid input
Enter a number: 5
Enter a number: 2
Enter a number: done
Maximum: 51
Minimum: -2