2666 发表于 2024-8-26 15:35:08

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

题目要求:如果输入的姓名是'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==name:
      print('{} is {}'.format(x,x))
      NotFound=False #
      break #
if NotFound: #
    print('Not Found')

请教下:
#备注的这几行代码是什么意思,除了这种解法,还有其他推荐的程序写法吗?

FishC 发表于 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}')
else:
    print('Not Found')

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 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==name:
      print('{} is {}'.format(x,x))
      break
else:
    print('Not Found')

2666 发表于 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

wp231957 发表于 2024-8-26 17:23:37

2666 发表于 2024-8-26 17:12
else和for是一个等级,怎么理解,没太懂,233333
我之前把else放在和if同一等级,然后输出Amy时,会先输 ...

python是一个等级森严的语言
层次结构不可以瞎弄的
for....else要求for里面要有break语句
如果那个break没有机会被执行,那么就会跑到else这里
这样就省下了加一个变量标记,然后再循环中修改这个标记,已达到判断的目标

jackz007 发表于 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))
else :                                    # 否则
    print('Not Found')

2666 发表于 2024-8-26 19:17:52

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


长见识了,2333,这个代码是真的强

2666 发表于 2024-8-26 19:19:06

jackz007 发表于 2024-8-26 17:29


这个解法也很nice,不过原题contacts是列表中的元组形式,23333,要先用dict转为字典
页: [1]
查看完整版本: 想问下这道题还有其他解法吗?