Python 如何实现输入阵列的输出?

Python 如何实现输入阵列的输出?,python,python-3.x,Python,Python 3.x,给定一个整数数组,处理每个数组元素并返回结果数组。 如果元素为偶数,则向其添加2。 如果元素为奇数,则向其添加1。 数组将不包含任何负整数。 例如 我的代码: def EvenOddSum(a, n): even = 0 odd = 0 for i in range(n): if i % 2 == 0: even += a[i] else: odd += a[i] p

给定一个整数数组,处理每个数组元素并返回结果数组。 如果元素为偶数,则向其添加2。 如果元素为奇数,则向其添加1。 数组将不包含任何负整数。 例如

我的代码:

def EvenOddSum(a, n): 
    even = 0
    odd = 0
    for i in range(n): 


        if i % 2 == 0: 
            even += a[i] 
        else: 
            odd += a[i] 

    print("Even index positions sum ", even )
    print ("Odd index positions sum ", odd )
arr=input("Enter array : ")
n = int(input("Enter number of elements in arr : ")) 

print(EvenOddSum(arr, n) )

我试过这个,但是这个。但代码显示不支持的操作数类型错误。此外,我无法实现问题中所述的逻辑。 如何解决我的问题。请帮忙。

这行:

arr=input("Enter array : ")
为您提供一个
str
,而不是列表。您可能需要更像:

arr = list(map(int, input("Enter array : ").split()))
它接受
str
输入,
将其拆分为
列表[str]
,然后
将其映射为
列表[int]

请注意,这假设您以“1234”的形式输入数组,而不是像“{1,2,3,4}”这样的复杂语法(您可以编写更多代码来处理这些语法,但如果这不是任务的一部分,我不建议故意让您的生活更困难)

您还应该将函数定义为只获取数组,而不是数组加上计数(因为数组已经包含长度)。然后,为了测试它,您只需从stdin获取数组并在一个步骤中调用函数:

>>> def even_odd_sum(a):
...     return [i + (2 - i % 2) for i in a]
...
>>> even_odd_sum(list(map(int, input("Enter array: ").split())))
Enter array: 1 2 3 4 5
[2, 4, 4, 6, 6]

如果您想精确匹配原始问题中给出的时髦格式,这比实现实际函数要多得多,但它可能看起来像:

from typing import Any, List

def even_odd_sum(a: List[int]) -> List[int]:
    return [i + (2 - i % 2) for i in a]

def input_funky_formatted_list(funk: str) -> List[str]:
    if funk[0] != "{" or funk[-1] != "}":
        raise ValueError("this formatting is insufficiently funky")
    return funk[1:-1].split(",")

def output_funky_formatted_list(arr: List[Any]) -> str:
    return "{" + ",".join(map(str, arr)) + "}"

arr = list(map(int, input_funky_formatted_list(input("Input 1 : "))))
input("Input 2 : ")  # discard this, it serves no purpose
print(f"Output : {output_funky_formatted_list(even_odd_sum(arr))}")

代码的第一个问题是,
input()
的结果是一个与实际键入内容无关的字符串。 要使
arr
最终包含一个数字数组(可能是一个
列表
),您应该解析
input()
产生的字符串,或者采用另一种输入策略(见下文第三期)

Python库对此非常有帮助,您可以考虑使用<代码> AST.ListalyValueAuthor(<)>代码>,例如:

import ast


s = '{1,2,3,4,5}'
items = ast.literal_eval('[' + s[1:-1] + ']')
print(items)
# [1, 2, 3, 4, 5]
如果你对输入有一定的自由度,你可以省去一些工作,甚至采取更直接的方法


第二个问题是,
EvenOddSum()
(顺便提一下,它不是根据命名的)没有实现逻辑来满足您的期望

一种方法是:

# offsets=(even_offset, odd_offset)
def odd_even_sum(items, offsets=(2, 1)):
    return [item + offsets[item % 2] for item in items]

第三个问题是,如果您输入一个包含所有数组的字符串,有关其长度的信息是多余的,除非您使用它

例如,您可以使用它来检查数组是否具有所需的长度:

assert(len(items) == n)
或者使用它来简化您的输入:

def odd_even_sum(items, offsets=(2, 1)):
    return [item + offsets[item % 2] for item in items]


n = int(input('Array length?'))
items = []
for i in range(n):
    item = int(input(f'Item[{i}]?'))
    items.append(item)

综上所述:

def odd_even_sum(items, offsets=(2, 1)):
    return [item + offsets[item % 2] for item in items]


n = int(input('Array length?'))
items = []
for i in range(n):
    item = int(input(f'Item[{i}]?'))
    items.append(item)

new_items = odd_even_sum(items)

print(f' Input:  {items}')
print(f'Output:  {new_items}')

你不需要有人告诉你一个数组有多长才能遍历它
n=int(输入(“输入arr中的元素数:”)
是毫无意义的。它只会给用户一个错误计数的机会,从而使代码崩溃。您必须处理第一个输入arr。它不是数组类型,而是字符串类型,看起来像这样
{1,2,3,4,5}
,您必须将它们转换为int来执行一些操作数。我可以使用n=len(arr),但我想给出两个输入@约翰科勒曼你到底为什么想要一个毫无意义但可能有害的输入?如果您只想拥有第二个
input()
为什么不
color=input(“您最喜欢的颜色是什么?”)
。这与此相关。@GopisuryaForever如果您事先询问元素的数量,然后(使用
input()
)只获得适当数量的元素,这将更有意义。谢谢@Samwise。但是我需要以{1,2,3,4,5}的格式给出输入1,输入2作为5。输出应该是{2,4,4,6,6}。另外,我的代码没有将2添加到偶数,1添加到奇数,也没有显示输出。如何实现?如果这是一个类作业,我想你可能误解了它要求你做的事情。非常感谢@Samwise。但是有没有更简单的方法呢?我们可以忽略输入,只要输出是这个格式{2,4,6,6}所需要的。有没有其他方法可以访问数组中的元素,并将1添加到数组中的奇数,2添加到数组中的偶数?现在有很多人已经为您提供了这个问题的详细答案,并提供了有效的代码,您似乎没有阅读响应,甚至没有尽最小的努力尝试从答案中运行代码,所以我不确定还有什么需要做。祝你好运非常抱歉。我运行了每个人给出的每个输入,并标记了答案,但由于网络不好,没有记录下来。我不能得票,因为我没有那么高的声誉。抱歉@Samwise
def odd_even_sum(items, offsets=(2, 1)):
    return [item + offsets[item % 2] for item in items]


n = int(input('Array length?'))
items = []
for i in range(n):
    item = int(input(f'Item[{i}]?'))
    items.append(item)

new_items = odd_even_sum(items)

print(f' Input:  {items}')
print(f'Output:  {new_items}')