如何不在数组中包含字符或字符串输入 (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]
在我上面的固定示例中,字符串在存储到数组之前被转换为整数值,因此它们最终按数字排序。
我正在尝试编写一个简单的程序,其中一个变量将由用户存储输入类型,直到看到单词 "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]
在我上面的固定示例中,字符串在存储到数组之前被转换为整数值,因此它们最终按数字排序。