在新函数中使用函数的结果(加上更多)

2024-10-03 17:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力做到以下几点:

1)计算数据表中相同数字的数量。例:有三个介于10和20之间的数字。你知道吗

2)用相同的“#”号表示每个数字范围的值。例:10到20之间有3个数字=####。你知道吗

理想的结局是两个值相邻表示。你知道吗

不幸的是,我真的不明白第二步,任何帮助都将非常感谢。你知道吗

我的代码如下:

def count_range_in_list(li, min, max):
ctr = 0
for x in li:
    if min <= x <= max:
        ctr += 1
return ctr

def amountOfHashes(count_range_in_list,ctr):
  ctr = count_range_in_list()
  if ctr == 1:
    print ('#')
  elif ctr == 2:
     print ('##')
  elif ctr == 3:
     print ('###')
  elif ctr == 4:
     print ('####')
  elif ctr == 5:
     print ('#####')
  elif ctr == 6:
     print ('######')
  elif ctr == 7:
     print ('#######')
  elif ctr == 8:
     print ('########')
  elif ctr == 9:
     print ('#########')
  elif ctr == 10:
     print ('##########')


data = [90,30,13,67,85,87,50,45,51,72,64,69,59,17,22,23,44,25,16,67,85,87,50,45,51]
print(count_range_in_list(data, 0, 10),amountOfHashes)
print(count_range_in_list(data, 10, 20),amountOfHashes)
print(count_range_in_list(data, 20, 30),amountOfHashes)
print(count_range_in_list(data, 30, 40),amountOfHashes)
print(count_range_in_list(data, 40, 50),amountOfHashes)
print(count_range_in_list(data, 50, 60),amountOfHashes)
print(count_range_in_list(data, 60, 70),amountOfHashes)
print(count_range_in_list(data, 70, 80),amountOfHashes)
print(count_range_in_list(data, 80, 90),amountOfHashes)
print(count_range_in_list(data, 90, 100),amountOfHashes)    

Tags: indataifdefcountrange数字li
3条回答

我先澄清一下你的疑虑。你知道吗

首先,如何在另一个函数中使用函数的值:

  1. 这里不需要将一个方法的引用传递给另一个方法。我的意思是,在amountOfHashes(count_range_in_list,ctr)中,你可以把count_range_in_list作为一个参数,然后像amountOfHashes(ctr)那样定义它。或者更好的方法是,在方法名中使用snake case而不是camel case,这样就得到了amount_of_hashes(ctr)。即使如果必须在amount_of_hashes内执行count_range_in_list,Python也非常聪明,可以让您在不必传递函数引用的情况下执行,因为两个方法已经在同一个文件内。

  2. 为什么你只需要ctr?好吧,count_range_in_list已经返回了一个计数器,所以这就是我们所需要的。一个名为ctr的参数。为此,要“在新函数中使用函数的结果”,我们可以:

def amount_of_hashes(ctr):
  ...

# now, passing the value of count_range_in_list in amount_of_hashes
amount_of_hashes(count_range_in_list(data, 10, 20))

你已经很好地理解了步骤1),所以我们可以马上进入步骤2)。你知道吗

在Python中,最好动态地考虑迭代过程,而不是以硬编码的方式。也就是说,可以通过这种方式避免创建方法来检查相同的条件,但它们之间的差别很小,例如amountOfHashes中的方法:

# Method name changed for preference. Use the name that best fits you
def counter_hashes(ctr):
  # A '#' for each item in a range with the length of our counter
  if ctr == 0:
    return 'N/A'
  return ''.join(['#' for each in range(ctr)])

但正如罗兰·史密斯所指出的,你可以把一个字符串乘以一个数字——这正是你所想的:把字符串重复多次。你知道吗

>>> 3*'#'
###

所以你甚至不需要我上面的counter_hashes,你只要ctr*'#'就可以了。但是为了一致性,我将用这个新发现来改变counter_hashes

def counter_hashes(ctr):
  # will still return 'N/A' when ctr = 0
  return ctr*'#' or 'N/A'

出于组织目的,由于您有特定的需要(打印哈希值哈希计数),因此您可能希望正确格式化print中的内容,您可以为打印创建一个特定的方法,该方法同时调用counter_hashescount_Range_in_list,并在之后为您提供更清晰的结果:

def hash_range(data, min, max):
  ctr = count_range_in_list(data, min, max)
  hashes = counter_hashes(ctr)
  print(f'{hashes} | {ctr} items in range')

其使用和输出将变成:

>>> data = [90,30,13,67,85,87,50,45,51,72,64,69,59,17,22,23,44,25,16,67,85,87,50,45,51]
>>> hash_range(data, 0, 10)
N/A | 0 items in range
>>> hash_range(data, 10, 20)
### | 3 items in range
>>> hash_range(data, 20, 30)
#### | 4 items in range

等等。如果您只想立即打印内容,而不使用上面的hash_range方法,那么如果您想要一行,那么它会更简单,但会更冗长/重复:

>>> ctr = count_range_in_list(data, 10, 20)
>>> print(counter_hashes(ctr), ctr)
### 3

可以这样计算列表中的数字:

def count_range_in_list(li, mini, maxi):
    return len([i for i in li if mini <= i <= maxi])

那么做一些散列就更简单了。只需将包含哈希符号的字符串与数字相乘。你知道吗

print(ount_range_in_list(data, 0, 10)*'#')

IPython中的示例:

In [1]: data = [90,30,13,67,85,87,50,45,51,72,64,69,59,17,22,23,44,25,16,67,85,87,50,45,51]            

In [2]: def count_range_in_list(li, mini, maxi): 
   ...:     return len([i for i in li if mini <= i <= maxi]) 
   ...:                                                                                                  

In [3]: print(count_range_in_list(data, 0, 10)*'#')                                                      


In [4]: print(count_range_in_list(data, 10, 20)*'#')                                                     
###

In [5]: print(count_range_in_list(data, 20, 30)*'#')                                                     
####

为什么不这样做:

Python 3.x版:

def amount_of_hashes(ctr):

    while ctr > 0:
        print('#', end = '')
        ctr = ctr-1

Python 2.x版:

def amount_of_hashes(ctr):

        while ctr > 0:
            print '#',
            ctr = ctr-1

相关问题 更多 >