我正在尝试完成“ 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)
答案 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)