我是一个生物系的学生,正试图进入编程领域,但我在为一个研究项目编写一个基本索引计算器时遇到了一些问题。{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)
=====================================================
这是代码的简化形式,因为您是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
?在所以,我们来解决这些问题:
仍有许多方法可以改善这一点:
13.2.4
或{if
/else
的意思,它可能会更可读。在-x ln x
的和,而是-p ln p
的和,其中每个p
是x / sum(all x)
的比例。要处理这个问题,需要将所有的原始x
值保存在一个列表中,这样就可以将其转换为p
值的列表,这样就可以对这些值求和了。在相关问题 更多 >
编程相关推荐