codewars Kata——IQ Test问题

实现思路和代码

由于输入给定是一个字符串,每个数字之间用空格间隔开,所以先对字符串进行分割和转int的操作,然后遍历数组,查看每个数的奇偶性,统计奇数和偶数的个数,同时分别将第一次出现的奇偶数的索引进行记录。最后判断奇偶数的数量,给出目标的索引。

代码如下:

# -*- coding: utf-8 -*-
"""
codewars Kata: IQ Test

Created on Sun Nov 22 09:24:31 2020

@author: Pray
"""

def iq_test(numbers):
    n_odd = 0
    n_even = 0
    d = dict()
    number_list = numbers.split(' ')
    for i in range(len(number_list)):
        num = int(number_list[i])
        if(num%2 == 0):
            n_even = n_even + 1
            if 'even' not in d.keys():
                d['even'] = i + 1
        else:
            n_odd = n_odd + 1
            if 'odd' not in d.keys():
                d['odd'] = i + 1
    if(n_even > n_odd):
        return d['odd']
    else:
        return d['even']
    
numbers = "1 2 1 1"
print(iq_test(numbers))

其他的实现方式

网上的思路大同小异。这里主要放一些更加简洁有效的实现方式。
下面要介绍的一个解决方案可以很简洁地实现这一功能。其思路是根据数组中每一个数是否偶数建立一个同样大小的由bool变量组成的列表,通过对这个bool列表中的True和False进行计数(list.count)来找到目标对应的索引。这里主要是要掌握一些列表的方法,他们可以作为编程技巧大大提高我们的编程效率。

代码如下:

def iq_test(numbers):
    e = [int(i) % 2 == 0 for i in numbers.split()]

    return e.index(True) + 1 if e.count(True) == 1 else e.index(False) + 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值