2014-06-05 5 views
0

Программа Я пишу ниже, имеет требования следовать:Python всегда получать тот же результат

# Design a program that prompts the user to enter the names of two primary colors 
# to mix. If the user enters anything other than red, blue or yellow, the 
# program should display an error message. Otherwise the program should display 
# the name of the secondary color that results. 

Это код, который я написал - на основании программы Java я писал ранее, и, очевидно, был далеко для Python .:

print('You will be mixing two primary colors to get a resulting color.') 
print('Primary colors are blue, red and yellow \n') 

red = False 
blue = False 
yellow = False 

color1 = bool(input('Enter your first primary color: \n')) 
color2 = bool(input('Enter your second primary color: \n')) 

if color1 == red and color2 == blue: 
     print('That makes purple!') 

elif color1 == blue and color2 == red: 
     print('That makes purple!') 

elif color1 == yellow and color2 == red: 
    print('That makes orange!') 

elif color1 == red and color2 == yellow: 
    print('That makes orange!') 

elif color1 == blue and color2 == yellow: 
    print('That makes green!') 

elif color1 == yellow and color2 == blue: 
    print('That makes green!') 

else: 
    print('You did not enter a primary color!') 

Независимо от того, какую комбинацию цветов я ввожу, я получаю результат «Это делает фиолетовый!». Где я ошибся с логикой этой программы? Кроме того, когда я не входят зеленый в качестве основного цвета, я получаю это:

Traceback (most recent call last): 
File "color.py", line 19, in <module> 
color1 = bool(input('Enter your first primary color: \n')) 
File "<string>", line 1, in <module> 
NameError: name 'green' is not defined 

вместо сообщения об ошибке «Вы не ввели основной цвет!»

Куда я иду не так?

EDIT: Это мой новый код, и он работает иначе, чем ошибка.

print('You will be mixing two primary colors to get a resulting color.') 
print('Primary colors are blue, red and yellow \n') 

red = 1 
blue = 2 
yellow = 3 

color1 = input('Enter your first primary color: \n') 
color2 = input('Enter your second primary color: \n') 

if color1 == 1 and color2 == 2: 
    print('That makes purple!') 

elif color1 == 2 and color2 == 1: 
    print('That makes purple!') 

elif color1 == 3 and color2 == 1: 
print('That makes orange!') 

elif color1 == 1 and color2 == 3: 
print('That makes orange!') 

elif color1 == 2 and color2 == 3: 
print('That makes green!') 

elif color1 == 3 and color2 == 2: 
print('That makes green!') 

else: 
print('You did not enter a primary color!') 
+3

Вы находитесь в python 3, да? Что вы ожидаете получить от 'bool ('red')'? Вы всегда будете получать 'True', потому что строка не пуста. –

+1

Да, эта логика не имеет смысла. 'red',' blue' и 'yellow' установлены на одно значение,' False', но вы ожидаете, что в ваших условиях 'if' будет разница? Попробуйте написать псевдокод, а затем преобразуйте его в python. – clcto

ответ

0

Вы должны сравнивать color1 и color2 в строки не булевы:

color1 = input('Enter your first primary color: \n') 
color2 = input('Enter your second primary color: \n') 
if color1 == "red" and color2 == "blue": 
    print("That makes purple!") 
2

Ваша беда существует в этих строках:

color1 = bool(input('Enter your first primary color: \n')) 
color2 = bool(input('Enter your second primary color: \n')) 

Когда вы сделаете это, любое непустое значение, введенное приведет True. только путь, который вы могли бы получить False, должен был нажать return в командной строке и отправить пустую строку. Ваша логика в том, как вы хотите обрабатывать то, что вводит пользователь, немного испорчена. Вы можете:

if color1 == 'red' 

После удаления лишнего вызова bool, но это всего лишь предположение.

1
color1 = bool(input('Enter your first primary color: \n')) 

Если упростить это, мы получаем

color1 = bool("red") #color1 becomes True 

Так что теперь ваши сравнения оценки делает False равной True - полностью игнорируя цвета вы введённые.

Попробуйте что-то вроде

RED = 'red' 
BLUE = 'blue' 

color1 = input('Enter your first primary color: \n').lower() 
color2 = input('Enter your second primary color: \n').lower() 

if color1 == RED and color2 == BLUE: 
    print('That makes purple!') 
1

У вас есть какие-то большие проблемы с кодом. Сначала вы вызываете bool(input()). Пока вы указываете , введите, color1 и/или color2 настроены на значение True.

Таким образом, вы звоните if True == False ... Ваш код ничего не делает, чтобы проверить фактические названия цветов. Вместо этого я предлагаю использовать простой input(), чтобы взять строку `.

Вот ваш отредактированный код:

print('You will be mixing two primary colors to get a resulting color.') 
print('Primary colors are blue, red and yellow \n') 

color1 = input('Enter your first primary color: \n') 
color2 = input('Enter your second primary color: \n') 

if color1 == 'red' and color2 == 'blue': 
     print('That makes purple!') 

elif color1 == 'blue' and color2 == 'red': 
     print('That makes purple!') 

elif color1 == 'yellow' and color2 == 'red': 
    print('That makes orange!') 

elif color1 == 'red' and color2 == 'yellow': 
    print('That makes orange!') 

elif color1 == 'blue' and color2 == 'yellow': 
    print('That makes green!') 

elif color1 == 'yellow' and color2 == 'blue': 
    print('That makes green!') 

else: 
    print('You did not enter a primary color!') 
0

Проблема, кажется, лежит в этих строках

red = False 
blue = False 
yellow = False 

color1 = bool(input('Enter your first primary color: \n')) 
color2 = bool(input('Enter your second primary color: \n')) 

, когда вы вводите цвет он просто быть установлен в ложь, независимо от того, какого цвета его является. к компьютеру это происходит (я буду использовать красный и желтый в качестве примеров)

color1 = bool(red) 

поскольку вы определили ранее как красный Ложные:

color1 = bool(False) 
color1 = False 

Аналогично

color2 = bool(yellow) 

желтый также определяется как False

color2 = bool(False) 
color2 = False 

Так что, когда мы получаем ваш первый, если заявление

if color1 == red and color2 == blue: 

компьютер видит

if False==False and False == False: 

который оценивает Истинных

if True and True: 
if True: 

Часть вашей проблемы может быть, вытекающие из использования вами ввода(). Для python2.x (который, как я полагаю, вы используете) input() оценивает все, что вводится. Например:

input("Enter Something") 
>>>3 
input("Enter Something Else") 
>>>3.1 

вернет целочисленное значение 3 и значение поплавка 3.1 соответственно. Компьютер смотрит на то, что вы вводите, и старается изо всех сил дать вам часть данных, которая имеет смысл. В твоем случае.

yellow = False 

color1 = bool(input('Enter your first primary color: \n')) 

>>>yellow 

компьютер ищет пространство имен программы для значения выражения yellow, которое в этой программе является False.

Это может помочь вам использовать raw_input(), который не оценивает введенное значение и просто возвращает строковое значение того, что набирается. Например:

input() 
>>>yellow 

будет вычисляться Ложные но

raw_input() 
>>>yellow 

будет вычисляться значения строки «желтый»

Попробуйте определения ваших цветовых констант в виде строк, а не BOOLS и обработки ввода в качестве строка также. так

yellow = "yellow" 

, а не

yellow = False 
0

Я не использовать переменные для цветов ... Я просто испытания, если переменная была == «цвет»

мой код был. ..

color1=input('Enter primary color:') 
color2=input('Enter primary color:') 


if color1=='red' and color2=='blue': 
    print("When you mix red and blue, you get purple.") 
elif color1=='red' and color2=='yellow': 
    print("When you mix red and yellow, you get orange.") 
elif color1=='blue' and color2=='red': 
    print("When you mix blue and red, you get purple.") 
elif color1=='blue' and color2=='yellow': 
    print("When you mix blue and yellow, you get green.") 
elif color1=='yellow' and color2=='red': 
    print("When you mix yellow and red, you get orange.") 
elif color1=='yellow' and color2=='blue': 
    print("When you mix yellow and blue, you get green.") 
else: 
    print("You didn't input two primary colors.") 
Смежные вопросы