pyhton自定义函数

pyhton怎么通过函数方式实现随机输入一个数字,计算该数字范围内所有数字的总和或者乘积。即要求函数实现的功能:既可以求和又可以求乘积,且求乘积不能等于0

from math import factorial
def fun(n):
    return sum(range(n+1)), factorial(n)

n = int(input())
print(*fun(n))

啥叫求总和或乘积
是同时求两个数然后返回2个结果吗,或者是啥意思,到底执行什么

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7577241
  • 这篇博客也不错, 你可以看下Pyhton统计字符串中某个词语出现的个数
  • 除此之外, 这篇博客: pyhton 爬取 58同城 数据中的 这只是我学习了8周的时间,其实要不了那么久的,只是我这个人比较磨蹭,才学了那么长时间。废话不说了,直接代码吧! 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • # -*- coding:utf-8 -*- 
    #上面一行是为了说明是 utf-8 编码
    import time
    import requests
    import pymysql
    from MyQR import myqr
    from pyquery import PyQuery as pq
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common. keys import Keys
    from selenium. webdriver. support import expected_conditions as EC
    from selenium. webdriver. support .wait import WebDriverWait
    
    # 其实在这里我偷了个懒,实现自动翻页的方法太过简单
    # 这里还需要对应你的浏览器下载 驱动
    driver = webdriver.Chrome()
    j = 1
    for j in range(1, 6):
        num = 1 * j
        str_num = str(num)
        ss = 'pn' + str_num
        url = 'https://sjz.58.com/tech/' + ss + '/?PGTID=0d202408-000f-1ba4-ea49-9ee4629b6fa3&ClickID=2'
        #仿造成浏览器访问的假象
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/55.0.2883.87 Safari/537.36'}
        Response = requests.get(url, headers=headers)
        driver.get(url)
        doc = pq(driver.page_source, parser='html')
    	
    	#Css选择器 选择一下需要抓取的东西
        address = doc('.address')
        job_name = doc('.name')
        job_salary = doc('.job_salary')
        compary_name = doc('.comp_name')
        s_address = []
        s_job_name = []
        s_job_salary = []
        s_compary_name = []
        for x in address.items():
            s_address.append(x.text())
        for x in job_name.items():
            s_job_name.append(x.text())
        for x in job_salary.items():
            s_job_salary.append(x.text())
        for x in compary_name.items():
            s_compary_name.append(x.text())
    
        # 连接数据库
        db = pymysql.connect("localhost", "root", "123456", "Test")
        cursor = db.cursor()
        # 建表--IT
        #这个j 的赋值,实际上是为只建一次表
        try:
            if j == 1:
                cursor.execute("DROP TABLE IF EXISTS IT")
                sql = """CREATE TABLE IT (
                            ID int PRIMARY KEY AUTO_INCREMENT,
                            s_addr  VARCHAR(255),
                            s_job_name VARCHAR(255),
                            s_job_salary  VARCHAR(255),
                            s_compary_name VARCHAR(255)
                            );"""
                cursor.execute(sql)
                cursor.close()
        except:
        	#如果不成功进行数据回滚
            db.rollback()
        cursor.close()
    
    	
        i = 0
        # 插入数据--IT
        for i in range(len(s_job_name)):
            try:
                sql = '''INSERT INTO  IT VALUES(null,%s,%s,%s,%s)'''
                cursor = db.cursor()
                cursor.execute(sql, (s_address[i], s_job_name[i], s_job_salary[i], s_compary_name[i]))
                db.commit()
            except:
                db.rollback()
            cursor.close()
        #这个是为防止爬取过快被检测到
        time.sleep(4)
    
    # 查询
    while 1:
        Num1 = int(input("请输入数字来决定怎样查询:\n"
                         "1.精确查询s_address\n"
                         "2.精确查询s_compary——name\n"
                         "3.模糊查询s_compary——name\n"
                         "4.生成动态二维码\n"
                         "5.更改查询\n"))
        if Num1 == 1:
            try:
                # 精确查询--s_address
                sql = '''select * from IT where s_addr=%s'''
                address = input("请输入所要查询的地址信息:")
                cursor = db.cursor()
                cursor.execute(sql, address)
                results = cursor.fetchall()
                for row in results:
                    ID = row[0]
                    s_addr = row[1]
                    s_job_name = row[2]
                    s_job_salary = row[3]
                    s_compary_name = row[4]
                    print("%d,%s,%s,%s,%s" % \
                          (ID, s_addr, s_job_name, s_job_salary, s_compary_name))
                db.commit()
            except:
                db.rollback()
            cursor.close()
        elif Num1 == 2:
            try:
                # 精确查询--s_compary_name
                sql = '''select * from IT where s_compary_name=%s'''
                comp_name = input("请输入所要查询的公司名称信息:")
                cursor = db.cursor()
                cursor.execute(sql, comp_name)
                results = cursor.fetchall()
                for row in results:
                    ID = row[0]
                    s_addr = row[1]
                    s_job_name = row[2]
                    s_job_salary = row[3]
                    s_compary_name = row[4]
                    print("%d,%s,%s,%s,%s" % \
                          (ID, s_addr, s_job_name, s_job_salary, s_compary_name))
                db.commit()
            except:
                db.rollback()
            cursor.close()
        elif Num1 == 3:
            try:
                # 模糊查询--s_compary_name
                sql_1 = '''SELECT * from IT where s_compary_name like '%'''
                sql_2 = '''%' '''
                comp_n = input("请输入所要查询的公司名称简略信息:")
                sql = sql_1 + comp_n + sql_2
                cursor = db.cursor()
                cursor.execute(sql)
                results = cursor.fetchall()
                for row in results:
                    ID = row[0]
                    s_addr = row[1]
                    s_job_name = row[2]
                    s_job_salary = row[3]
                    s_compary_name = row[4]
                    print("%d,%s,%s,%s,%s" %(ID, s_addr, s_job_name, s_job_salary, s_compary_name))
                db.commit()
            except:
                db.rollback()
            cursor.close()
        elif Num1 == 4:
        	#生成二维码在我的上一个博客中已经写了出来,不会的可以去看看
        	# [二维码的创建](https://blog.csdn.net/qq_41425751/article/details/105470233)
            print("生成二维码")
            myqr.run(
                words='https://sjz.58.com/',  # 链接
                picture='mogu.gif',  # 结合图片
                save_name='58tongcheng.gif',
                save_dir='image',
            )
        elif Num1 == 5 :
        	#这个是为了用到渲染库中的东西,就是为了让他自动输入,下面的其他地方就一样了
            browser = webdriver.Chrome()
            try:
                browser.get('https://sjz.58.com')
                input = browser.find_element_by_id('keyword')
                input.send_keys('手机')
                input.send_keys(Keys.ENTER)
                wait = WebDriverWait(browser, 5)
                wait.until(EC.presence_of_all_elements_located((By.ID, 'keyword1')))
                data = str(browser.current_url)
                print(data)
                print(data[26:])
            finally:
                time.sleep(2)
    
            flag = 1
            for flag in range(1, 3):
                url_1 = data[0:25]
                url_2 = data[25:]
                url_3 = '/pn' + str(flag) + ''
                url = url_1 + url_3 + url_2
                print(url)
                headers = {
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
                                  'AppleWebKit/537.36 (KHTML, like Gecko) '
                                  'Chrome/55.0.2883.87 Safari/537.36'}
                Response = requests.get(url, headers=headers)
                browser.get(url)
    
                doc = pq(browser.page_source, parser='html')
                phone_mess = doc('.t:first-child')
                phone_addr = doc('.t .async-tags')
                s_phone_mess = []
                s_phone_addr = []
                for x in phone_mess.items():
                    s_phone_mess.append(x.text())
                for x in phone_addr.items():
                    s_phone_addr.append(x.text())
                print(s_phone_mess)
                print(s_phone_addr)
    
                db = pymysql.connect("localhost", "root", "123456", "Test")
                cursor = db.cursor()
                if flag == 1:
                    # 建表--IT
                    try:
                        cursor.execute("DROP TABLE IF EXISTS phone")
                        sql = """CREATE TABLE phone (
                                            ID int PRIMARY KEY AUTO_INCREMENT,
                                            s_phone_mess  VARCHAR(255),
                                            s_phone_addr VARCHAR(255)
                                            );"""
                        cursor.execute(sql)
                        cursor.close()
                    except:
                        db.rollback()
                    cursor.close()
    
                # 插入数据--phone
                for i in range(len(s_phone_mess)):
                    try:
                        sql = '''INSERT INTO  phone VALUES(null,%s,%s)'''
                        cursor = db.cursor()
                        cursor.execute(sql, (s_phone_mess[i], s_phone_addr[i]))
                        db.commit()
                    except:
                        db.rollback()
                    cursor.close()
                time.sleep(1)
            browser.close()
        else:
            print("输入错误,退出中")
            time.sleep(3)
            break
    driver.close()
    
  • 您还可以看一下 日月光华老师的Pyhton零基础入门到爬虫实战课程中的 条件判断与什么是真值小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可以通过Python的自定义函数来实现输入一个数字范围后,计算该数字范围内所有数字的总和或乘积的功能。下面是一个示例代码:

    def calculate(start: int, end: int, operation: str) -> int:
        if operation == 'sum':
            return sum(range(start, end+1))
        elif operation == 'product':
            if 0 in range(start, end+1):
                raise ValueError("Cannot calculate product with 0")
            else:
                res = 1
                for i in range(start, end+1):
                    res *= i
                return res
        else:
            raise ValueError("Invalid operation, choose either 'sum' or 'product'")
    

    该函数有三个参数,分别是起始数字、终止数字和操作类型。操作类型有两个选项,分别是'sum'和'product',分别表示计算数字范围内所有数字的总和和乘积。

    在计算乘积时需要考虑到0的情况,如果数字范围内有0,乘积就会等于0,因此需要抛出异常。

    下面是对该函数的调用示例,求1~10的总和和乘积:

    result_sum = calculate(1, 10, 'sum')
    result_product = calculate(1, 10, 'product')
    print("Sum of 1 to 10:", result_sum)
    print("Product of 1 to 10:", result_product)
    

    输出结果如下:

    Sum of 1 to 10: 55
    Product of 1 to 10: 3628800
    

    在优化方面,可以将函数的输入参数改为一个范围对象,这样更直观一些。代码如下:

    def calculate_range(range_obj: range, operation: str) -> int:
        if operation == 'sum':
            return sum(range_obj)
        elif operation == 'product':
            if 0 in range_obj:
                raise ValueError("Cannot calculate product with 0")
            else:
                res = 1
                for i in range_obj:
                    res *= i
                return res
        else:
            raise ValueError("Invalid operation, choose either 'sum' or 'product'")
    

    调用示例也相应更改为:

    range_obj = range(1, 11)
    result_sum = calculate_range(range_obj, 'sum')
    result_product = calculate_range(range_obj, 'product')
    print("Sum of 1 to 10:", result_sum)
    print("Product of 1 to 10:", result_product)
    

    输出结果与之前相同。