2014-02-07 3 views
1

Привет, я чрезвычайно новичок в программировании, так что несите меня. Я пытаюсь написать программу, которая запрашивает у вас цвет из трех вариантов, а затем генерирует собственный случайный цвет и сообщает вам, выиграете или проиграете, если ваш цвет соответствует сгенерированному цвету. Я не могу прикрыть свой синтаксис, и я продолжаю получать ошибки, с которыми я не знаком. Это моя программа.Переменные в пределах функций

import random 


def ranred(): 
    global color 
    color = 1 
    global color_out 
    color_out = "purple" 
    f_color(color, color_in, color_out) 
    return color, colorq 


def ranblack(): 
    global color 
    color = 2 
    global color_out 
    color_out = "black" 
    f_color(color, color_in, color_out) 


def ranpurple(): 
    global color 
    color = 3 
    global color_out 
    color_out = "purple" 
    f_color(color, color_in, color_out) 


def f_color(color, color_in, color_out): 
    print (color_out) 
    if color == color_in: 
     print ("win") 
    else: 
     print ("lose") 


def main(): 
    color_in = input("Purple, Black or Red? ") 
    Purple = 1 
    purple = 1 
    Black = 2 
    black = 2 
    Red = 3 
    red = 3 
    randomcolor1 = random.randrange(0, 2) 
    randomcolor2 = random.randrange(0, 2) 
    if randomcolor1 == 1 and randomcolor2 == 1: 
     ranred() 
    if randomcolor1 == 2 and randomcolor2 == 2: 
     ranblack() 
    if randomcolor1 == 2 and randomcolor2 == 1: 
     ranpurple() 
    if randomcolor1 == 1 and randomcolor2 == 2: 
     ranpurple() 

main() 
+4

ошибки, такие как ....? – mhlester

+0

В настоящее время «аргумент дублирования« цвет »в определении функции« – user3285386

+0

Хорошо, спасибо! Я исправил эту проблему, которая была простой опечаткой, когда я иду запускать новый код. Он запрашивает мой входной вопрос, а затем просто ничего не выводит. Есть рекомендации? – user3285386

ответ

1
import random 

def computer_color(colors): 
    return random.choice(colors) 

def player_color(colors): 
    while True: 
     color = input('Purple, black, or red? ').strip().lower() 
     if color in colors: 
      return color 

def main(): 
    colors = ['purple', 'black', 'red'] 
    pc = player_color(colors) 
    cc = computer_color(colors) 

    if pc == cc: 
     print('Win!') 
    else: 
     print('Lose.') 

if __name__=="__main__": 
    main() 

.

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

  2. В любом случае, глобальные переменные обычно представляют собой плохую идею; они затрудняют отслеживание того, что происходит в программе, и приводят к затрудненным диагностике ошибок. Гораздо лучше передавать аргументы и явно возвращать результаты.

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

  4. По соглашению переменные должны быть названы во всех строчных строках; начиная с большой буквы, зарезервировано для занятий.

1

Когда вы передаете параметры в функцию, они должны иметь уникальные имена.

def f_color(color,color,color_out) 

Посмотрите, как у вас есть две вещи, называемые цветом? Как Python знает, какое значение имеет имя? Этого просто не может быть. Так назовите это что-то вроде color и color2 или что-нибудь более наглядное. Или выньте второй аргумент color, так как он не похож на вас.

Затем вы должны вызвать функцию надлежащим образом, а также, чтобы вы, когда вы ее называете, вы передаете только один аргумент цвета:

f_color(color,color_out) 
2

Из ошибки вы объяснили:

def f_color(color,color,color_out): 

Принимает два аргументы color. Вы можете иметь только один аргумент с именем color:

def f_color(color, color_out): 
Смежные вопросы