我正在为一段代码分配一段代码,当给定一个字符串时,该代码应该找到最小值和最大值。这是我到目前为止编写的代码:
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
在外壳上运行它时,这是我收到的答案:
“ >>> find_min_and_max('132475689')
“最小值为0”
“最大值为9”“
为什么我得到的最小值为0?无论输入什么数字字符串,都会发生这种情况。谢谢。
答案 0 :(得分: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))
中的第一个比较。正如我所说,您只需执行一次。
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))
上面的代码仅比较数字。如果您的字符串包含其他字符,则将无法使用。因此,您可以比较ASCII表中字符的代码。只要做:
width
答案 1 :(得分:0)
我将假定该字符串只能包含数字值,并且您想将其与数字值进行比较。
这是获得相同结果的快速简便的方法:
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 Tutor是了解程序内部发生的事情的好资源。