在需要时不会循环或运行第二个函数

时间:2014-07-21 14:00:40

标签: python

我是一个初学者,他正在学习用Python编程,而且我遇到了这个问题。我试着寻找答案,但我真的不知道该搜索什么。

为什么我的功能会继续执行'否则'即使我在被问到时输入的数字低于150?相反,它应该运行一个名为' wish_second()'的第二个函数,但由于某种原因它会忽略它。

最初我的计划是让第一个功能激活其他'否则'只有在写一个大数字时才会这样做,但是现在它似乎继续用小数字来做,甚至在编写像#as;'之类的东西时,它应该继续要求有效的数字。

def wish_first():

    print "You decide that you will first wish for gold coins. "
    print "How many coins will you wish for? "

    while True:

        next = raw_input("> ")

        try:
            how_much = int(next)

        except ValueError:
            print "Learn to write a number!"

        if next < 150:
            print "You fill your pockets and think of a second wish. "
            wish_second()

        else:
            dead("A bunch of coins fall on your head and you die.")

def wish_second():

    print "You can't decide what you want to wish for. "
    print "You're debating wheter to get home or wish for a unicorn. "

3 个答案:

答案 0 :(得分:2)

您正在转换为int,但从不使用该变量

how_much = int(next)

但您的比较是针对字符串的 - if next < 150:

将您的比较更改为使用how_much。您也可以执行此操作:next = int(raw_input("> "))

答案 1 :(得分:0)

您需要将输入值转换为int

next = int(raw_input("> "))

否则,您要将string与此处的int进行比较

if next < 150:

正如@davidism指出的那样,您也可以使用变量how_much,因为您已将其转换为int

how_much = int(next)

所以你可以说

if how_much < 150:

答案 2 :(得分:0)

输入无效字符串(例如'asd')后,它不会继续询问数字,因为except块中没有任何内容可以使其跳过其余代码并返回到开头while True循环。因此,它正确输入except中的代码,打印出错误消息,然后继续进行下一行比较。

解决这个问题的一种方法是在try块中添加其余代码,以便仅在输入为数字时执行。例如(注意,我也改变了比较,如其他答案中所述):

def wish_first():

    print "You decide that you will first wish for gold coins. "
    print "How many coins will you wish for? "

    while True:

        next = raw_input("> ")

        try:
            how_much = int(next)

            if how_much < 150:
                print "You fill your pockets and think of a second wish. "
                wish_second()

            else:
                dead("A bunch of coins fall on your head and you die.")

        except ValueError:
            print "Learn to write a number!"