xml地图|网站地图|网站标签 [设为首页] [加入收藏]
然后统计这组数据中每个数字出现的个数,函数
分类:编程

需求:在命令行任意输入一组数字(0~9),然后统计这组数据中每个数字出现的个数,然后将统计个数逆序输出

理论:

模块

输出样例:

1、 只要方法是 Task类型的返回值,都可以用 await 来等待调用获取返回值。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(module)。

图片 1

2、 如果一个返回 Task类型的方法被标记了 async,那么只要方法内部直接 return T 这个 类型的实例就可以。

使用模块好处:

开始分解:

3、 一个返回 Task类型的方法没有被标记了 async,那么需要方法内部直接 Task 实例。

1、提高可维护性

1、首先看到样例输出,第一想到的是什么,怎么从命令行中获取一组数字(根据需求值应该只有0~9)?

实践(自己添加一个按钮):

2、可重用

2、怎么去除重复的数字?

图片 2图片 3

3、避免函数名和变量冲突

3、怎样将出现的数字和统计个数结合起来?主要是结合。

private async void button1_Click(object sender, EventArgs e)
        {
            #region 方法一:
            //string i1 = await F1Async();//保证异步任务执行完
            //MessageBox.Show("i1=" + i1);
            //string i2 = await F2Async();
            //MessageBox.Show("i2=" + i2);
            #endregion

            #region 方法二:
            Task<string> task1 = F1Async();
            Task<string> task2 = F2Async();
            string i1 = await task1;//这里保证task1的任务一定执行完,并不是这里才执行异步任务。
            MessageBox.Show("i2=" + i1);
            string i2 = await task2;
            MessageBox.Show("i2=" + i2);
            #endregion
        }
        static Task<string> F1Async()
        {
            MessageBox.Show("F1 Start");
            return Task.Run(() =>
            {
                System.Threading.Thread.Sleep(1000);
                MessageBox.Show("F1 Run");
                return "F1";
            });
        }
        static Task<string> F2Async()
        {
            MessageBox.Show("F2 Start");
            return Task.Run(() =>
            {
                System.Threading.Thread.Sleep(2000);
                MessageBox.Show("F2 Run");
                return "F2";
            });

        }

模块分类

4、怎样将数字和计数结合后的集合按照计数的逆序输出?这个很关键。

View Code

模块分为三种:


 

  • 内置标准模块(又称标准库)。执行help('modules')查看所有Python自带模块列表
  • 第三方开源模块。可通过pip install 模块名 ,安装
  • 自定义安装

那好,就剩下就是解决问题了。

相对导入

第1步:

 

  首先我们知道命令行获读取一般都是字符串,最常用的就是Console.Read和Console.ReadLine。但是这块用Read的话就有些不太方便了,因为你要用循环读取,而且你读过来的是字符的ASCII码值,所以我们用ReadLine方法。

或者有人会看到这个错

图片 4

 

  那用ReadLine的话,读取的是字符串,那就需要我们把字符串处理一下,编程一个个的数字即可。那好办了。

ValueError: attempted relative import beyond top-level package

  关键代码:

 

  

其实这两个错误的原因归根结底是一样的:在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。

static List<int> GetConvertResult(List<string> list)
        {
            List<int> iList = new List<int>();
            int iTemp = 0;
            list.ForEach(item =>
            {
                if (int.TryParse(item, out iTemp))
                {
                    iList.Add(iTemp);
                }
            });

            return iList;
        }

 

  

文件夹被python解释器视作package需要满足两个条件:

List<int> list = GetConvertResult(Console.ReadLine().Split(' ').Where(item => item.Trim() != "").ToList());

 

  上面这句话的意思就是:从命令行读取的字符串,然后用空格(' ')分割,然后筛选出不为“”的,再转成List,传给

  1. 文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。
  2. 不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
GetConvertResult(List<string> list)函数。好了第一个问题解决了

 

第2步:

所以这个问题的解决办法就是,既然你在views.py里执行了相对导入,那就不要把views.py当作入口程序,可以通过上一级的manage.py调用views.py

本文由澳门新葡亰手机版发布于编程,转载请注明出处:然后统计这组数据中每个数字出现的个数,函数

上一篇:第九堂课澳门新葡亰手机版:,Python异常处理 下一篇:卡通效果介绍,Python高等性格
猜你喜欢
热门排行
精彩图文