0

大家好,我想制作一个接受两个用户输入的程序。第一个是标量,第二个是提供的列表或数组。该数字将是一个乘数,用于缩放数组,输出将是相乘后的数组。

import numpy as np

a = [1, 3, 5, 7, 9]
b = [2, 4, 6, 8, 10]

另外,为了给用户增加方便,如果没有输入数字,我希望有一个默认标量 1。

我很抱歉缺少代码,但我尝试过的一切都没有奏效。

我知道使用

x, y = input().split() 

将使用户能够输入两个输入,例如

3 a

或者

5.5 b

这就是我希望输入输入的方式。但是,虽然数字可以转换为浮点数,但我不知道如何将字符串中的字母 a 或 b 解释为它们的数组名称。

float(x)*np.array(y)

我认为由于数据类型不匹配而发生了以下错误。

 float(x)*np.array(y)
TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

如果有人可以提供解决方案,或者如果有比您的输入更好的方法来做到这一点,我们将不胜感激。谢谢你。

4

2 回答 2

2

我想这有帮助!这也处理了用户没有指定乘数的情况,然后它自动默认为 1

import numpy as np

a = np.array([1, 3, 5, 7, 9])
b = np.array([2, 4, 6, 8, 10])

y,*x = input().split()
if not x:
    x=[1]

print(float(x[0])*eval(y))
于 2020-05-11T18:46:55.810 回答
1

您的问题有两种解决方案,一种更清洁。

第一个(脏)在于 using eval,因为您的用户将作为输入传递的aor将被评估为字符串,而不是您的变量 named 。所以你必须返回。bafloat(x) * eval(y)

eval强烈反对使用 。

我认为更简洁的方法是在 a 中声明您的预定义数组dict并查找用户提供的密钥,如下所示:

import numpy as np

arrays = {
    "a": np.array([1, 3, 5, 7, 9]),
    "b": np.array([2, 4, 6, 8, 10])
}

coefficient, array_name = input().split()

print(float(coefficient) * arrays[array_name])

注意:在您的原始代码中,a = [1, 3, 5, 7, 9]定义了一个列表。而且您不能将 afloat和列表相乘。你最终可以乘以和int一个列表,但这不是你想要的,它会复制你的列表:)

于 2020-05-11T18:40:21.940 回答