学习Python的艰难之路第35个练习的帮助
问题:为什么代码中的函数没有以def开头?
原因:在给出的代码中,函数gold_room()没有以def开头。可能是在复制代码时出现了错误。
解决方法:将函数gold_room()以def开头,并缩进函数内的代码。
修改后的代码如下:
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("You're not greedy. Good job!") exit(0)
这样修改后的代码可以正常运行,并且只有少量的代码,更加简洁有效。
在这个问题中,原因是在学习Python教程的过程中,作者只介绍了一些基本的知识点,如解析参数、读取用户输入、使用if/loop/while循环、函数、打印以及列表及其特定函数的使用。但是在这个练习中,我们不能使用像捕获错误和使用"isdigit()"这样的魔术函数。
通过在另一个示例中尝试,我发现在字符串上使用"sorted"函数会分离所有的字符,我将在这里使用这个函数。
我考虑了一下,我对数字的定义是"只包含0到9之间字符的字符串"。这足够满足练习的需求。
所以我的方法是删除输入中的所有数字,并检查是否最终为空。如果是这种情况,它就是一个整数,否则如果还有剩余字符,则不是。
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
在上面的代码中,我定义了一个名为"remove_all_occurences"的函数,它用于删除列表中的所有特定元素。然后,我定义了一个名为"is_int"的函数,它使用"remove_all_occurences"函数从输入中删除所有的数字,并检查最终列表是否为空来确定输入是否是整数。
通过这种方法,我能够解决这个问题,并检查输入是否是整数。
在gold_room
函数中,通过if '0' in next or '1' in next
判断输入的值是否包含数字0或1,如果是则转换为整数类型,否则调用dead
函数并输出提示信息。这种方式只检查了是否包含0或1,并没有考虑其他数字的情况,因此当输入为2时会出错。
为了解决这个问题,可以使用try
和except
来捕获输入转换为整数类型时的异常。具体做法是,通过raw_input
获取用户输入的值,然后尝试将其转换为整数类型,如果转换成功则继续执行后续操作,如果转换失败则调用dead
函数并输出提示信息。
另外,还可以通过isdigit()
方法来判断输入的值是否只包含数字。具体做法是,先调用isdigit()
判断输入的值是否只包含数字,如果是则将其转换为整数类型,否则不进行转换。
可以通过使用try
和except
捕获异常或者使用isdigit()
方法来判断输入是否只包含数字,从而解决这个问题。避免使用异常处理可能会导致一些重要和基础的问题,因此不推荐这种做法。