为什么我的代码无论实际最小值是多少都返回0?

时间:2018-07-21 01:10:13

标签: python

我正在为一段代码分配一段代码,当给定一个字符串时,该代码应该找到最小值和最大值。这是我到目前为止编写的代码:

 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?无论输入什么数字字符串,都会发生这种情况。谢谢。

2 个答案:

答案 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是了解程序内部发生的事情的好资源。