python-3.x - 如何在数组中不包含字符或字符串输入(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))
解决方案
使用您当前的实现(问题数量),以下是您执行检查的方式:
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]
在我上面的固定示例中,字符串在存储到数组中之前会转换为整数值,因此它们最终会按数字排序。
推荐阅读
- postgresql - 在简单的读写上激发 OOM
- kubernetes - Kubernetes Ingress-Service更新IP
- java - 通过servlet进入登录页面后如何将用户名值获取到欢迎页面?
- c++ - 重构模板函数中的常量表达式 if 语句
- android - 将您的应用程序更新为 64 位
- wagtail - 如何在 Wagtail 中创建一个不可见的虚拟页面?
- python - 如何通过向多对多字段添加新产品来动态添加字段
- ios - 如何使用递归遍历大纲中的所有孩子?
- python-3.x - 有没有办法在读取/写入文件后以新名称保存 txt 文件?
- python - 如何修改 ImageDataGenerator 中的 flow_from_directory 或 preprocessing_function?