首页 > 解决方案 > 如何在数组中不包含字符或字符串输入(Python)

问题描述

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

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))

存储的值似乎只包含字符串格式的数字。但是,当它打印出最大值和最小值时,它不会打印出正确的最大值和最小值,如下图所示。 另一种方式

标签: python-3.xmaxmintry-except

解决方案


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

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)))

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

对于输入检查,该方法是尝试将字符串转换为整数,如果ValueError捕获到 a,则返回到循环的开头。

使用它看起来像:

$ 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]

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


推荐阅读