如何不在数组中包含字符或字符串输入 (Python)

How to not include character or string input in the array (Python)

我正在尝试编写一个简单的程序,其中一个变量将由用户存储输入类型,直到看到单词 "done"。之后,程序会打印出存储在变量中的最大值和最小值。但是,我想防止变量存储用户可能不小心输入的字符或字符串。我可以使用哪些方法?尝试并排除?

a=0
store1=''
store2=''
while store1 !='done':
     store1 = input('Enter a number: ')
     store2=store2+' '+store1
     a =a+1
store3=store2.split()
store4=store3[:a-1]
print('Maximum: %s'%(max(store4)))
print('Minimum: %s'%(min(store4)))

我尝试了另一种方法,但遇到了这个问题。有谁知道哪里出了问题吗?

def RepresentsInt(s):
    try: 
        int(s)
        return True
    except ValueError:
        return False
a=0
store1=''
store2=''
while store1 !='done':
    store1 = input('Enter a number: ')
    b = RepresentsInt(store1)
    if(b==True): 
        store2=store2+' '+store1
    #        a =a+1
 store3=store2.split()
 #store4=store3[:a-1]
 print(store3)
 print('Maximum: %s'%(max(store3)))
 print('Minimum: %s'%(min(store3)))
 #print(len(store3))

存储的值似乎只包含字符串格式的数字。然而,当它打印出最大值和最小值时,它并没有打印出正确的最大值和最小值,如下图所示。

使用您当前的实施(问题数量),执行检查的方式如下:

a=0
store1=''
store2=''
while store1 !='done':
  store1 = input('Enter a number: ')
  if store1 == 'done':
    break;
  try:
    int(store1)
  except ValueError:
    continue
  store2=store2+' '+store1
  a =a+1
store3=store2.split()
store4=store3[:a-1]
print('Maximum: %s'%(max(store4)))
print('Minimum: %s'%(min(store4)))

我添加了对输入值的立即检查(否则它会使用 'done' 值执行,导致 Maximum: d 输出)。

对于输入检查,该方法尝试将字符串转换为整数并在捕获到 ValueError 时返回到循环的开始。

使用它看起来像:

$ python3 input.py
Enter a number: 1
Enter a number: 2
Enter a number: what
Ivalid input.
Enter a number: 3
Enter a number: 4
Enter a number: done
Maximum: 3
Minimum: 1

因此,我们在实际找到最大值方面仍然存在问题。这引出了一个问题,为什么所有的字符串操作?

下面是一个使用数组的更简单的实现:

numbers = []
while True:
  input_value = input('Enter a number: ')
  if input_value == 'done':
    break
  try:
    int_value = int(input_value)
  except ValueError:
    print("Ivalid input.")
    continue
  numbers.append(int_value)

print('Maximum: %s'%(max(numbers)))
print('Minimum: %s'%(min(numbers)))

用法:

$ python3 input.py
Enter a number: 1
Enter a number: 2
Enter a number: what
Ivalid input.
Enter a number: 3
Enter a number: 4
Enter a number: done
Maximum: 4
Minimum: 1

编辑:您第二次尝试的问题是您执行的是词典排序,而不是数字排序。这是因为数组正在存储字符串值。

# sorting strings, lexicographically
>>> [x for x in sorted(['1000', '80', '10'])]
['10', '1000', '80']

# sorting numbers, numerically
>>> [x for x in sorted([1000, 80, 10])]
[10, 80, 1000]

在我上面的固定示例中,字符串在存储到数组之前被转换为整数值,因此它们最终按数字排序。