香农多样性计划:基本问题

2024-09-27 02:16:39 发布

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

我是一个生物系的学生,正试图进入编程领域,但我在为一个研究项目编写一个基本索引计算器时遇到了一些问题。{I>在每一个输入点(^)输入一个新的数据到一个点(^ 1),用户需要在一个时间点上输入一个新的数据。一旦用户输入'done',我希望程序对数组值求和并返回该索引值。在

这就是我所拥有的。我是新来的,所以对任何重大错误深表歉意。任何正确的方向都是非常感谢的。在

import math

print('This program calculates a Shannon Diversity '
      'Index value for a set of data points entered by the user.'
      ' when prompted enter a species number value,then press enter. '
      'COntinue until all data points have been entered. '
      'Upon completion, enter the word done.')

def Shannonindex():

    index = []
    entries = 1,000,000
    endKey = 'done'

    for i in range(entries):
        index = [input("Enter a value: ")]

        if index != endKey:
        entry = p
        p = -1*(x*ln(x))
        index.append(p)
        else Sindex = sum(index)

        return Sindex

print('Your Shannon Diversity Value is: ", Sindex)

Tags: the数据用户fordataindexvaluepoints
2条回答
import math
index = []

for i in range(1,100000):
    val = input("Enter a value: ")

    if val =='done':
        break
    else:
        x = int(val)
        p = -1*(x*math.log(x))
        index.append(p)

print ("The value of index is %s:"%index)

=====================================================

这是代码的简化形式,因为您是python新手。 这可能有助于您获取存储在列表中的值,并在键入done之前进行计算。在

这里有很多问题。在

  • 你需要弄清楚你的变量。
    • 您试图使用index来表示值列表和输入字符串。它不可能同时意味着两件事。在
    • 您试图使用x而不在任何地方定义它。假设它应该是输入字符串的浮点值?如果是的话,你必须这么说。在
    • 您试图在p存在之前使用p来定义entry。但还不清楚entry对什么有用,因为你从来不使用它。在
  • 你还需要把你的控制流程理顺。
    • else的情况下,应该运行什么代码?要么它必须包含return,要么您需要其他方法来打破这个循环。在
  • 你还需要把你的类型弄清楚。[input(…)]将给您一个包含一个元素的列表,即输入字符串。很难想象那会有什么用处。您不能将该列表与'done'进行比较,也不能将其转换为float。你想要的只是输入字符串本身。在
  • 你不能仅仅猜测可能存在什么函数。没有名为ln的函数。查看Built-in Functions^{}模块的文档,以及其他与查找所需函数相关的内容。在
  • 1,000,000不是一个数,而是三个数的元组。
    • 你可以写1_000_000,也可以只写1000000。在
    • 但不清楚为什么你需要一个限制。为什么不永远循环直到回车done?在
  • 你已经定义了一个函数,但是你从来没有调用它,所以它没有任何好处。在

所以,我们来解决这些问题:

import math

def Shannonindex():    
    index = []
    endKey = 'done'    
    while True:
        value = input("Enter a value: ")
        if value != endKey:
            x = float(value)
            p = -1 * (x * math.log(x))
            index.append(p)
        else:
            Sindex = sum(index)
            return Sindex

Sindex = Shannonindex()
print('Your Shannon Diversity Value is: ", Sindex)

仍有许多方法可以改善这一点:

  • 添加一些错误处理,因此如果用户键入13.2.4或{},它会告诉他们再试一次,而不是放弃整个过程。在
  • 实际上,你不需要建立一个列表,只需保持一个连续的总数。在
  • 如果颠倒if/else的意思,它可能会更可读。在
  • 你不是在计算香农多样性指数。这不是-x ln x的和,而是-p ln p的和,其中每个px / sum(all x)比例。要处理这个问题,需要将所有的原始x值保存在一个列表中,这样就可以将其转换为p值的列表,这样就可以对这些值求和了。在

相关问题 更多 >

    热门问题