如何打印 Python 控制台输入的最大和最小数量?

How to print the max and min number of a Python console input?

各位,

任务如下:编写一个程序来打印 Python 控制台输入的最大和最小数量。

比如我们输入(上面的“5”是“n”=>要输入的数字的个数):

5
10
30
504
0
60

输出应该是:

Max number: 504
Min number: 0

下面是解决方案 - 有人可以向我解释 max_number = -sys.maxsize 和 min_number = sys.maxsize 的定义(为什么两个变量的值都是实际上与实际相反)以及 if 条件语句,迭代应该如何进行才能使输出正确?

import sys

n = int(input())
max_number = -sys.maxsize
min_number = sys.maxsize

for i in range(n):
    current_number = int(input())

    if current_number > max_number:
        max_number = current_number
    if current_number < min_number:
        min_number = current_number

print(f'Max number: {max_number}')
print(f'Min number: {min_number}')

谢谢!

对于max_number,for循环中的每次迭代都会检查新输入的数字是否大于max_number的值。如果是这样,这个新值将成为 max_number 值。处理完所有迭代后,变量 max_numbers 保存最大数的值。为确保在第一次迭代中输入的值始终优于 max_number 当前值,您使用尽可能低的值 (-sys.maxsize) 初始化 max_number。这样,任何输入的数字将总是更大,因此将成为 max_number.

的新值
begin: max_number = -sys.max_number
IN=10    -> max_number = 10
IN=30    -> max_number = 30
IN=504   -> max_number = 504
IN=0     -> max_number = 504
IN=60    -> max_number = 504

min_number 使用相同的逻辑,但方向相反:用可能的最高值初始化它,因此第一次迭代的值将始终较小并赢得比较。

sys.maxmsize 是变量可以取的最大整数。

因此,程序首先将max_number初始化为尽可能小的数字。通过这样做,它肯定不会错过列表中的数字。

然后,它进入输入内部,每次它看到一个大于实际 max_number 的数字时,它都会更新 max_number


也就是说,第一次更新将**总是**发生在循环中的第一项(因为所有数字都大于最小数字)。

它与 `min_number` 相反(取最大数然后下降)。


这对你有帮助吗?


有关 sys.maxsize 的更精确信息,请查看文档:
https://docs.python.org/3/library/sys.html
(搜索 maxsize

https://docs.python.org/3/library/sys.html

"sys.maxsize 一个整数,给出类型 Py_ssize_t 的变量可以采用的最大值。在 32 位平台上通常为 2**31 - 1,在 64 位平台上通常为 2**63 - 1。"

因此您正在初始化可能的最大和最小整数,以便比较能够比较输入的数字是小于还是大于可能的最大值或最小值。

>>> -sys.maxsize
-9223372036854775807
>>> sys.maxsize
9223372036854775807
>>> 

你希望它们与初始循环相反,否则你没有什么可比较的。所以任何东西都应该大于理论最小值,反之亦然。

你可以这样做

n = int(input())

numbers = []
for i in range(n):
    numbers.append(int(input()))

print(f'Max number: {max(numbers)}')
print(f'Min number: {min(numbers)}')

这是快速简便的解决方案

user_input = input("Enter the numbers separated by a space ").split()

int_list = list(map(int, user_input))

print ("Max number:",max(int_list), "\nMin number:",min(int_list))

# Output

Enter the numbers separated by a space 5 10 30 504 0 60
Max number: 504 
Min number: 0

只需3行代码即可完成任务,这里用户无需提供整数个数或计数

对您问题的解释:

import sys

max_number = -sys.maxsize
min_number = sys.maxsize
print(max_number, max_number)

# Output
-9223372036854775807 9223372036854775807

如您所见,sys.maxmsize (9223372036854775807) 是最大的整数,sys.maxmsize(-9223372036854775807) 是最小的整数。

对于第一个 If condition,您正在考虑用于比较的最小整数,以便即使是最小的值也将作为第一次迭代的最大值存储,并在找到比该值更大的值时更新。 在您的示例中,5 将在 for 循环

的第一次迭代中被视为 max_number

为什么? for循环的第一次迭代

if 5 > -9223372036854775807  # max_number = -9223372036854775807, current_number = 5 hence condition is true i.e. 5 > -9223372036854775807 
   max_number = 5            # max_number updated with 5

# max_number is 5 now

for 循环的第二次迭代

if 10 > max_number   # max_number = 5, current_number = 10 hence 10 > 5 condition is true     
   max_number = 10   # max_number updated with 10

# max_number is 10 now

等等...最后504将保持max_number


第二种If condition情况正好相反

for 循环的第一次迭代

if 5 < 9223372036854775807      # min_number = 9223372036854775807, current_number = 5 hence condition is true i.e. 5 < 9223372036854775807 
   min_number = 5               # min_number has become 5 now

# min_number is 5 now
.
.    # min_number we remain 5 for 2nd, 3rd and 4th iterations because 10, 30 and 504 are greater than 5 hence failed to satisfy if condition
.    

for循环的第五次迭代

if 0 < min_number               # min_number = 5, current_number=0
   min_number = 0               # min_number has become 0 now

# min_number is 0 now

最后会保留0 min_number