关于python的一个小问题

请问为什么我输入代码后运行结果跟书上的不一样呀?而且还出现了多余的结果——None
2023是说的今年的年份吗?书上是2019

img

img

img

img


这里取得是现在的年份,现在是2023年,当然输出2023啦 和书上不一样是正确的,不用管。
输出None,是因为run方法和say_hi方法都没有返回值,默认就是None,去掉print,直接调用方法即可,如:rg.say_hi()

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7535635
  • 这篇博客也不错, 你可以看下20181009_Python练习题-一:写一个函数,可以完成任意指定整数的相加,并返回结果
  • 你还可以看下python参考手册中的 python- 定义扩展类型:已分类主题- 终结和内存释放
  • 除此之外, 这篇博客: 北京2021年的第一场冬雪,比以往时候来的更早一些,用Python采集历史天气数据,带你赏一赏中的 3. 数据采集 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 数据来源

    历史天气网 https://lishi.tianqi.com/

    网页简单解析如下

    F12开发者模式

    选定月份后,URL地址栏URL会变化,比如2021年10月在URL地址栏里是 https://lishi.tianqi.com/beijing/202110.html,在URL最后的202110就是变化的规律所在。

    确定的URL规律后,我们再看看怎么解析出数据,我这里直接采用的是xpath方法哈,整体完整代码大家参考如下即可(修改地址即可,北京是beijing,其他城市的大家打开网页自己看即可,很简单)。

    完整代码

    import requests
    from lxml import etree
    import pandas as pd
    
    def get_html(month):
        headers = {
            "Accept-Encoding": "Gzip",  
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
            }
        url = f'https://lishi.tianqi.com/beijing/{month}.html'
        
        r = requests.get(url, headers=headers)
        r_html = etree.HTML(r.text)
        
        return r_html
    
    # 月份参数列表
    month_list = pd.period_range('201101','202110',freq='M').strftime('%Y%m')
    df = pd.DataFrame(columns=['日期', '最高气温', '最低气温', '天气', '风向'])
    for i ,month in enumerate(month_list):
        r_html = get_html(month)
        # 找到存放历史天气数据的div节点
        div = r_html.xpath('.//div[@class="tian_three"]')[0]
        # 每个日期的历史天气数据的li节点组成的列表
        lis = div.xpath('.//li')
        for li in lis:
            item = {
                '日期':li.xpath('./div[@class="th200"]/text()')[0],
                '最高气温':li.xpath('./div[@class="th140"]/text()')[0],
                '最低气温':li.xpath('./div[@class="th140"]/text()')[1],
                '天气':li.xpath('./div[@class="th140"]/text()')[2],
                '风向':li.xpath('./div[@class="th140"]/text()')[3]
                 }
            df = df.append(item, ignore_index=True)
        print(f'{i+1}/130月数据已采集')
    df.to_excel(r'北京历史天气数据.xlsx',index=None)
    

    最终,我们采集的数据结果预览如下:

    结果预览

  • 您还可以看一下 王进老师的跟着王进老师学开发Python篇:基础入门案例讲解课程中的 案例03:计算某年的母亲节和父亲节小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    这个问题可能原因有很多种,需要看具体代码来分析,但多余的结果值"None"很有可能是没有返回值或者是因为函数没有正确返回导致的。我们可以通过以下几个步骤来找出错误并解决:

    1. 仔细检查代码,查找哪个函数返回了错误的值或者没有返回。可以使用print函数打印每个变量来进行调试,找出它们的值以及哪个函数返回了 None。在控制台可以看到打印输出的信息。

    2. 判读代码是否包含一些难以察觉的语法问题,在Python中缩进和语句的格式非常重要,尤其是在使用循环语句的时候。确保你的代码合理缩进并且每一行不包含无关的空格和空行。

    3. 确认你的Python版本,如果你的代码是在Python 2.x上编写的,然后在Python 3.x上运行,会发生一些不同,例如print函数。因此确保你使用正确的版本。

    4. 如果上述步骤都没有解决你的问题,可以尝试重新编写代码,根据正确的书本数码来进行编写,确保代码的正确输入。

    另外,获取当前年份的方法很简单,可以使用Python中的datetime模块中的datetime类。具体如下:

    from datetime import datetime
    
    now = datetime.now()
    print("当前年份为:", now.year)
    

    这将打印当前年份的值,例如2021。