错误…冰激凌机器代码有时不在“是”上创建…不是su

2024-04-26 20:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个小程序来制作冰淇淋。这真的很简单,但我看不出是什么在搅乱整个过程。我想这是因为我缺乏使用函数和调用函数的经验。在

基本上,它会随机创建一个冰激凌…但是我想在一个函数中调用一个函数,它不会出现。它应该在创造出冰淇淋的味道和勺后,随机产生一勺量的冰淇淋,具有创造冰淇淋的功能。在

基本上,它会产生“是”或“否”并打印出来。在

如果它随机选择“是”,它将继续制作冰淇淋及其变量。在

但是,我不确定我想要它列出它的顺序。所以将来,如果我更改代码,我想在函数appear\u icecream中决定它将首先调用什么…即函数create_icecream()或consumption()在显示它时先调用…我相信consumption()必须在create\u icecream()之后定义,但仍在学习。在

以下是我目前所写的:

import random
icecream_flavor = ["Chocolate","Vanilla","Strawberry"]
icecream_scoops = ["One","Two","Three","Four"]
icecream_made = ["yes","no"] 

def create_icecream():
    icecream_flavor_c = random.choice(icecream_flavor)
    icecream_scoops_c = random.choice(icecream_scoops)

    # Ice Cream Details: Printed
    print("Scoops:  ",icecream_scoops_c)
    print("Flavor:  ",icecream_flavor_c)

def consumption():
    if icecream_scoops == "One":
        icecream_spoonfuls = random.randint(0, 25)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif icecream_scoops == "Two":
        icecream_spoonfuls = random.randint(26, 50)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif icecream_scoops == "Three":
        icecream_spoonfuls = random.randint(51, 75)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif icecream_scoops == "Four":
        icecream_spoonfuls = random.randint(76, 100)
        print("Spoonfuls:   ",icecream_spoonfuls)
    else:
        return

def appear_icecream():
    icecream_appear = random.choice(icecream_made)
    # print(icecream_appear)
    if str(icecream_appear) == "yes":
        print("Yes")
        create_icecream()
        consumption()
    elif str(icecream_appear) == "no":
        print("No Ice Cream")
    else:
        print("BUG!")

print("Ice Cream No.1")
appear_icecream()
print("Ice Cream No.2")
appear_icecream()

运行示例:

^{pr2}$

显然,spoonfuls变量的数量没有出现。在


Tags: 函数createrandomprintrandintelifcreamice
3条回答

勺子的数量没有显示,因为您正在检查变量冰淇淋勺,而这些变量根本没有改变。 冰淇淋勺总是[“1”,“2”,“3”,“4”],所以你的代码永远不会工作:D

请参阅此处:

def create_icecream():
icecream_flavor_c = random.choice(icecream_flavor)
icecream_scoops_c = random.choice(icecream_scoops)

冰淇淋勺是一个存储随机选择,所以这是你要检查的变量。问题是,这是一个局部变量,所以只能在函数内部访问它。所以使用它的方法是让consumption()函数使用参数。你可以从内部调用create\u icecream()

像这样:

^{pr2}$

这样,当var scoops和conmsumtion()检查时,就可以将值从icecream_scoops_c传递给consumation()。另外,当来自appeact\u icecream()的结果为no时,您不会调用consumation(),因此您可以在那里赢得时间。在

希望我是清楚的,这有帮助!在

完整代码如下:

import random
icecream_flavor = ["Chocolate","Vanilla","Strawberry"]
icecream_scoops = ["One","Two","Three","Four"]
icecream_made = ["yes","no"]


def create_icecream():
    icecream_flavor_c = random.choice(icecream_flavor)
    icecream_scoops_c = random.choice(icecream_scoops)

    # Ice Cream Details: Printed
    print("Scoops:  ",icecream_scoops_c)
    print("Flavor:  ",icecream_flavor_c)
    consumption(icecream_scoops_c)  # call the function with the correct variable

def consumption(scoops):  # added scoops arg
    if scoops == "One":
        icecream_spoonfuls = random.randint(0, 25)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif scoops == "Two":
        icecream_spoonfuls = random.randint(26, 50)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif scoops == "Three":
        icecream_spoonfuls = random.randint(51, 75)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif scoops == "Four":
        icecream_spoonfuls = random.randint(76, 100)
        print("Spoonfuls:   ",icecream_spoonfuls)
    else:
        return


def appear_icecream():
    icecream_appear = random.choice(icecream_made)
    # print(icecream_appear)
    if str(icecream_appear) == "yes":
        print("Yes")
        create_icecream()
    elif str(icecream_appear) == "no":
        print("No Ice Cream")
    else:
        print("BUG!")

print("Ice Cream No.1")
appear_icecream()
print("Ice Cream No.2")
appear_icecream()

主要问题是icecream_scoopslist类型的变量,因此永远不会等于字符串"One""Two"

create_icecream()中,定义一个变量icecream_scoops_c来保存指示器的数量。不幸的是,icecream_scoops_c是一个局部变量,不能在create_icecream()之外访问。解决此问题的方法是return此值:

def create_icecream():
    # ...
    # ...
    return icecream_scoops_c

def consumption(num_scoops):
    if num_scoops == "One":
        # ...
    elif num_scoops == "Two":
        # ...
    # ...

然后在主代码中:

^{pr2}$

顺便说一句,保留ice_cream_scoops作为一个数字列表([1, 2, 3, 4]而不是{})可能更好。这样,在consumption()中,可以执行以下操作:

def consumption(num_scoops):
    spoonfuls = random.randint((num_scoops - 1) * 25 + 1, num_scoops * 25)
    print("Spoonfuls:\t", spoonfuls)

这比整个if...elif代码块要简单得多。在

这也可以通过生成一个全局变量icecream_scoops_c并对其进行测试来解决。 通过定义一个全局变量,我们可以确保所有函数都可以访问它们。 从函数返回值也很有用。在

在这里阅读全局变量的缺点-Are global variables bad?

此处显示代码。在

import random
icecream_flavor = ["Chocolate","Vanilla","Strawberry"]
icecream_scoops = ["One","Two","Three","Four"]
icecream_made = ["yes","no"]
icecream_scoops_c = None

def create_icecream():
    global icecream_scoops_c
    icecream_flavor_c = random.choice(icecream_flavor)
    icecream_scoops_c = random.choice(icecream_scoops)

    # Ice Cream Details: Printed
    print("Scoops:  ",icecream_scoops_c)
    print("Flavor:  ",icecream_flavor_c)

def consumption():
    global icecream_scoops_c
    if icecream_scoops_c == "One":
        icecream_spoonfuls = random.randint(0, 25)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif icecream_scoops_c == "Two":
        icecream_spoonfuls = random.randint(26, 50)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif icecream_scoops_c == "Three":
        icecream_spoonfuls = random.randint(51, 75)
        print("Spoonfuls:   ",icecream_spoonfuls)
    elif icecream_scoops_c == "Four":
        icecream_spoonfuls = random.randint(76, 100)
        print("Spoonfuls:   ",icecream_spoonfuls)
    else:
        return

def appear_icecream():
    icecream_appear = random.choice(icecream_made)
    # print(icecream_appear)
    if str(icecream_appear) == "yes":
        print("Yes")
        create_icecream()
        consumption()
    elif str(icecream_appear) == "no":
        print("No Ice Cream")
    else:
        print("BUG!")

print("Ice Cream No.1")
appear_icecream()
print("Ice Cream No.2")
appear_icecream()

相关问题 更多 >