为什么不管实际的最小值是多少,我的代码都会返回0作为最小值



我正在为类的赋值编写一段代码,该类应该在给定字符串时找到最小值和最大值。这是我迄今为止写的代码:

def find_min_and_max(values):
'''(string) -> None
'''
mmin = 0
mmax = 0
if values == '': 
print('There is no min or max')
return None
for value in values:
if len(values) == 1: 
mmax = value
mmin = value
if value > str(mmax): 
mmax = value
if value < str(mmin): 
mmin = value
print('The minimum value is ' + str(mmin)) 
print('The maximum value is ' + str(mmax))
return None

当我在shell上运行它时,这是我收到的答案:

">>>find_min_and_max('132475689'(

"最小值为0">

"最大值为9">

为什么我得到最低0?对于我输入的参数的任何数字字符串,都会发生这种情况。谢谢

您的逻辑在某些方面是正确的,但也有一些错误。

比较len(values) == 1很好,但可能超出for,因为您只需要检查一次。

您正试图找到最大值和最小值,因此必须比较整数,而不是字符串。这个map(int,values)创建了一个生成器,将您的字符串映射到整数列表中,以便进行迭代。然后您可以比较for中的每个值。

回答你的问题:你得到0是因为你的for中的第一个比较。正如我所说,你只需要做一次。

import math
def find_min_and_max(values):
'''(string) -> None 
'''
mmin = math.inf
mmax = -math.inf
if values == '': 
print('There is no min or max')
return
if len(values) == 1:
mmax = values
mmin = values
for value in map(int,values):
if value > mmax: 
mmax = value
if value < mmin: 
mmin = value
print('The minimum value is ' + str(mmin)) 
print('The maximum value is ' + str(mmax))

上面的代码只比较数字。如果你的字符串有另一个字符,它将不起作用。因此,您可以比较ASCII表中字符的代码。只需:

import math
def find_min_and_max(values):
'''(string) -> None 
'''
mmin = '~'
mmax = ' '
if values == '': 
print('There is no min or max')
return
if len(values) == 1:
mmax = values
mmin = values
for value in values:
if ord(value) > ord(mmax): 
mmax = value
if ord(value) < ord(mmin): 
mmin = value
print('The minimum value is ' + str(mmin)) 
print('The maximum value is ' + str(mmax))

我将假设字符串只能包含数值,并且您希望通过数值对它们进行比较。

这里有一个快速而简单的方法来实现相同的结果:

def find_min_and_max(values):
if values == '': 
print('There is no min or max')
return None

将所有内容转换为整数列表

int_values = [int(x) for x in values]

使用内置功能查找最小和最大

print(f"The minimum value is {min(int_values)}") 
print(f"The maximum value is {max(int_values)}")
return None
find_min_and_max('132475689')
# The minimum value is 1
# The maximum value is 9

要使代码正常工作,只需将mmin设置为一个大值即可开始。由于您一次只看一个数字,所以9会起作用,或者查看@abarnert以获取较大的字符串值(您可以从尽可能高的值开始mmin值,以便第一个较低的值覆盖变量(:

def find_min_and_max(values):
'''(string) -> None
'''
mmin = 9
mmax = 0
if values == '': 
print('There is no min or max')
return None
for value in values:
if len(values) == 1: 
mmax = value
mmin = value
if value > str(mmax): 
mmax = value
if value < str(mmin): 
mmin = value
print('The minimum value is ' + str(mmin)) 
print('The maximum value is ' + str(mmax))
return None
find_min_and_max('132475689')
# The minimum value is 1
# The maximum value is 9

但是,您的代码中有一些奇怪的选择。例如,将数字作为字符串而不是整数进行比较。它有效。。。很奇怪。我会将字符串转换为int,而不是将int转换为字符串。如果只有一个值,则不需要特殊情况下的处理。

顺便说一句,让你可视化代码的pdb(Python调试器(或Python教程是了解程序内部情况的好资源。

相关内容

最新更新