博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codewars第八天--Good vs Evil
阅读量:4303 次
发布时间:2019-05-27

本文共 2024 字,大约阅读时间需要 6 分钟。

Codewars第八天–Good vs Evil

题目描述:

霍比特人:1男子:2精灵:3矮人:3老鹰队:4巫师:10在邪恶的一面,我们有:兽人:1男子:2Wargs:2哥布林:2Uruk Hai:3巨魔:5巫师:10输入:该函数将给出两个参数。每个参数都是由单个空格分隔的字符串。每个字符串将包含善恶方面的每个种族的数量。第一个参数将按以下顺序包含good的一侧的每个种族的计数:霍比特人,男人,精灵,矮人,老鹰,巫师。第二个参数将按以下顺序包含邪恶方面的每个种族的计数:兽人,男人,Wargs,哥布林,乌鲁克海,巨魔,巫师。所有值都是非负整数。由此产生的每一方的总和不会超过32位整数的限制。输出:通过他们的总的战斗力来判断哪一个势力将会在战斗中获胜.

开始时,所写的代码如下,通过记录输入的种族人数的索引去对应value 中的值,然后将他们相乘求和。

但是最后的结果永远会有6个test 通不过。例如:{1 0 0 0 1 0},{0 0 0 0 0 1 0} 。他们得到的正确结果应当是平手都为5,但是代码给的结果是evil 获胜了。通过输出他们具体的值发现,代码得出的结果是good 为2,evil 为5。
仔细查看代码发现,因为在这里我用的是索引去查找对应worth 中的值。而这个test 中不同位置上有着两个相同的值,使用index() 去找索引,他永远都只会返回索引0的值,找不到正确的位置,因此这样做事行不通的。

def goodVsEvil(good, evil):    good_worth = [1, 2, 3, 3, 4, 10]    evil_worth = [1, 2, 2, 2, 3, 5, 10]    good = good.split()    evil = evil.split()    good_value = 0    evil_value =0    for i in good:            index_g = int(good.index(i))            good_value += int(i) * good_worth[index_g]    for j in evil:            index_e = int(evil.index(j))            evil_value += int(j) * evil_worth[index_e]    if good_value > evil_value:        return 'Battle Result: Good triumphs over Evil'    elif good_value < evil_value:        return 'Battle Result: Evil eradicates all trace of Good'    else:        return 'Battle Result: No victor on this battle field'

改进的代码如下,这里使用了Python3zip 函数,这个函数可以将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。 他可以将这里的两个goodgood_worth 打包成一个元组,每个位置的值直接对应起来,不需要手动去查找index

def goodVsEvil(good, evil):    good_worth = [1, 2, 3, 3, 4, 10]    evil_worth = [1, 2, 2, 2, 3, 5, 10]    good = good.split()    evil = evil.split()    good_value = 0    evil_value =0    for i,j in zip(good, good_worth):            good_value += int(i) * j    for i,j in zip(evil, evil_worth):            evil_value += int(i) * j    if good_value > evil_value:        return 'Battle Result: Good triumphs over Evil'    elif good_value < evil_value:        return 'Battle Result: Evil eradicates all trace of Good'    else:        return 'Battle Result: No victor on this battle field'

转载地址:http://zqmws.baihongyu.com/

你可能感兴趣的文章
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>
HTTPS
查看>>
git add . git add -u git add -A区别
查看>>
apache下虚拟域名配置
查看>>
session和cookie区别与联系
查看>>
PHP 实现笛卡尔积
查看>>
Laravel中的$loop
查看>>
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Laravel 操作redis的各种数据类型
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>