多用户输入、默认输入和StringtoArray转换

2024-09-27 00:16:19 发布

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

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

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')

如果有人能提供解决方案,或者有比您的意见更好的方法,我们将不胜感激。多谢各位


Tags: 用户import程序numpy列表np数字数组
2条回答

有两种解决方案,一种是更干净

第一个(dirty)是使用eval,因为用户作为输入传递的ab将作为字符串计算,而不是作为名为a的变量计算。 因此,您必须返回float(x) * eval(y)

但是eval的使用受到极大的阻碍

我认为更简洁的方法是在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]定义了一个列表。而且不能将float和列表相乘。你最终可以乘和int和一个列表,但这不是你想要的,它会复制你的列表:)

我想这有帮助! 这也可以处理用户没有指定乘数的情况,然后它会自动默认为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))

相关问题 更多 >

    热门问题