0
import time
import random
inventory = [""]
gold = 0
rawfish = ["Mackarel", "Cod", "Salmon", "Herring", "Tuna"]
trash = ["Old Shoe", "Plastic Bag", "Rusted Empty Box", "Plank Fragment"]
special = ["Copper Ring"]
mackarel_range = range(1,3)
cod_range = range(3,5)
salmon_range = range(5,7)
herring_range = range(7,9)
tuna_range = range(9,11)
oldshoe_range = range(11,16)
plasticbag_range = range(16,21)
rustedemptybox_range = range(21,26)
plankfragment_range = range(26,31)
copperring_range = range(31,32)

print "~~~~WELCOME TO FISHING~~~~"
time.sleep(2)
print "Loading Version 0.4 ..."
time.sleep(2)
print "In this current version the last item in your inventory is sold."

def sell_function():
    if inventory[0] in rawfish:
        sold = inventory.pop(0)
        gold += 5
        print "You have sold a", sold, "for 5 gold coins!"
    action_function()
    if inventory[0] in trash:
        sold = inventory.pop(0)
        gold += 1
        print "You have recycled a", sold, "for 1 gold coins!"
    action_function()
    if inventory[0] in special:
        sold = inventory.pop(0)
        gold += 10
        print "You have sold a", sold, "for 10 gold coins!"
    action_function()

def fish_function():
    if random.randrange == mackarel_range:
        inventory.append("Mackarel")
        print "You have reeled in a Mackarel!"
    action_function()
    if random.randrange == cod_range:
        inventory.append("Cod")
        print "You have reeled in a Cod!"
    action_function()
    if random.randrange == salmon_range:
        inventory.append("Salmon")
        print "You have reeled in a Salmon!"
    action_function()
    if random.randrange == herring_range:
        inventory.append("Herring")
        print "You have reeled in a Herring!"
    action_function()
    if random.randrange == tuna_range:
        inventory.append("Tuna")
        print "You have reeled in a Tuna!"
    action_function()
    if random.randrange == oldshoe_range:
        inventory.append("Old Shoe")
        print "You have reeled in an Old Shoe..."
    action_function()
    if random.randrange == plasticbag_range:
        inventory.append("Plastic Bag")
        print "You have reeled in a Plastic Bag..."
    action_function()
    if random.randrange == rustedemptybox_range:
        inventory.append("Rusted Empty Box")
        print "You have reeled in a Rusted Empty Box..."
    action_function()
    if random.randrange == plankfragment_range:
        inventory.append("Plank Fragment")
        print "You have reeled in a Plank Fragment..."
    action_function()
    if random.randrange == copperring_range:
        inventory.append("special1")
        print "You find a slightly dirty Copper Ring, after clearing the dirt it appears quite nice."
    action_function()

def action_function():
    chance = random.randrange(1,31)
    action = raw_input("Do you want to .sell or .fish?")
    if action == "sell":
        sell_function()
    if action == "fish":
        fish_function()
    if action == "inventory":
        print inventory
    action_function()

action_function()

我已经在这个游戏上寻求过帮助,我仍在尝试一点一点地制作。因此,当我运行程序时,它似乎到达了action = raw_input("Do you want to .sell or .fish?")打印提示的部分,但是当我键入 fish 或 sell 时,它再次打印提示。:s 在我看来,它只是回到函数的开头并重新启动它。请帮忙。

4

1 回答 1

2

你的问题出在if random.randrange == some_range支票上。实际上,您的代码有几个问题:

首先,您需要实际调用randrange函数,并且它至少需要一个参数:stop范围的值(默认从 0 开始)。有关详细信息,请参阅randrange 文档

其次,randrange()返回一个数字,但您将其结果与列表进行比较。这将始终False: 在 Python 中,3并且[3]不是相同的值。我怀疑您想要的是检查您的随机值是否包含在列表中。一种方法是if random_value in some_range,因为in运算符搜索列表以查看它是否包含您传入的值。但这在非常大的范围内会很慢;更好的方法是停止使用范围并开始使用数字标记范围的开始和结束,然后执行if range_start <= random_value < range_end. <=注意我一开始是如何使用的<在末尾; 这样您就可以将您的范围写为“从 0 到 2、从 2 到 5、从 5 到 11”(或其他),并且每个可能的整数都属于一个且仅属于一个范围。

最后,每次调用random.randrange()时,都会得到不同的随机结果,因此您的代码完全有可能“钓起”多个项目,或者根本没有。相反,您可能想要这样做:

random_value = random.randrange()
if mackerel_start <= random_value < mackerel_end:
    print "Mackerel"
elif cod_start <= random_value < cod_end:
    print "Cod"
    # Etc.
else:
    print "Nothing"

这应该可以解决您在使用钓鱼代码时遇到的问题。至于您的销售代码,它看起来应该可以工作;它什么都不做的原因是因为你的钓鱼代码从来没有在inventory列表中添加任何东西,所以没有什么可卖的。

编辑:还有一件事。别到处打电话action_function()了;有一个更好的方法来做到这一点。不要使用一长串的if语句,而是使用一个if ... elif ... elif ... else链来确保其中一个(并且只有一个)可以工作。然后让函数在最后返回。在里面action_function(),使用一个while循环:

def action_function():
    while True:
        action = raw_input("Do you want to 'sell' or 'fish' or 'inventory' or 'quit'?")
        if action == "quit":
            break  # This ends the while loop
        if action == "sell":
            sell_function()
        if action == "fish":
            fish_function()
        if action == "inventory":
            print inventory

这将让你继续运行action_function()一遍又一遍,直到用户选择退出,然后它会结束程序。比必须点击Ctrl-C退出要优雅得多。

顺便说一句,我强烈建议尽快阅读如何像计算机科学家一样思考,并完成那本书中的练习。一旦你读完这本书,你的编程技能就会大大提高。最重要的是,这是你现在能做的最好的事情。

于 2013-07-06T15:24:00.550 回答