Python 最小最大 While 循环

Python Min Max While loop

下面两个 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)

"code 1"的输出与你期望的不同,因为比较中的操作数是str,其定义的顺序与对应的int的顺序不同.

换句话说,如果ab是两个int使得a > b,那么我们可以确定str(a) > str(b)只有当两个字符串的长度相同,否则可能会出现 str(a) > str(b)str(a) < str(b) 取决于 ab.

的实际值

由数字组成的字符串的顺序是 "alphabetical" 字符先出现,因此,而 "1" < "2" < "3" 等,当两个字符串有多个字符时,任一选项都打开 e.g.:

  • 对于"2""10""2" > "10"(与2 < 10相反)因为"2" > "1""0"之后的存在"1" 无关紧要
  • 对于"2""20""2" < "20"(与2 < 20相同)因为"2" == "2""0""2""20" 中使得 "20" "bigger".

请注意,字符串 ordering/comparison 实际上适用于任何字符串,即使是不包含数字的字符串。