鱼C论坛

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

关于input获取用户输入的数据

[复制链接]
发表于 2016-3-1 14:20:31 | 显示全部楼层 |阅读模式
10鱼币
假设我现在定义了一系列函数:fun1 = (x);        fun2 = (x,y);        fun3(x,y,z)等等。如何用input实现以下功能:
        获取用户输入的函数名和函数对应的变量,并返回函数结果?

最佳答案

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

使用道具 举报

发表于 2016-3-1 14:20:32 | 显示全部楼层
举个例子:
  1. >>> def f1(x):
  2.         return x*x

  3. >>> a =input()
  4. f1(3)
  5. >>> eval(a)
  6. 9
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-1 21:07:30 | 显示全部楼层

没看明白为什么input()中没有接收输入,却可以eval(a)得到9?可否详细解释下。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-1 21:24:38 | 显示全部楼层
安以陌 发表于 2016-3-1 21:07
没看明白为什么input()中没有接收输入,却可以eval(a)得到9?可否详细解释下。。。

a接收了input的输入"f1(3)",相当于增加一行语句f1(3),所以得到9
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-1 22:09:38 | 显示全部楼层

请教一下,假设我定义了两个函数,如何做到在同一行输入两个函数名,然后同时执行?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-1 22:21:04 | 显示全部楼层
这样做。
  1. >>> def f1(x):
  2.         return x*x

  3. >>> def f2(x):
  4.         return 2*x

  5. >>> a, b = eval(input('请输入需要调用的函数:'))
  6. 请输入需要调用的函数:f1(3), f2(5)
  7. >>> print(a)
  8. 9
  9. >>> print(b)
  10. 10
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-2 12:55:25 | 显示全部楼层

eval()和exec()有什么区别呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 13:33:09 | 显示全部楼层
shadowrocker 发表于 2016-3-2 12:55
eval()和exec()有什么区别呢?

抄了一段网上的说法:
(1)eval(str [,globals [,locals ])函数将字符串str当成有效Python表达式来求值,并返回计算结果。
(2)exec()函数将字符串str当成有效的Python表达式来执行,不返回计算结果
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-2 13:58:05 | 显示全部楼层
本帖最后由 shadowrocker 于 2016-3-2 14:02 编辑


那我如果有不止两个函数,想在同一行输入几个函数都可以,那要怎么做呢?不一定要用input。
P.S.我想让电脑自动读取,所以我用了sys.stdin.readine(),但是无法一次性读取任意数量的函数,大神求教!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 16:43:15 | 显示全部楼层
shadowrocker 发表于 2016-3-2 13:58
那我如果有不止两个函数,想在同一行输入几个函数都可以,那要怎么做呢?不一定要用input。
P.S.我想 ...

可以用open将文本文件读入成为一个列表,每行为一个元素,再有选择的执行。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-2 19:49:52 | 显示全部楼层
冬雪雪冬 发表于 2016-3-2 16:43
可以用open将文本文件读入成为一个列表,每行为一个元素,再有选择的执行。

可以举个例子吗?感激不尽!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 20:14:12 | 显示全部楼层
shadowrocker 发表于 2016-3-2 19:49
可以举个例子吗?感激不尽!

文本文件的内容如下:
  1. a = input('请输入一个整数')
  2. print(a)
  3. print('这行不打印')
  4. print('这行打印')
复制代码


在idle中执行:
  1. >>> f = open('d:\\py\\text.txt')
  2. >>> f_list = list(f)
  3. >>> f_list
  4. ["a = input('请输入一个整数')\n", 'print(a)\n', "print('这行不打印')\n", "print('这行打印')\n"]
  5. >>> exec(f_list[0])
  6. 请输入一个整数12
  7. >>> exec(f_list[1])
  8. 12
  9. >>> exec(f_list[3])
  10. 这行打印
  11. >>> f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-2 20:54:38 | 显示全部楼层
冬雪雪冬 发表于 2016-3-2 20:14
文本文件的内容如下:

如果文本文件本身分行,比如:
  1. print('这行不

  2. 打印')
复制代码


如何消除自身的换行?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-2 22:06:05 | 显示全部楼层
shadowrocker 发表于 2016-3-2 20:54
如果文本文件本身分行,比如:

因读入文件时是以\n作为分隔元素的标志,所以这个语句会分成3个元素,无法自动合并,只能人工判定并操作
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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