鱼C论坛

 找回密码
 立即注册
查看: 3069|回复: 9

019-函数-当定义输入多参数 def m(*name),如何使用input()来获得多参数?

[复制链接]
发表于 2016-4-4 13:23:28 | 显示全部楼层 |阅读模式
10鱼币
019-函数-课后题里,当定义收集多参数 def m(*name),如何使用 name=input('小猫',‘乌龟’,‘章鱼’)来输入这些多参数呢?
在课后题里,小甲鱼用的类似是  m('小猫',‘乌龟’,‘章鱼’) ,但是这样就只能用在程序里 事先定义好的参数了,
但是我想用 input 来收集这些参数,来实现 与 小甲鱼那种内部定义的方法 一样的效果的功能。

这是程序代码(小甲鱼方法)

  1. def m(*name):
  2.     return (name)

  3. print( m('小猫','小狗','章鱼',520) )
复制代码



这是运行结果(小甲鱼方法):生成一个元组,含有四个元素

  1. >>>
  2. ('小猫', '小狗', '章鱼', 520)
复制代码


①用input收集     print( m(name) )

  1. def m(*name):
  2.     return (name)

  3. name=input('请输入需要收集的姓名:')
  4. print( m(name) )
复制代码


运行结果:生成一个元组,但只有一个元素,这样不行!

  1. >>>
  2. 请输入需要收集的姓名:'小猫','小狗','章鱼',520
  3. ("'小猫','小狗','章鱼',520",)
复制代码


②用input收集     print( m( *name) )

  1. def m(*name):
  2.     return (name)

  3. name=input('请输入需要收集的姓名:')
  4. print( m( *name) ) #在name前加了 * 号
复制代码


运行结果:一个元组,但每个字符都被分开了成1个了,这样也不行!

  1. >>>
  2. 请输入需要收集的姓名:'小猫','小狗','章鱼',520
  3. ("'", '小', '猫', "'", ',', "'", '小', '狗', "'", ',', "'", '章', '鱼', "'", ',', '5', '2', '0')
复制代码


快来大神帮我想想办法!

最佳答案

查看完整内容

def m(*s,k): h = sum(s) z = h*k return z temp=input('请输入数字,以空格隔开(默认最后一个参数为关键字参数,也可指定关键字参数,用k=指定):\n') list1=temp.split() list2=[] x=None for each in list1: if 'k=' in each : x=int(each[2:]) else: list2.append(int(each)) if x==None: x=list2.pop() print(m(*list2,k=x))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-4 13:23:29 | 显示全部楼层
宝贝归来 发表于 2016-4-4 18:00
您好,您的方法的确可以完成input输入,并且只要以 空格 隔开就可以实现 名字的多参数 输入
但是如果像  ...

def m(*s,k):
    h = sum(s)
    z = h*k
    return z

temp=input('请输入数字,以空格隔开(默认最后一个参数为关键字参数,也可指定关键字参数,用k=指定):\n')
list1=temp.split()
list2=[]
x=None

for each in list1:
    if 'k=' in each :
        x=int(each[2:])
    else:
        list2.append(int(each))
if x==None:
    x=list2.pop()
   
print(m(*list2,k=x))

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
宝贝归来 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-4 14:34:18 | 显示全部楼层
我也在困惑这个问题,而且百度了一下还没找到……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-4 15:34:56 | 显示全部楼层
def fun(*name):
        return name
       
name = raw_input('please input names:')
list_name = name.split()
tuple_name = tuple(list_name)
print(fun(*tuple_name))

输出:
C:\Users\lk>python F:\python\myfun.py
please input names:hy dxw
('hy', 'dxw')

貌似可以满足你的要求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-4 18:00:35 | 显示全部楼层
hy564126834 发表于 2016-4-4 15:34
def fun(*name):
        return name
       

您好,您的方法的确可以完成input输入,并且只要以 空格 隔开就可以实现 名字的多参数 输入
但是如果像 018-课后题- def函数含有两个变量的,用这个方法就不行了~

程序是这样的(小甲鱼方式)

  1. def m(*s,k):
  2.     h = sum(s)
  3.     z = h*k
  4.     return z

  5. print(m(2,3,5,k=3))
复制代码


运行结果

  1. >>>
  2. 30
复制代码


如果像这样的含有2个变量的函数,不仅前面的 2 3 5 需要进行 求和,而且还要给 k 赋值。
如何用一句  input  来获得多参数呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-5 11:02:19 | 显示全部楼层
我是这样做的:
  1. >>> def m(*name): return (name)

  2. >>> print( m('小猫','小狗','章鱼',520) )
  3. ('小猫', '小狗', '章鱼', 520)
复制代码


  1. >>> name = input()
  2. '小猫', '小狗', '章鱼', 520
  3. >>> eval('print(m('+name+'))')
  4. ('小猫', '小狗', '章鱼', 520)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-5 11:09:01 | 显示全部楼层
确实有这样的疑惑~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-5 16:38:18 | 显示全部楼层
小火木 发表于 2016-4-4 20:15
def m(*s,k):
    h = sum(s)
    z = h*k

太感谢你了,这个读取方法涉及到了很多知识点,但都是前面学过的,看来程序没有捷径可走,想实现更多的方法,还是得从基础学起~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-6 09:14:50 | 显示全部楼层
宝贝归来 发表于 2016-4-4 18:00
您好,您的方法的确可以完成input输入,并且只要以 空格 隔开就可以实现 名字的多参数 输入
但是如果像  ...

确实没考虑这种场景。鱼币太难赚了,课后习题只看了很少的一部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-26 20:09:14 | 显示全部楼层
知音啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 11:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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