2017-07-08 1 views
2

Je travaille sur le défi des sentiments pour CS50 et je veux imprimer dans la console avec la couleur en utilisant Termcolor et les espaces réservés, mais j'ai un problème.placeholder dans termcolor python

Ceci est mon code:

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)) 

Je veux imprimer le tweet en fonction du score (vert, rouge ou jaune) et c'est ok, le code fonctionne bien avec lambda x, mais je veux aussi imprime un nombre avant le tweet de la même couleur.

J'ai essayé lambda x, y, mais j'ai une erreur:

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,' 

C'est ce que je veux imprimer:

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

Répondre

1

Vous pouvez créer une sous-tâche et l'appeler aussi:

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) 
... 
+0

J'ai déjà essayé quelque chose comme ça, avec votre solution J'ai une erreur: Trop d'arguments positionnels pour l'appel lambda – Sebastiano

+0

@Sebastiano Je fais un montage, laissez-moi savoir si cela fonctionne –

+0

nop, mais je trouve une solution: impression (couleur ("1", "vert") + vert (tweets)) peut-être il y a un moyen plus facile – Sebastiano

1

cette façon ne fait sens avec votre code?

(Cette syntaxe ne fonctionne que pour python> = 3,5, les paramètres non emballés doivent être la dernière pour éviter toute ambiguïté dans les versions antérieures)

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

Vous passez une liste de paramètres, gazouiller seul ou nombre et gazouiller, puis il est déballer dans le lambda

+0

de cette façon, j'ai une erreur: SyntaxError: que les arguments nommés peuvent suivre * expression – Sebastiano

+0

@sebastiano, je suis curieux de reproduire ceci, quelle version de python utilisez-vous? – PRMoureu

+0

Python 3 dans Cloud9 avec l'IDE CS50 – Sebastiano