【问题标题】:placeholder in termcolor pythontermcolor python中的占位符
【发布时间】:2017-07-08 23:40:32
【问题描述】:

我正在处理 CS50 的情绪挑战,我想使用 Termcolor 和占位符在控制台中打印颜色,但我遇到了一些问题。

这是我的代码:

    if score > 0:
        green = lambda x: colored(x, 'green')
        print(green("1 ", tweets))
    elif score < 0:
        red = lambda x: colored(x, 'red')
        print(red(tweets))
    else:
        yellow = lambda x: colored(x, 'yellow')
        print(yellow(tweets))

我想根据分数(绿色、红色或黄色)打印推文,这没关系,代码与 lambda x 配合得很好,但我还想在推文之前以相同的颜色打印一个数字。

我试过 lambda x, y 但我有一个错误:

if score > 0:
   green = lambda x, y: colored(x, y, 'green')
   print(green("1 ", tweets))


Traceback (most recent call last):
File "./tweets", line 47, in <module>
  main()
File "./tweets", line 39, in main
  print(green("1 ", tweets))
File "./tweets", line 38, in <lambda>
  green = lambda x, y: colored(x, y, 'green')
File "/usr/lib/python3/dist-packages/termcolor.py", line 105, in colored
text = fmt_str % (COLORS[color], text)
  KeyError: 'Building Augmented Reality Experiences with Unity3D (and @Microsoft @HoloLens)  by @shekitup at @CS50 at @Harvard,'

这是我要打印的内容:

1 + (tweets) in green if positive
-1 + (tweets) in red if negative
0 + (tweets) in yellow if neutral

【问题讨论】:

    标签: python cs50


    【解决方案1】:

    您也可以创建一个子任务并调用它:

    def show_tweets_by_color(num, col, tweets):
      green = lambda x: colored(x, 'green')
      print(colored(str(num), " green") + green(tweets))
    
    
    if score > 0:
        show_tweets_by_color(1, "green", tweets)
    ...
    

    【讨论】:

    • 我已经尝试过这样的事情,你的解决方案我有一个错误:lambda call的位置参数太多
    • @Sebastiano 我进行了编辑,如果可行,请告诉我
    • nop,但我找到了解决方案: print(colored("1 ", "green") + green(tweets)) 也许有更简单的方法
    • @Sebastiano 是的,太棒了,这是一种可能的方式,我用另一种可能性编辑了答案,并且不要忘记将一个答案标记为已接受(答案中的左上角复选框:))
    • 这是一个很好的解决方案,为了更灵活,您可以将“green”更改为“col”,这样,您可以将相同的功能用于负正和中性:) 好。跨度>
    【解决方案2】:

    这种方式对您的代码有意义吗?

    (此语法仅适用于 python >= 3.5,解压后的参数应该是最后一个,以避免在以前的版本中出现歧义)

    if score > 0:
       green = lambda x: colored(*x, 'green')
       print(green(["1 ", tweets]))
    

    你传递一个参数列表,单独的推文,或者数字和推文,然后在 lambda 中解包

    【讨论】:

    • 这样我有一个错误:SyntaxError: only named arguments may follow *expression
    • @sebastiano,我很好奇重现这个,你用的是什么版本的python?
    • Cloud9 中的 Python 3 与 CS50 IDE
    • @PRMoureu 如果你用这个澄清来编辑答案,答案很好!加一个
    • 所以坚持 Damian 的解决方案 ;-)
    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 2019-06-04
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多