学习python艰苦的运动35帮助

时间:2011-03-14 15:12:43

标签: python

由于某种原因,当游戏到达黄金房间时,它无法正常工作。当我输入任何数字时,我会得到死亡信息'男人,学会输入数字'

感谢

from sys import exit

def gold_room():
    print 'this room is full of gold, how much do you take?'

    next = raw_input('> ')
    if '0' in next or '1' in next:
        how_much = int(next)
    else:
        dead('man, learn how to type a number')


    if how_much < 50:
        print 'nice! your not too greedy. you win!'
        exit(0)
    else:
        dead('you greedy bastard!')


def bear_room():
    print 'there is a bear here.'
    print 'the bear has a bunch of honey'
    print 'the fat bear is in fromt of another door'
    print 'how are you going to move the bear?'
    bear_moved = False


    while True:
        next = raw_input('> ')

        if next == 'take honey':
            dead('the bear looks at you then pimp slaps you in the face')
        elif next == 'taunt bear' and not bear_moved:
            print 'the bear has moved from the door now. you can go through.'
            bear_moved = True
        elif next == 'taunt bear' and bear_moved:
            dead('the bear gets pissed off and chews your crotch off')
        elif next == 'open door' and bear_moved:
            gold_room()
        else:
            print 'i have no idea what that means.'


def bolofumps_room():
    print 'here you see the great evil bolofump'
    print 'he, it whatever stares at you and you go insane'
    print 'do you flee for your life or eat your head?'

    next = raw_input('> ')
    if 'flee' in next:
        start()
    elif 'head' in next:
        dead('well, that was tasty!')
    else:
        bolofumps_room()

def dead(why):
    print why, 'good job!'
    exit(0)


def start():
    print 'you are in a dark room'
    print 'there is a door to your left and right'
    print 'which one do you take?'

    next = raw_input('> ')

    if next == 'left':
        bear_room()
    elif next == 'right':
        bolofumps_room()
    else:
        dead('you stumble around the room until you starve to death')


start()
编辑:键入一个有效,但2不

8 个答案:

答案 0 :(得分:8)

您可以在gold_room中执行此操作:

next = raw_input('> ')
if '0' in next or '1' in next:
    how_much = int(next)
else:
    dead('man, learn how to type a number')

它仅检查'0' in next or '1' in next,所以'2'不起作用并不奇怪,对吗?

你想要的是这些

next = raw_input('> ')
try:
    how_much = int(next)
except ValueError:
    dead('man, learn how to type a number')

也可以毫无例外地执行此操作,但请记住,避免像异常一样重要且基本的东西是一个非常糟糕的主意。我希望这本书至少能在以后清楚地表明这一点。

无论如何,我们知道int只接受数字,所以我们只是检查一下:

if next.isdigit():
    how_much = int(next)

答案 1 :(得分:1)

如果你考虑在本教程中你应该知道的内容,包括

  • 解析参数
  • 读取用户输入
  • 使用if / loop / while,
  • 功能
  • print
  • 列表及其特定功能

你不能使用像捕获错误和/或使用“isdigit()”这样的神奇功能。

通过尝试另一个例子,我发现在字符串上使用“sorted”,将所有字符分开,我将在这里使用它。

我想到的是,我对数字的定义将是“只包含0到9字符的字符串”。这足以满足锻炼的需要。

所以我的方法是从输入中删除所有数字并检查它是否为空。如果是这种情况,则为int,否则如果剩余字符,则不是。

def remove_all_occurences(char_list, item):
    value = "%d" % item  # convert to string
    while char_list.count(value) != 0:
        char_list.remove(value)
    return char_list


def is_int(input):
    """Personnal function to test if something is an int"""
    # The sort separates all the characters of the list
    characters_list = sorted(input)

    for num in range(0,10):
        characters_list = remove_all_occurences(characters_list, num)
    return len(characters_list) == 0

答案 2 :(得分:1)

我可能会丢失一些东西,但这就是我改变的方式。更少的代码并且运行良好。

Def gold_room():
       Print("This room is full of gold. How much do you take?")

       choice = input('  ')
       next = int(choice)
       If next > 50:
            dead("Man, learn to type a number.")
       else:
             print("your not greedy. Good job!")
             exit(0)

答案 3 :(得分:0)

next是一个内置的Python函数,因此您可能希望避免在其后命名变量...可能不是您的问题的原因,但尝试更改该变量的名称。

答案 4 :(得分:0)

我的数字额外信用的解决方案检查输入的字符是像cladmi这样的整数,但是通过每个字符来查看它是否是一个整数(通过一个可能过于钝的布尔运算 - 检查它是否在'123456789'中更简单,将布尔值记录在列表中,然后使用and运算符转到此列表,返回True如果所有人物都在。我对这一切都不熟悉。我认为这是相当新颖的,只使用我们迄今为止所学到的东西,并且对于那些坚持尼尔问题的人来说可能会有所帮助:

def is_integer(input):
    bool_list = [] # to hold the b
    truth = True 
    for i in input: 
        # tests if i is an integer, records the boolean in bool_list
        bool_list.append(i in str(range(0, 10)) and i != " " and i != ",")
    for t in bool_list: 
        truth = truth and t # 'adds' each boolean in bool_list 
    return truth # True if all are integers, False if not.

答案 5 :(得分:0)

我个人在gold_room函数中这样做了。这将有助于您放置的任何范围。我希望这不是过期的。

elements = [] for i in range(0,61):       elements.append(ⅰ) next = int(raw_input(“&gt;”)) 如果元素中的下一个:       how_much = int(下一个) 否则:

答案 6 :(得分:0)

我浪费了几天真的在想如何解决这个问题以获得额外的功劳。我读了两个可以解决这个问题的不同的东西:exception和isdigit。起初,我决定弄清楚如何在不学习任何新东西的情况下解决这个问题,并且只使用我们在书中那一点所涵盖的内容以及我可以从pydoc中挤出关于int的信息。我提出了一个解决方案,涉及一个巨大的复杂的列表,循环,布尔的东西和等等等等等,它最终变得像60行长,并且是一个绝对令人头痛的问题。我心想,如果他看着这个代码并将它与我最终得到的结果进行比较,那么Zed会对这段代码说些什么。我认为这里的一些人,也许我包括我自己,能够想出解决这个问题的复杂,创造性和创造性的方法,这很好,因为解决问题显然是我们必备的技能但是,这一大堆代码与我现在相信的是他所获得的代码是一件毫无疑问的事情。你是否认为他打算浪费大量时间写一些丑陋而难以理解的东西?或者,基于我们听到他说过的内容,您是否认为他只是想通过3或4行非常简单易读的代码以一种干净整洁的方式完成它?我最后对此感到满意:

def gold_room():
    print "This room is full of gold! How much do you take?"
    try:
        next = float(raw_input(">"))
    except ValueError:
        dead("Man, learn to type a number.")
    if (next) < 50:
        print "Nice, you're not greedy, you win!"
        exit(0)
    elif(next) >= 50:
        dead("You greedy bastard!")

任何东西都可以使用它并没有搞砸。只要自己学习新东西。

答案 7 :(得分:0)

我也使用了try和except语句,但我认为你不需要括号(下一步)。您也可以使用else而不是elif来保持代码清洁。

def gold_room():
print "This room is full of gold! How much do you take?"
try:
    next = float(raw_input(">"))
except ValueError:
    dead("Man, learn to type a number.")
if next < 50:
    print "Nice, you're not greedy, you win!"
    exit(0)
else:
    dead("You greedy bastard!")