1112day10:Python基础24题及Sql 语句编写

本文介绍了Python的基础数据类型,如字符串、元组、列表、字典和集合,并探讨了它们之间的区别。通过示例展示了如何删除列表中的重复元素、操作字符串、以及使用正则表达式处理邮箱格式。此外,还讨论了Python函数默认参数的陷阱、re模块的match和search方法、以及如何使用selenium库启动浏览器进行搜索。同时,文章涵盖了Python中的私有属性、随机数生成、集合操作以及文件和目录管理。最后,提供了SQL更新语句的编写示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Python 有哪些数据类型?并举例

字符串,元组,字典,集合,列表,浮点数,布尔数,整型

2.列表和元组的区别?

列表属于可变数据类型元组属于不可变数据类型
列表为方括号元组为园括号

3.请写出一段Python代码实现删除一个list里面的重复元素

方法一
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a=list(set(a))
print (a)

结果:[0, 1, 2, 3, 4, 5, 7, 8, 9, 10]

方法二
a=[1,2,4,2,4,5,6,5,7,8,9,0]
b={}
b=b.fromkeys(a)   #构建字典
print(b)
a=list(b.keys())  #字典的键不能重复
print(a)

结果:
{1: None, 2: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None, 0: None}
[1, 2, 4, 5, 6, 7, 8, 9, 0]

4.单引号,双引号,三引号的区别

单引号和双引号可以用来表示一个字符串
三引号的作用是:注释 还可以作为换行

5.看代码写结果

def func(a,b=[]):
    b.append(a)
    return b


v1 = func(1)
print(v1)
v2 = func(2,[10,20])
print(v2)
v3 = func(3)
print(v3)

运行结果:
[1]
[10, 20, 2]
[1, 3]

6.请问上题中def func(a,b=[]): 这种写法有什么陷阱

函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第三次执行还是用第一次执行的时候实例化的地址存储,所以第一和第三次执行的结果就是相同的,想每次执行只输出当前传入参数 ,默认参数应该设置为None

7.re的match和search区别?

== match ==:如果字符串开头有0个或多个字符,符合正则表达式返回匹配的对象如果不符合返回none
== search ==:扫描整个字符串有匹配的返回匹配对象没有返回none

8.re 中 .* 与 .*? 有何区别

.*贪婪模式匹配一个或多个
.*?非贪婪模式匹配一个

9.re 匹配邮箱代码 格式: 51245546@qq.com |或者| kkbig@163.com

[1-9]\d+@qq.com  
[a-z]+@163.com

10.列表元素去重

方法一
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a=list(set(a))
print (a)

结果:
[0, 1, 2, 3, 4, 5, 7, 8, 9, 10]


方法二
a=[1,2,4,2,4,5,6,5,7,8,9,0]
b={}
b=b.fromkeys(a)
print(b)
a=list(b.keys())
print (a)

结果:
{1: None, 2: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None, 0: None}
[1, 2, 4, 5, 6, 7, 8, 9, 0]

11.怎么将列表转为字符转

当这里面有不能凭借的东西,比如元素,join就用不了
l = [1,2]
print(''.join(l))  #报错

l = [False,None]
print(','.join(l)) #报错


l = str([False,None])
print(l[5:])   #可以

12.怎么让字符的首字母大写,其他字母小写

upper()
lower()
title()
swapcase()

import string
print(string.capwords('hello world'))

13.怎么让列表按相反顺序排列

方法一
s = [1,5,2,3]
s.reverse()
print(s)

结果:[3, 2, 5, 1]

方法二
s = [1,5,2,3]
print(s[::-1])

结果:[3, 2, 5, 1]

14.把字符串里面的数字全部替换成大写A,正则替换:re.sub

import re
strs = 'dgfsgsfg3214sfgsdh232dfg535'
result = re.sub('\d+?','A',strs)
print(result)

结果:dgfsgsfgAAAAsfgsdhAAAdfgAAA

15.怎么给字典中不存在的key指定默认值

dicts = {'hello':12}
print(dicts.get('hellos','not found'))

16.高级函数求1~100的和

filter() sorted()
from functools import reduce
print(reduce(lambda x,y:x+y,range(101)))

结果:5050

17.怎么快速启动浏览器打开指定网站并搜索

from selenium import webdriver
from selenium.webdriver.common.by import By

dr = webdriver.Chrome('D:\\an\Lib\site-packages\\chromedriver.exe')  #指定驱动位置

dr.get('https://www.baidu.com/')

dr.find_element(by=By.XPATH,value='//*[@id="kw"]').send_keys('python')   #F12打开,path找到XPATH,value后边跟XPATH规则
dr.find_element(by=By.XPATH,value='//*[@id="su"]').click()     #定位按钮,点击搜索

18.私有属性,私有属性安全吗?

class Man:
    pass
class Student(Man):
    pass
    def __init__(self,name):
        self.__name = name #self._name = name:变成一个杠,我不希望你去在外边调用这个属性,但是你在外边可以调用,加这个杠的意思就是写这个类的程序员不希望你在外边调用

    def get_name(self):
        print(self.__name)

stu = Student('张三')  #实例化
stu.get_name()  #可以打印
stu._Student__name = 'hello'  #实际上在外边起来一个别名
print(stu._Student__name)

结果:
张三
hello



issubclass()   #判断一个类是否十另一个类的子类
isinstance()   #判断这个对象
print(issubclass(Student,Man))

stu = Student()  #先实例化
print(isinstance(stu,Man))  #判断stu是不是Man的子

19.random有关的方法

import random
random.shuffle()
random.randrange()
random.choice()
random.sample()
random.random()
print(random.randint(1,100))

20.集合

set1 = {1,2,3}
set2 = {2,3,4}
print(set1|set2)
print(set1&set2)  #与字符
print(set1-set2)
print(set1^set2)

21.创建文件夹

import os
os.system('mkdir user')

22.执行命令,获取它输出的值

import subprocess

cmd = 'mkdir bbb'
r = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) #stdout=subprocess.PIPE将cmd里面的输出指向管道
out = r.communicate()[0]   #指定完就可以打印出来

print(out)

23.遍历

ord ()
chr ()

for i in range(1,200):
    print(chr(i))

23.打包文件成为exe

pip install pyinstaiier
pyinstaller -F xxxxx文件名

24. Sql 语句编写

第一张表 表名 CompanyNameTable
在这里插入图片描述

第二张表 表名 UserNameTable
在这里插入图片描述

第三张表 表名 UserPayTable
在这里插入图片描述
要求更新第一张表isvip (是否是会员)的状态 (0是非会员 1是 会员).
提示: 第三表UserPayTable的EndDate大于当前时间的公司认为是会员。

方法一
UPDATE companynametable
SET isvip = '1'
WHERE
	cbsid IN (
		SELECT
			cbsid
		FROM
			usernametable
		WHERE
			user_name IN (
				SELECT
					username
				FROM
					userpaytable
				WHERE
					EndDate > now()
			)
	)


思路
SELECT
	*
FROM
	companynametable
WHERE
	cbsid IN (
		SELECT
			cbsid
		FROM
			usernametable
		WHERE
			user_name IN (
				SELECT
					username
				FROM
					userpaytable
				WHERE
					EndDate > now()
			)
	)
方法二
UPDATE companynametable
SET isvip = '1'
WHERE
	cbsid IN (select * from(
		SELECT
			cbsid
		FROM
			companynametable AS cp
		JOIN usernametable AS ut USING (cbsid)
		INNER JOIN userpaytable AS up ON ut.user_name = up.UserName
		WHERE
			up.enddate > now()
	)as AA)


思路
-- 嵌套子查询,方法一
select now()
select * from companynametable where cbsid in
select * from usrnametable where user_name in
SELECT username from userpaytable where enddate>now()
update companynametable set isvip='1'


select cbsid from usernametable where user_name in(select username from userpaytable where EndDate > now())


-- 三表联查,方法二
update companynametable set isvip='1' where cbsid in
-- 先用select * from 先查一下,然后才能套
select cbsid from companynametable as cp join usernametable as ut using(cbsid) INNER JOIN userpaytable as up on ut.user_name=up.UserName
where up.enddate>now()

-- 方法一三表联查
select * from companynametable join usernametable using(cbsid)

select * from companynametable as cp join usernametable as ut using(cbsid) INNER JOIN userpaytable as up on ut.user_name=up.UserName
select cbsid from companynametable as cp join usernametable as ut using(cbsid) INNER JOIN userpaytable as up on ut.user_name=up.UserName where up.enddate>now()

在这里插入图片描述

### 如何通过Python脚本执行SQL查询 在Python中可以通过多种方式来执行SQL查询。以下是几种常见的方法及其具体实现: #### 使用 `sqlite3` 模块 对于SQLite数据库,可以使用内置的 `sqlite3` 模块。该模块允许直接执行SQL语句并处理返回的结果。 ```python import sqlite3 # 连接到SQLite数据库(如果文件不存在,则会自动创建) connection = sqlite3.connect('example.db') try: cursor = connection.cursor() # 创建表 cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)''') # 插入数据 cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",)) # 查询数据 cursor.execute("SELECT * FROM users WHERE name LIKE ?", ('%li%',)) # 使用通配符[^4] results = cursor.fetchall() print(results) finally: connection.close() ``` --- #### 使用 `pyodbc` 或其他DBAPI库连接到关系型数据库 当需要操作MySQL、PostgreSQL或其他类型的数据库时,通常会选择第三方库如 `pyodbc` 或者特定于某种数据库的驱动程序(例如 `pymysql`, `psycopg2`)。这些库支持参数化查询以及更复杂的动态SQL功能。 ##### 示例:使用 `pyodbc` 执行带参数的SQL查询 ```python import pyodbc # 建立与目标数据库的连接字符串 conn_str = ( r'DRIVER={ODBC Driver 17 for SQL Server};' r'SERVER=localhost;' r'DATABASE=testdb;' r'UID=user;' r'PWD=password;' ) try: conn = pyodbc.connect(conn_str) cursor = conn.cursor() # 动态构建SQL查询 query_template = "EXEC sp_executesql N'SELECT * FROM employees WHERE department_id = @dep_id', N'@dep_id INT', ?" param_value = 10 result_set = cursor.execute(query_template, param_value).fetchall() # 调用sp_executesql存储过程[^3] except Exception as e: print(f"Error occurred: {e}") finally: if 'conn' in locals(): conn.close() ``` --- #### 参数化查询的重要性 为了防止SQL注入攻击,在编写涉及外部输入的数据访问逻辑时应始终优先采用参数化的查询形式而非手动拼接字符串。这不仅提高了安全性还简化了编码流程减少了潜在错误的发生几率。 --- #### 处理模糊匹配条件下的查询需求 有时业务场景下可能涉及到基于部分关键字检索记录的需求,此时可利用LIKE运算符配合百分号(`%`)作为通配符完成相应操作。 ```sql -- 查找名字中含有子串“ali”的所有用户 SELECT * FROM users WHERE name LIKE '%ali%' ``` 上述语法可以直接嵌套至Python代码片段之中并通过占位符传递实际变量值从而达成灵活控制的目的。 --- #### 结合AI模型调用示例 另外值得注意的是,在某些高级应用场合比如聊天机器人项目里头可能会集成自然语言理解(NLU)组件去解析用户的自由文本请求进而映射成结构化的数据库查询动作[^5]。下面给出了一段伪代码用于展示这一概念的实际运用情况: ```python def generate_sql_query(user_input): parsed_data = parse_user_message(user_input) # 自定义函数解析消息内容 city_name = parsed_data.get('city') or None if not city_name: raise ValueError("City information missing.") return f"CALL get_n_day_weather_forecast('{city_name}', 7);" query_stmt = generate_sql_query("Give me a weather report for Toronto, Canada.") print(query_stmt) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ゆきな

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值