[英]How do I ask for user input until the user stops?
问题
编写一个程序,将一个整数列表读入一个列表,只要整数大于零,然后输出列表中最小和最大的整数。
例如:如果输入是:
10
5
3
21
2
-6(负六,stackoverflow 上的格式很奇怪)
output 是:
2
21
您可以假设整数列表至少有 2 个值。
我的代码
lst =[]
for i in range(6):
if i > 0:
i = int(input())
lst.append(i)
print (min(lst), max(lst))
问题
我的代码对于有 6 个输入的示例输入非常有效。 但是,对于不同数量的输入(例如 4 个输入或 9 个输入),范围(6)是有限的,并且不会产生我想要的 output。 我只是不知道当问题没有指定它将接受的输入数量时,我应该如何确定询问输入的范围。
帮助后的代码
lst =[]
while True:
_input= int(input())
if _input < 0:
break
lst.append(_input)
print(min(lst),max(lst))
你可以while
操作while
break
lst = []
while True:
_input = int(input())
if _input < 0:
break
lst.append(_input)
或者,如果您使用 python3.8,它可能会更漂亮:
lst = []
while _input := int(input()) >= 0:
lst.append(_input)
user_num = int(input())
list_num = []
while user_num > 0:
list_num.append(user_num)
user_num = int(input())
print(min(list_num),'and',max(list_num))
如果您想要一个更灵活的程序以实现未来的可扩展性,您可以实现一个生成器 function 用于列表理解。 可能看起来像这样的一个例子是:
# Future imports (needed for certain type hinting functionality)
from __future__ import annotations
# Standard library imports
from re import compile as re_compile
from typing import TYPE_CHECKING
# Type checking (this is False during runtime)
if TYPE_CHECKING:
from re import Pattern
from typing import Generator
def int_input_generator() -> Generator[int, None, None]:
"""Integer generator: Stops generating when given incorrect input"""
numbers_only: Pattern = re_compile(r'^-?[0-9]+$')
user_input: str
int_input: int
while numbers_only.match((user_input := input())) is not None \
and (int_input := int(user_input)) > 0:
yield int_input
return
def main() -> None:
"""Main function to run the program"""
input_list: list[int] = [_ for _ in int_input_generator()]
if input_list:
print(f'{min(input_list)}\n{max(input_list)}')
return
if __name__ == '__main__':
main()
我继续输入提示代码以便更好地理解。 此外, int_input_generator
处理输入不是数字的情况。
注意:我选择使用正则表达式进行数字验证,因为str.isnumeric()
、 str.isdecimal()
和str.isdigit()
等函数允许某些不是典型 ASCII 数字的 unicode 字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.