如何在函数中定义参数。

时间:2018-06-19 03:50:33

标签: python python-2.7

我正在尝试使功能骰子从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!"

3 个答案:

答案 0 :(得分:3)

您可能希望onetwo代表骰子卷返回的值:

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!")

我将变量名称和函数名称更改为我认为可以更好地表示它们是什么和做什么。

答案 1 :(得分: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那里。这些数字已经是整数,你所做的就是添加它们并与字符串进行比较。您不希望用户猜测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

但是,再次,这几乎总是一个非常糟糕的主意。从函数中创建全局变量已经是一个可疑的事情。以动态名称创建变量的充分理由甚至更为罕见。毕竟,您不会以[{1}}的形式访问变量,而是globals()['one'],因此您几乎肯定希望创建的变量不是one,而是globals()['one'] 1}}。如本答案顶部的示例所示。

答案 2 :(得分:0)

dicesum = float(one) + float(two)会导致错误,因为您没有名为one, two的变量。你所拥有的是dice('one'),dice('two')

如果您将结果分配到可以解决此问题的变量one, two = dice('one'),dice('two')中。但是,您的dice函数不会返回值,因此也需要修复。

最后一件事,if dicesum == message:永远不会是True,因为messagestrdicesumfloat。通过将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!")