鱼C论坛

 找回密码
 立即注册
查看: 2513|回复: 13

[已解决]这是一个关于元组和集合的问题

[复制链接]
发表于 2020-3-5 11:24:40 | 显示全部楼层 |阅读模式

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

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

x
先看看代码吧
  1. VTB = {"1":"Kagulanana","2":"Fubuki","114514":"Matsuri"}
  2. print(tuple(VTB.keys()))
  3. key1 = eval(input("请从上述提示中任选一个key值输入: "))
  4. def search(key0):
  5.     VTB = {"1":"Kagulanana","2":"Fubuki","114514":"Matsuri"}
  6.     t0 = tuple(VTB.keys())
  7.     if key0 in t0:
  8.         print(key0,"指向的条目是",VTB[key0])
  9.     else:
  10.         print("请输入提示中的key值,请再次输入")
  11. search(key1)
复制代码

就是一个字典的练习作业
问题在于代码的第三行,输入key1的时候我不能直接输入数字1,会引起报错,而得输入'1'(必须带单引号)才能返回我想要的值
为什么会这样?
该怎么改良一下让我只输入一个字符1就能返回我想要的值?
感谢大手子们
最佳答案
2020-3-5 14:53:39
Fimbulex 发表于 2020-3-5 14:25
我看完了这个
但是还是没有解释我这条语句
key1 = eval(input("请从上述提示中任选一个key值输入: ") ...
  1. >>> a = input("请输入:")
  2. 请输入:qiuyouzhi
  3. >>> a
  4. 'qiuyouzhi'
  5. >>> eval(a)
  6. Traceback (most recent call last):
  7.   File "<pyshell#2>", line 1, in <module>
  8.     eval(a)
  9.   File "<string>", line 1, in <module>
  10. NameError: name 'qiuyouzhi' is not defined
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-5 11:27:13 | 显示全部楼层
把eval去掉:
  1. VTB = {"1":"Kagulanana","2":"Fubuki","114514":"Matsuri"}
  2. print(tuple(VTB.keys()))
  3. key1 = input("请从上述提示中任选一个key值输入: ")
  4. def search(key0):
  5.     VTB = {"1":"Kagulanana","2":"Fubuki","114514":"Matsuri"}
  6.     t0 = tuple(VTB.keys())
  7.     if key0 in t0:
  8.         print(key0,"指向的条目是",VTB[key0])
  9.     else:
  10.         print("请输入提示中的key值,请再次输入")
  11. search(key1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 11:35:46 | 显示全部楼层

eval的意思我记得是取值,为什么这里不能用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 11:40:46 | 显示全部楼层
Fimbulex 发表于 2020-3-5 11:35
eval的意思我记得是取值,为什么这里不能用

input会自动将输入的东西转换成字符串
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 11:48:56 | 显示全部楼层
qiuyouzhi 发表于 2020-3-5 11:40
input会自动将输入的东西转换成字符串

  1. number1 = eval(input("Enter a number: "))
  2. print(number1)
复制代码

那为什么我这一条就没问题呢
我这两种输入的区别在哪
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 11:49:46 | 显示全部楼层
Fimbulex 发表于 2020-3-5 11:48
那为什么我这一条就没问题呢
我这两种输入的区别在哪

因为你输入的是数字鸭
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 12:06:22 | 显示全部楼层
qiuyouzhi 发表于 2020-3-5 11:49
因为你输入的是数字鸭

刚学python,不是很懂
刚刚去百度了一下input和eval两个函数
说是input返回的是str类型
而eval有一个用法是去掉字符串原本的引号,保留字符原本属性。
那为什么我加了eval反而要输入引号?
越看越迷
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 12:59:51 | 显示全部楼层
Fimbulex 发表于 2020-3-5 12:06
刚学python,不是很懂
刚刚去百度了一下input和eval两个函数
说是input返回的是str类型

eval() 中填字符串表示变量名:

  1. >>> x = 5
  2. >>> eval('x')
  3. 5
复制代码


需要加引号才能表示字符串:

  1. >>> eval('"x"')
  2. 'x'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 13:02:08 | 显示全部楼层
Fimbulex 发表于 2020-3-5 12:06
刚学python,不是很懂
刚刚去百度了一下input和eval两个函数
说是input返回的是str类型

因为去掉引号它就不是字符了啊
所以要加一个引号,input再加一个引号,然后eval去掉一个
(瞎猜的,我先去百度一哈)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 13:04:03 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 14:25:57 | 显示全部楼层


我看完了这个
但是还是没有解释我这条语句
key1 = eval(input("请从上述提示中任选一个key值输入: "))
必须输入字符串的问题
dalao可以说的更明白一点吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 14:38:06 | 显示全部楼层
qiuyouzhi 发表于 2020-3-5 13:04
https://blog.csdn.net/ywx1832990/article/details/81284270

老哥们,我突然意识到一个问题
在字典这一块,字典中每一个条目的键是不是根本就不是int类型,而是str类型?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 14:53:39 | 显示全部楼层    本楼为最佳答案   
Fimbulex 发表于 2020-3-5 14:25
我看完了这个
但是还是没有解释我这条语句
key1 = eval(input("请从上述提示中任选一个key值输入: ") ...
  1. >>> a = input("请输入:")
  2. 请输入:qiuyouzhi
  3. >>> a
  4. 'qiuyouzhi'
  5. >>> eval(a)
  6. Traceback (most recent call last):
  7.   File "<pyshell#2>", line 1, in <module>
  8.     eval(a)
  9.   File "<string>", line 1, in <module>
  10. NameError: name 'qiuyouzhi' is not defined
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 16:11:44 | 显示全部楼层
  1. VTB = {1:"Kagulanana",2:"Fubuki",114514:"Matsuri"}
  2. print(tuple(VTB.keys()))
  3. key1 = eval(input("请从上述提示中任选一个key值输入: "))
  4. def search(key0):
  5.     VTB = {1:"Kagulanana",2:"Fubuki",114514:"Matsuri"}
  6.     t0 = tuple(VTB.keys())
  7.     if key0 in t0:
  8.         print(key0,"指向的条目是",VTB[key0])
  9.     else:
  10.         print("请输入提示中的key值,请再次输入")
  11. search(key1)
复制代码
这样就可以了。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 11:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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