Python Min Max While循环

时间:2019-10-31 18:01:50

标签: python-3.x while-loop max min

在两个while循环代码下面,从给定的数字中查找最大值和最小值。第一个代码不起作用,输出错误,我不明白为什么?

在我将输入除以整数后,第二个正在工作;如果有人可以为我解释,这有什么不同。谢谢

代码1:

 largest = None
 smallest = None

 while True:

     num = input("Enter a number: ")

     if num == "done":
         break

     if largest is None or num> largest:
         largest = num
     elif smallest is None or num< smallest:
         smallest = num

 print ("Maximum is", largest)
 print ("Minimum is", smallest)

代码2

 largest = None
 smallest = None
 while True:
     try:
         num = input("Enter the number: ")
         if num == "done":
             break
         num = int(num)
         if largest is None or largest < num:
             largest = num
         elif smallest is None or smallest > num:
             smallest = num
     except:
         print("Invalid input")

 print ("Maximum is", largest)
 print ("Minimum is", smallest)

1 个答案:

答案 0 :(得分:0)

“代码1”的输出与您期望的不同,因为比较中的操作数为str,其定义的顺序与相应的int的顺序不同。

换句话说,如果ab是两个int使得a > b成立,那么我们可以确保str(a) > str(b)仅在长度两个字符串中的相同,否则取决于str(a) > str(b)str(a) < str(b)的实际值,它可以发生ab

在第一个出现的字符上,由数字组成的字符串的顺序为“字母顺序”,因此,"1" < "2" < "3"等,当两个字符串具有多个字符时,任一选项均处于打开状态,例如:

  • 对于"2""10""2" > "10"(与2 < 10相反)是因为"2" > "1"和{{1之后的"0" }}不相关
  • 用于"1""2""20"(与"2" < "20"相同),因为2 < 20和{{1之后的"2" == "2" }}中的"0"使"2"“更大”。

请注意,字符串排序/比较实际上适用于任何字符串,即使那些不包含数字的字符串也是如此。