鱼C论坛

 找回密码
 立即注册
查看: 183|回复: 7

想问下这道题还有其他解法吗?

[复制链接]
发表于 2024-8-26 15:35:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目要求:如果输入的姓名是'James','Amy','John','Amanda'和'Bob'中的一个,则同步输出后面对应的年龄(具体格式为name is age,例如 James is 42),如果输入的姓名不在前面提到的5者之中,则直接输出Not Found。
下面是参考答案:
contacts = [
    ('James', 42),
    ('Amy', 24),
    ('John', 31),
    ('Amanda', 63),
    ('Bob', 18)
]
name=input('请输入姓名:')
NotFound=True  #
for x in contacts:
    if x[0]==name:
        print('{} is {}'.format(x[0],x[1]))
        NotFound=False #
        break #
if NotFound: #
    print('Not Found')

请教下:
#备注的这几行代码是什么意思,除了这种解法,还有其他推荐的程序写法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-8-26 15:43:51 | 显示全部楼层
鱼油你好!我明白你提出的问题。我们先来看一下代码中备注的几行是什么意思:

- `NotFound=True`:初始化一个变量`NotFound`为`True`,表示还没有找到对应的姓名。
- `NotFound=False`:一旦找到了对应的姓名,将`NotFound`设置为`False`,表示找到了。
- `break`:在找到匹配的姓名后,立即终止循环。
- `if NotFound:`:当循环结束后,如果`NotFound`仍然是`True`,说明输入的姓名在预定义名单中未找到。

这种方法通过一个循环和标志变量`NotFound`来处理找到或未找到的情况。

接下来我给你一个更加简洁的方法,使用字典来存储姓名和对应的年龄:
contacts = {
    'James': 42,
    'Amy': 34,
    'John': 29,
    'Amanda': 25,
    'Bob': 50
}

name = input('请输入姓名:')

if name in contacts:
    print(f'{name} is {contacts[name]}')
else:
    print('Not Found')

解释:
- 使用字典`contacts`来存储姓名和年龄的对应关系,方便快速查找。
- 使用`if name in contacts`来检查姓名是否在字典中。
- 如果找到,则输出对应的年龄;如果找不到,则输出`Not Found`。

这种方法直接利用字典的查找特性,更加简洁和高效。希望这样讲解对你有帮助!有什么其他问题随时问我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-26 16:18:17 | 显示全部楼层
这样写 也可以   都差不多  不过 for......else  一般新手更不容易理解
contacts = [('James', 42),('Amy', 24),('John', 31),('Amanda', 63),('Bob', 18)]
name=input('请输入姓名:')
for x in contacts:
    if x[0]==name:
        print('{} is {}'.format(x[0],x[1]))
        break 
else:
    print('Not Found')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-8-26 17:12:33 | 显示全部楼层
wp231957 发表于 2024-8-26 16:18
这样写 也可以   都差不多  不过 for......else  一般新手更不容易理解

else和for是一个等级,怎么理解,没太懂,233333
我之前把else放在和if同一等级,然后输出Amy时,会先输出Not Found,再输出Amy is 24
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-26 17:23:37 From FishC Mobile | 显示全部楼层
2666 发表于 2024-8-26 17:12
else和for是一个等级,怎么理解,没太懂,233333
我之前把else放在和if同一等级,然后输出Amy时,会先输 ...

python是一个等级森严的语言
层次结构不可以瞎弄的
for....else要求for里面要有break语句
如果那个break没有机会被执行,那么就会跑到else这里
这样就省下了加一个变量标记,然后再循环中修改这个标记,已达到判断的目标
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-26 17:29:52 | 显示全部楼层
本帖最后由 jackz007 于 2024-8-26 18:29 编辑
contacts = {'James' : 42 ,
    'Amy'    : 24 ,
    'John'   : 31 ,
    'Amanda' : 63 ,
    'Bob'    : 18}
name = input('请输入姓名:')
if name in contacts . keys() :              # 如果 name 出现在列表 ['Amy' ,  'John' ,  'Amanda' ,  'Bob'] 中 
    print(name + ' is ' + str(contacts[name]))
else :                                      # 否则
    print('Not Found')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-26 19:17:52 | 显示全部楼层
wp231957 发表于 2024-8-26 17:23
python是一个等级森严的语言
层次结构不可以瞎弄的
for....else要求for里面要有break语句

长见识了,2333,这个代码是真的强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-26 19:19:06 | 显示全部楼层

这个解法也很nice,不过原题contacts是列表中的元组形式,23333,要先用dict转为字典
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表