filter()函数问题

来源:3-2 项目作业

火火火火火火火火火

2020-01-16 22:43:29

import sys
import random
from datetime import datetime


    #提示玩家进入游戏,并输出如效果图标题所示信息
def guide_page(guide_wold):
    print("{}{}{}".format("*"*30, guide_wold, "*"*30))


    #自定义数字类型判断
def all_num(n):
    return n.isdigit()


    #自定义数值合法性判断
def num_legal(ls):
    ls1 = list(ls)
    if ls1[0] == ls1[1]:
        print("你输入的区间值相同!!请重新启动程序")
        sys.exit()
    elif ls1[0] > ls1[1]:
        print("你输入的数字区间大小有误,请重新启动程序")
        sys.exit()
    else:
        print("所产生的随机数字区间为:", ls)
        return 1

    #自定义产生指定区间随机数
def set_final_num(num1, num2):
    num3 = [num1, num2]
    if all_num(num1) and all_num(num2) == True:
        num_legal(num3)
        return random.randint(int(num1), int(num2))
    else:
        print("您输入的为非数字字符,请重新启动")
        sys.exit()


def check_num_legal(num):
    if num not in range(int(i),int(j)+1):
        return True


def write_record(times,value):
    with (open("record.txt", "a", encoding="utf_8")) as f:
        f.write("{}: 第{}次猜测的数字是:{}".format(datetime.now(), times, value))
        f.write("\n")


def main(rand1):
    temp = 0
    while True:
        a = int(input("请继续输入你猜测的数字:"))
        if check_num_legal(a) == True:
            print("您所输入的数字未在指定区间,请重新输入:")
        temp +=1
        write_record(temp, a)
        if a == rand1:
            print("恭喜你!只用了{}次就猜对了".format(temp))
            break
        else:
            print("Lower than the answer\n""*"*10)
            return 1


if __name__ == "__main__":
    guide_page("欢迎进入数字猜猜猜小游戏")
    i = input("数字区间起始值:")
    j = input("数字区间终止值:")
    temp = set_final_num(i,j)
    main(temp)

总的能实行了,

但是,思路4:

filter()函数调用,无法调用,不明所以

写回答

2回答

好帮手乔木

2020-01-17

同学你好:

同学的代码还有很多需要注意的地方。

1、区间的比较是数字类型间的比较,不是字符串的比较,因此需要转换为int类型。字符串之间的比较是先比较第一个字符ASCII值的大小,如果相同再比较字符串的长度。同学根据之前的代码输入2和10即可,2的ASCII值大于1的。

http://img.mukewang.com/climg/5e21217d0978f75705810394.jpg


2、使用filter方法参考下面的使用,然后再判断lst和num3是否相同,相同说明输入的都是数字。

http://img.mukewang.com/climg/5e212219095f329405930323.jpg

3、输入的数字不在猜测的范围。使用continue关键字跳出当前次的循环,进入下一次循环。

同学的条判断要判断完整,不要偷懒,猜测的数小于随机数,猜测的数大于随机数。

不要使用return关键字,由于同学之前没有使用continue关键字,因此当输入的数不在猜测的范围,依然会继续向下执行,会执行print("Lower than the answer\n""*"*10)后,执行return 1 。

结束函数的执行,并且函数的返回值为1,程序结束。

http://img.mukewang.com/climg/5e21229409ca96ff06160545.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。


0

火火火火火火火火火

提问者

2020-01-16

还有那个return 1没看明白,最后个是不小心带上了

0

0 学习 · 8160 问题

查看课程