2017-02-14 2 views
-1

Моя цель - позволить пользователю вводить значения RGB для обеих переменных, но я не знаю, как заставить Python распознавать значение RGB с тегом заранее, например, с тегами int и float. Пример моего кода показан ниже.Как получить python для распознавания входа RGB?

shape_fill = input ("Which color do you want to fill your shape? Please enter an RGB value. ")) 
shape_pen = input ("Which color do you want the outline of your shape to be? Please enter an RGB value. ") 

У кого-нибудь есть решение?

BTW - Я использую Turtle Graphics, это имеет какой-то эффект?

+0

Я просто хотел, чтобы вы знали, что я сейчас решил эту проблему. Я достиг этого, разделив значение RGB на три разных '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

ответ

0

Просто пусть запятой значения пользовательского ввода:

R, G, B = map(float, input("Enter comma-separated: ").split(',')) 

Таким образом, когда человек входит 2.3, 6.7, 34.8, значение R, G и B будут поплавки, извлеченные из входных данных.

Вы также можете сделать:

shape_fill = map(...) 
shape_pen = map(...) 

А потом распаковывать поплавки позже с R, G, B = shape_something.

+0

Извините @ForceBru, но это не работает. В сообщении об ошибке говорится, что 'string' не может быть преобразована в' float'. –

+0

@ A.Kassam, о, извините, я забыл добавить важный аргумент в 'split'. Должно быть сейчас. – ForceBru

-1

Я считаю, что он меняет методы ввода, если вы используете графику черепах. Попробуйте посмотреть at this website и посмотрите, поможет ли это.

0

Следующая может делать то, что вы хотите, - это вопрос, который не был упомянут в предыдущем обсуждении является turtle.colormode(), который влияет хотите ли вы Int или плавать вход:

from turtle import Turtle, Screen 

def input_rgb(prompt=""): 
    triple = None 

    text = prompt + "Enter comma-separated RGB values: " 

    while True: 
     try: 
      triple_string = input(text).split(',', maxsplit=2) 

      if len(triple_string) != 3: 
       continue 

      if isinstance(screen.colormode(), float): 
       triple = map(float, triple_string) 
      else: 
       triple = map(int, triple_string) 

     except ValueError: 
      continue 

     break 

    return triple 

screen = Screen() 

yertle = Turtle(shape="turtle") 

yertle.fillcolor(input_rgb("Fill color? ")) 
yertle.pencolor(input_rgb("Outline color? ")) 

yertle.begin_fill() 
yertle.circle(100) 
yertle.end_fill() 

screen.exitonclick() 

ПРИМЕНЕНИЕ

% python3 test.py 
Fill color? Enter comma-separated RGB values: 1.0,0.0,0.0 
Outline color? Enter comma-separated RGB values: 0.0,0.0,1.0 

OUTPUT

enter image description here

Следующая задача (для вас), чтобы преобразовать input_rgb() использовать черепашью графические подпрограммы ввода вместо input():

turtle.textinput(title, prompt) 
turtle.numinput(title, prompt, default=None, minval=None, maxval=None) 
+0

Извините, @cdlane, но в моем коде появляется следующее сообщение об ошибке: –

+0

NameError: name 'screen' не определен –

+0

@ A.Kassam Я просто скопировал свой ответ с SO-страницы в файл и отлично работает под Python 3.6.0. Вы должны что-то выкинуть, перепроверять и повторить попытку. – cdlane

Смежные вопросы