我正在为类的赋值编写一段代码,该类应该在给定字符串时找到最小值和最大值。这是我迄今为止写的代码:
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教程是了解程序内部情况的好资源。