Я пытаюсь сделать кубик функции случайным образом откат от 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!"
Вероятно, вы хотите, чтобы 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!")
Я изменил имена переменных и имена функций на то, что, по моему мнению, является лучшим представлением о том, что они собой представляют.
Когда вы пишете 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
. Как и в примере в верхней части этого ответа.
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!")
name = …
, когда name
является строкой 'one'
, создаст новую переменную с именем one
. Трудно объяснить, почему это не так, но это то, что нужно объяснить здесь.
09
, а ответ - 9, следует ли ему действительно сказать, что он угадал?