我可以带你回家吗 2020-05-21 16:55 采纳率: 0%
浏览 337

提问:format格式化函数

小白提问,一个累乘函数

def cmul(a, *b):
    m = a
    for i in b:
        m *= i
    return m

如果用

print(eval(cmul(input())))

输入1,2,3,4,等于只传入了一个tuple,所以输出(1,2,3,4)。
可是用format函数就能打印期望的结果,为什么呢?

print(eval("cmul({})".format(input())))

输出24

  • 写回答

3条回答 默认 最新

  • weixin43976705 2020-05-21 18:04
    关注

    代码加入3行输出语句,如下:

    def cmul(a, *b):
        print(a)
        print(b)
        m = a
        for i in b:
            m *= i
            print(i)
        return m
    

    代码运行结果如下:

    print(eval(cmul(input())))

    键盘输入:
    1,2,3,4
    运行结果:
    UnboundLocalError: local variable 'i' referenced before assignment #局部变量 i 未赋值
    1,2,3,4 #a
    () #b

    解释:
    把元组看作一个变量传递给变量a,b是空的,循环变量 i 没有得到赋值(因为 b是空的),for循环无用;

    print(eval("cmul({})".format(input())))

    键盘输入:

    1,2,3,4
    运行结果:

    1 #a
    (2, 3, 4) #b
    4 #i的最终值
    24 #print(eval("cmul({})".format(input())))运行结果

    解释:
    使用了format,即将(1,2,3,4)中的1赋值给a,剩下的赋值给b,for循环正常运行,得到正确结果。

    评论

报告相同问题?

悬赏问题

  • ¥15 联想笔记本开机出现系统更新界面
  • ¥15 各位帮帮我 我不想重做系统
  • ¥30 微信小程序蓝牙数据透传
  • ¥15 加氢站氢负荷数据集来源
  • ¥15 umi接入sentry遇到问题
  • ¥15 HBuilderX打包H5网页,扫码模块无法使用
  • ¥15 Javascript跳转页面后,无法执行后面代码,如何解决?
  • ¥15 echarts绘制图表
  • ¥15 请教两个关于高德地图定位不准的技术问题
  • ¥15 根据企业名称 对照两个文件 样本筛选/匹配