在 python 中的 max 函数中传递 1 2 23 32 4 returns 4,为什么?
passing 1 2 23 32 4 returns 4 in max function in python, why?
我的代码
def validate():
if len(sys.argv) > 6:
print("No more than 5 arguments please")
exit()
def printArgs():
print("\nthe arguments are:\n")
for arg in sys.argv[1:]:
print (arg)
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(arg)
if len(biggest)>= 3:
print("\nthe biggest number passed is: ", max(biggest))
else:
print("you did not pass 3 or more numbers")
def main():
validate()
printArgs()
checkDigits()
main()
如果我传递 1 2 23 32 4,它 returns 4 而不是 "checkDigit" 函数中的 32,我不知道为什么。通过 5 4 3 2 1 returns 5,所以我错过了什么吗?
我阅读了另一个 Whosebug post 并认为将 key=int 添加到我的 max 函数应该可行,对吗?
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(arg)
if len(biggest)>= 3:
print("\nthe biggest number passed is: ", max(biggest, key=int))
else:
print("you did not pass 3 or more numbers")
您正在获取字符串列表的 max
。您需要转换为 int
.
为了演示,这就是您正在做的事情:
max("1 2 23 32 4".split())
#'4'
这是你应该做的:
max(map(int, "1 2 23 32 4".split()))
#32
更新代码的自然位置是在附加到 biggest
时转换为 int
:
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(int(arg)) #THIS LINE IS CHANGED
if len(biggest)>= 3:
print("\nthe biggest number passed is: ", max(biggest))
else:
print("you did not pass 3 or more numbers")
在您的函数 checkDigits 中,您必须在 "biggest" 列表中附加整数,因此更改为:
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(int(arg))
我的代码
def validate():
if len(sys.argv) > 6:
print("No more than 5 arguments please")
exit()
def printArgs():
print("\nthe arguments are:\n")
for arg in sys.argv[1:]:
print (arg)
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(arg)
if len(biggest)>= 3:
print("\nthe biggest number passed is: ", max(biggest))
else:
print("you did not pass 3 or more numbers")
def main():
validate()
printArgs()
checkDigits()
main()
如果我传递 1 2 23 32 4,它 returns 4 而不是 "checkDigit" 函数中的 32,我不知道为什么。通过 5 4 3 2 1 returns 5,所以我错过了什么吗?
我阅读了另一个 Whosebug post 并认为将 key=int 添加到我的 max 函数应该可行,对吗?
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(arg)
if len(biggest)>= 3:
print("\nthe biggest number passed is: ", max(biggest, key=int))
else:
print("you did not pass 3 or more numbers")
您正在获取字符串列表的 max
。您需要转换为 int
.
为了演示,这就是您正在做的事情:
max("1 2 23 32 4".split())
#'4'
这是你应该做的:
max(map(int, "1 2 23 32 4".split()))
#32
更新代码的自然位置是在附加到 biggest
时转换为 int
:
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(int(arg)) #THIS LINE IS CHANGED
if len(biggest)>= 3:
print("\nthe biggest number passed is: ", max(biggest))
else:
print("you did not pass 3 or more numbers")
在您的函数 checkDigits 中,您必须在 "biggest" 列表中附加整数,因此更改为:
def checkDigits():
biggest = []
for arg in sys.argv[1:]:
if arg.isdigit():
biggest.append(int(arg))