多个用户输入,默认输入,以及字符串到数组的转换。

问题描述 投票:0回答:1

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

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

如果有谁能提供一个解决方案,或者有更好的方法比你的意见将非常感激。谢谢大家。

python user-input default-value string-conversion multiple-input
1个回答
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))

1
投票

对于你的问题,有两种解决方案,一种是比较干净的。

第一种(脏)包括使用 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 和一个列表,但这不是你想要的,它会重复你的列表:)

© www.soinside.com 2019 - 2024. All rights reserved.