如何以无类型开始变量并将无与浮点数进行比较?

时间:2020-09-10 16:59:59

标签: python

我正在尝试完成“ Python for Everyone”这本书中的练习5.2。

我研究了不同的解决方案,但是我试图以自己的方式编写它。我知道这段代码可能效率低下,但这是目前对我有意义的唯一方法。

我在这里的想法是让用户将号码转储到列表中。 我有两个变量,smallest_value和largest_value,其中包含一些初始值。

有没有一种方法不需要我为minimum_value和maximum_value的初始值开始? 我曾尝试过“无”,但遇到一个问题,无法将浮点数与“无”进行比较。

非常感谢您的帮助!

number_list = []
smallest_value = 1000000
largest_value = -1000000

print('Type in "done" when you are done with the program.')

while True :
    input_data = input("Type in a value: ")
    if input_data == "done" :
        break
    try:
        float_input_data = float(input_data)
    except:
        print('Invalid Input')
        continue
    # Adds user input numbers into a list, number_list
    number_list.append(float_input_data)
    for small_num in number_list:
        if small_num == 1000000:
            smallest_value = small_num
        elif small_num < smallest_value:
            smallest_value = small_num
            #print("The smallest value so far is", smallest_value)
    for large_num in number_list:
        if large_num == -1000000:
            largest_value = large_num
        elif large_num > largest_value:
            largest_value = large_num
            #print("The largest value so far is", largest_value)

#print("All done")
print("The smallest value is", smallest_value)
print("The largest number is", largest_value)

2 个答案:

答案 0 :(得分:1)

我在这里使用positive and negative infinity

smallest_value = float("inf")  # or math.inf
largest_value = float("-inf")  # or -math.inf

所有内容的比较结果都小于smallest_value,最初的所有内容的比较结果都大于largest_value

当然可以使用None之类的前哨值来标记“尚未找到”,但这使逻辑变得相当复杂。仅使用现有代码中已经有效的值要干净得多。由于这个原因,无穷大或类型的最大/最小有效值是常见的占位符。

答案 1 :(得分:0)

您可以通过输入的第一个数字来初始化minimum_value和maximum_value:

number_list = []
smallest_value = None
largest_value = None
print('Type in "done" when you are done with the program.')
while True :
    input_data = input("Type in a value: ")
    if input_data == "done" :
        break
    try:
        float_input_data = float(input_data)
    except:
        print('Invalid Input')
        continue
    # Adds user input numbers into a list, number_list
    if smallest_value is None and largest_value is None: 
        smallest_value = float_input_data
        largest_value = float_input_data
    number_list.append(float_input_data)
    for small_num in number_list:
        if small_num == 1000000:
            smallest_value = small_num
        elif small_num < smallest_value:
            smallest_value = small_num
            #print("The smallest value so far is", smallest_value)
    for large_num in number_list:
        if large_num == -1000000:
            largest_value = large_num
        elif large_num > largest_value:
            largest_value = large_num
            #print("The largest value so far is", largest_value)

#print("All done")
print("The smallest value is", smallest_value)
print("The largest number is", largest_value)