编写Python数字输入求最值程序遇问题,请求排查错误
函数内变量命名冲突+极值未初始化
maximum()和minimum()函数里,你用函数名当极值变量(比如maximum = n),这会直接和函数名冲突,程序跑不起来。而且你没给极值变量设初始值,比如找最大值得先把初始值设成列表里第一个元素,或者负无穷,不然第一次比较时变量都没定义。
改完的例子:def maximum(): if not numbers: print("没输入任何数字") return max_val = numbers[0] for num in numbers: if num > max_val: max_val = num print("Maximum is: ", max_val)while循环里的
continue放错位置了try-except之后直接写continue,会导致后面的numbers.append(n)和break完全执行不到——也就是说你永远没法往列表里加数字,也没法输入'done'退出循环。应该把continue放到except块里,只有输入无效数字(不是'done')的时候才跳过后续步骤。存进列表的是字符串不是数字
你把输入的原字符串n加到列表里,但明明已经转成了浮点型的fval。存字符串的话,后续比较大小会出问题(比如字符串"100"比"2"小),得改成numbers.append(fval)。输入'done'会被当成无效输入
用户输入'done'时,float(n)会报错,程序会打印"Invalid input",但'done'是合法的终止指令,不该被判定为无效。得在try之前先判断输入是不是'done',是的话直接退出循环;或者在except里判断如果是'done'就不报错。
改完的循环逻辑例子:while True: n = input('Enter a number: ') if n == 'done': break try: fval = float(n) numbers.append(fval) except: print("Invalid input")循环终止逻辑冗余且无效
你既用了while n != 'done'当循环条件,又在后面写if n == 'done': break,但因为前面的continue,这个break根本执行不到。换成上面那种while True加break的逻辑更清晰,也不会出问题。
内容的提问来源于stack exchange,提问作者Alexander T

