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

1

Я пытаюсь сделать кубик функции случайным образом откат от 1-6. Но когда я пытаюсь добавить разные числа из функции, он говорит, что один и два не определены. Я не уверен, как это решить, и я довольно новичок в кодировании.

import random
    def dice(name):
        name = random.randint(1,6)
        print name
    dice('one')
    dice('two')
    dicesum = float(one) + float(two)
    message = raw_input('guess the number. ')
    if dicesum == message:
        print "You guess right! You win!"
    if dicesum != message:
        print "You guess wrong! You lose!"
Теги:
python-2.7

3 ответа

3
Лучший ответ

Вероятно, вы хотите, чтобы one и two представляли значения, возвращаемые броском кости:

import random


def roll_dice():
    value = random.randint(1, 6)
    print(value)
    return value


roll_one = roll_dice()
roll_two = roll_dice()
dice_sum = roll_one + roll_two
guess = int(input('guess the number. '))  # cast to int so it can be compared to dice_sum
if dice_sum == guess:
    print("You guess right! You win!")
else:
    print("You guess wrong! You lose!")

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

  • 0
    Преобразование числа в строку вместо преобразования строки в число кажется неуклюжим. Если пользователь вводит 09 , а ответ - 9, следует ли ему действительно сказать, что он угадал?
  • 0
    Да, я согласен. Я обсуждал, хочу ли я изменить это или нет - я буду, спасибо!
2

Когда вы пишете name = random.randint(1, 6), который не смотрит на текущее значение name а затем создает новую переменную с именем независимо от того, что это такое; он просто переназначает name переменной.

И даже если бы он создал новую переменную, это была бы локальная переменная, непригодная для использования вне функции.

То, что вы действительно хотите сделать здесь, не принимает параметр вообще:

def dice():
    return random.randint(1,6)

one = dice()
two = dice()
dicesum = float(one) + float(two)

В качестве побочного примечания вам действительно не нужно, чтобы float там. Цифры - это уже ints, и все, что вы делаете с ними, это их добавление и сравнение со строкой. Вы не хотите, чтобы пользователь должен был угадать 7.0 (или, что еще хуже, 7.0000000000000000001), вы хотите, чтобы они угадали 7, не так ли? Поэтому просто используйте int.

Между тем, вам нужно преобразовать пользовательский ввод в число. raw_input просто возвращает строку. и строка '7' не равна числу 7 (будь то int или float). Так:

one = dice()
two = dice()
dicesum = one + two
message = int(raw_input('guess the number. '))

Если вы действительно хотите создать новую глобальную переменную внутри функции, это возможно. Но это почти всегда очень плохая идея. Чтобы динамически создавать новую глобальную переменную, вы должны использовать функцию globals чтобы получить глобальное пространство имен как dict, а затем работать над этим dict. Как это:

def dice(name):
    value = random.randint(1,6)
    globals()[name] = value

Но, опять же, это почти всегда очень плохая идея. Создание глобальных переменных изнутри функции уже является очень интересной задачей. И веские причины для создания переменных по имени динамически еще реже. В конце концов, вы не будете обращаться к переменной как к globals()['one'], но как к one, поэтому вы почти наверняка хотите создать переменную не как globals()['one'], а как one. Как и в примере в верхней части этого ответа.

  • 0
    проголосовал за страсть к преподаванию! ;)
0

dicesum = float(one) + float(two) должно приводить к ошибке, так как у вас нет переменных, называемых one, two. У вас есть dice('one'),dice('two').

Если вы присвойте результаты переменным one, two = dice('one'),dice('two'), которые разрешат это. Однако функция вашего dice не возвращает значение, поэтому требуется исправление.

Последнее, if dicesum == message: никогда не будет True поскольку message является str а dicesum - float. Исправить, отправив message в поплавок

import random
def dice(name):
    name = random.randint(1,6)
    print (name)
    return name # return value!

one = dice('one') # assign variables!!
two = dice('two') # assign variables!!
dicesum = float(one) + float(two)
message = float(raw_input('guess the number. ')) # cast!
if dicesum == message:
    print ("You guess right! You win!")
if dicesum != message: # this line can be shortened into "else:"
    print ("You guess wrong! You lose!")
  • 1
    Я думаю, что вы пропустите ОП, сбивает с толку. Он надеялся, что name = … , когда name является строкой 'one' , создаст новую переменную с именем one . Трудно объяснить, почему это не так, но это то, что нужно объяснить здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню