分类: Python技术

Python技术

字符串的查找、修改、判断

字符串的查找、修改、判断

一、查找
find()
:检测某一个子串是否包含在这个字符串中,如果在返回这个子串的下标,如果不在则返回 -1
语法
字符串序列.find(子串,开始下标,结束下标)
注意开始下标和结束下标可以省略,表示在整个字符串中查找

str=”0123456789″
print(str.find(’10’))

结果为 :-1

a=’12345677′
print(a.find(’14’))

结果为 :-1

str=”0123456789″
print(str.find(‘345′))

结果为:3

a=’isc scjc dhsv jvdvud’
print(a.find(‘dhsv’))

结果为9

str=”0123456789″
print(str.find(‘8’))

结果为 :8

index()
检测某一个子串是否包含在这个字符串中:如果在返回这个子串开始下标,否则报错
语法 :字符串序列.index(子串,开始下标,结束下标)

txt = “Hello, welcome to my world.”

x = txt.index(“welcome”)

print(x)

结果:7

str=”0123456789″
print(str.index(‘23456′))

结果为:2

str=”0123456789″
print(str.index(’02’))

结果报错

查找的必须是单个的或者是连续的一个子串

index() 方法查找指定值的首次出现。
如果找不到该值,index() 方法将引发异常。
index() 方法与 find() 方法几乎相同,唯一的区别是,如果找不到该值,则 find() 方法将返回 -1。

rfind()和find()
功能相同但rfind是从右边开始查找

txt = “China is a great country. I love China.”

x = txt.rfind(“China”)

print(x)

结果为33

rindex 和index
功能相同但是查找方向从右边开始

txt = “Hello, welcome to my world.”

x = txt.rindex(“e”)

print(x)

结果为13

count()
返回某一个子串在字符串中出现的次数
语法 :字符串序列.count(子串,开始下标,结束下标)

txt = “I love apples, apple are my favorite fruit”

x = txt.count(“apple”, 10, 24)

print(x)

结果:1

strip() 方法删除开头和结尾的空白字符

a = ” Hello, World! ”
print(a.strip()) # returns “Hello, World!”

结果为Hello, World!

lower() 返回小写的字符串:
a = “Hello, World!”
print(a.lower())

结果为 hello, world

upper() 方法返回大写的字符串:
a = “Hello, World!”
print(a.upper())

结果为 HELLO, WORLD

title() 方法返回一个字符串,其中每个单词的*个字符均为大写。比如标题。
如果单词包含数字或符号,则其后的*个字母将转换为大写字母。

txt = “Welcome to my world”

x = txt.title()

print(x)

结果为Welcome To My World
请注意,非字母字母之后的*个字母将转换为大写字母:

txt = “hello d2d2d2 and 5g5g5g”

x = txt.title()

print(x)

结果为Hello D2D2D2 And 5G5G5G

Django中ORM框架概述

Django中ORM框架概述

本文旨在对于个人知识的梳理以及知识的分享,如果有不足的地方,欢迎大家在评论区指出

ORM框架的概念
ORM是对象关系映射的简称,由于当下的程序大多采用面向对象的思想,故ORM使我们可以使用面向对象的思想来设计数据库,使得数据库更加的简单

Model层开发流程
安装数据库驱动: pip install mysqlclient
Django中settings里面数据库的配置修改
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’, # 数据库引擎类别
‘NAME’: ‘xxxx’, # 数据库名
‘USER’: ‘xxxx’, # 用户名
‘PASSWORD’: ‘xxxx’, # 密码
‘HOST’:’localhost’ / ‘127.0.0.1’, # 主机ip
‘PORT’:3306, # 端口号

创建app: python manage.py startapp app名称
在生成的app的models.py文件中定义model类
from django.db import models

class User(models.Model):
name = models.CharField(max_length=30)
password = models.CharField(max_length=30)

生成移植文件: python manage.py makemigrations
执行迁移操作: python manage.py migrate
ORM中的模型字段
字段类型 说明
SmallIntegerField 2字节
IntegerField 4字节
BigIntegerField 8字节
FloatField double
DecimalField max_digits=a, decimal_places=b,指的是该小数除小数点外一共a位,其中小数点后有b位
CharField max_length=a,表示*大长度为a
TextField 相当于mysql中的text
BooleanField 相当于mysql中的tinyint
DatetimeField 相当于mysql中的datetime
DateField auto_now_add=True表示该字段取决于该行数据首次添加的时间,auto_now=True表示该字段取决于该行数据修改的时间
ForeignKey ForeignKey(to=”对方的类或类名”, on_delete = 级联选项) 表示外键一对多
OneToOneField OneToOneField(to=”对方的类或类名”, on_delete = 级联选项) 表示外键一对一
ManyToManyField ManyToManyFiled(to=”对方的类或类名”) 表示外键多对多
ORM中的字段参数
null: 默认为False表示不能为空
default: 表示该字段的默认值,例: name = models.CharField(max_length=20, default=”FfFJ”)
primary_key: 定义当前列为主键
unique: 当前列是否唯一
db_column: 自定义列名,默认与定义的变量名相同
db_index: 是否在某列上建立索引
blank: 用于前端的form验证,表示在前端中该字段可以为空
meta:
class MyModel(models.Model):
salary = models.DecimalField(…)
…..
age = models.xxx
name = models.xxx
class Meta:
db_table = “表名” # 设置表名,修改Django默认的表名
unique_together = ((), ()) # 设置联合索引
ordering = [‘列名’]或[‘列名1’, ‘列名2’] # 规定表内数据的排序方式

Model-API的增删改查
这里以User这个model类为例

创建数据: User.objects.create()
删除数据: user = User.object.filter(id=1).first(), user.delete()
修改数据: user = User.object.filter(id=1).first(), user.username = “pfco”, user.save()
查询数据:
基本的查询方法:
all(): 返回QuerySet中的所有model对象 User.object.all()
get(): 返回一个model对象 User.object.get(id=1) 返回指定的一条数据,如果没有,则报错
filter(): 返回QuerySet对象,User.object.filter(id=1)
count(): 返回QuerySet集合中的对象个数 User.object.filter(age=12).count()
exclude(): 返回不满足条件的QuerySet对象,User.object.exclude(age=12),这行代码的意思是返回age不为12的所有用户
first(): 返回QuerySet中的*个数据
last(): 返回QuerySet中的*后一个数据
exists(): 判断当前Model类对应数据库表中是否有数据
order_by(‘列名’): 将查询到的QuerySet集合按照列名进行升序排列,如果要降序在列名前加’-’
lt, lte, gt, gte: 分别代表<、<=、>、>=,例如我们要找年龄大于等于18的所有用户,则对应的查询语句为User.objects.filter(age__gte=18)
模糊查询:
contains, icontains: 返回包含某个指定字符的所有数据,icontains指的是忽略大小写,User.objects.filter(name__contains=”s”),就是返回名字中包含s的所有用户
startswith, istartswith: 返回以某个指定字符开头的所有数据,istartswith指的是忽略大小写
endswith, iendswith: 返回以某个指定字符结尾的所有数据,iendswith指的是忽略大小写
范围查询:
in: 返回对应列数据在给定集合的所有行,例如User.objects.filter(age__in=(18, 20))返回的就是年龄为18或20的所有用户
range: 返回对应列数据在给定范围的所有行,例如User.objects.filter(age__range(18, 20))返回的就是年龄在[18, 20]之间的所有用户
空值查询: 返回对应字段为空的QuerySet集合,User.objects.filter(age__isnull=True)表示age字段为空的所有用户
日期查询:
year: 年份
month: 1-12 月份
day: 一年中的第几天
hour: 一年中的第几个小时
minute: 一年中的第几分钟
second: 一年中的第几秒
week: 一年中的第几周 1-52or53
week_day: 周几 周日=1, 周六=7

values(“列名1”, “列名2” … ): 返回符合条件的QuerySet集合中指定的列,这样每一个model对象都对应一个小字典
聚合函数(aggregate):
from django.db.models import Count, Max,Avg,Min,Sum
User.objects.aggregate(Max(“pk”), Min(“Salary”)) # 获得用户表中的*大id以及*少的薪水

分组查询(annotate):
# 分组查询是以values中的列作为分组条件
# 将所有的用户以age进行分组,并在每一组中找到*大id
User.objects.values(“age”).annotate(Max(“pk”))
# 将所有的用户以age进行分组,并找到所有组中id*大值大于15的所有组
User.objects.values(“age”).annotate(p = Max(“pk”)).filter(p__gt=15)

F()函数: 当当前的查询需要使用到表中另外的列时,使用F函数,例如User.objects.filter(id__gt=F(“age”))就是找到id大于年龄的所有用户
Q()函数: 当需要使用|或者~逻辑的时候,可以使用Q函数,例如User.objects.filter(Q(id__gt=15)|Q(id__lt=10))就是找到所有id大于15或者id小于10的用户
模型中的关联关系
一对一关系
class Passport(models.Model):
note = models.CharField(max_length=20)
person = models.OneToOneField(to=”Person”,on_delete=models.CASCADE,null=True) #关系属性
class Meta:
db_table=”t_passport”

class Person(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
class Meta:
db_table=”t_person”
“””
在一对一的关系中,互相都可以通过对方类名的小写调用对方
“””

一对多关系
class Category(models.Model):
title = models.CharField(max_length=20)
note = models.CharField(max_length=20)
class Meta:
db_table=”t_category”

class Goods(models.Model):
title = models.CharField(max_length=20,unique=True)
price = models.FloatField()
cate = models.ForeignKey(to=Category,on_delete=models.CASCADE)
class Meta:
db_table = “t_goods”
“””
在一对多的关系中,例如对于商品的分类而言,其中的某个对象我们假设为category,那么要获得
该分类下的所有商品的方法为category.goods_set,而要获得某个商品对象的分类的方式就是直
解good.cate就好了
“””

多对多关系
class Student(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
class Meta:
db_table=”t_student”

class Course(models.Model):
title = models.CharField(max_length=30)
expire = models.SmallIntegerField()
stu = models.ManyToManyField(to=Student) #关系属性
class Meta:
db_table=”t_course”
“””
在多对多的关系中,有对方属性的一方可以直接调用,没有的则需要加_set,例如上面的例子,当我们
获得当前学生对象为student,那么获得他所学的课程的方式就是student.course_set,而当我获得
当前课程对象为course时,获得学习该课程的所有学生的方式就是course.stu
“””

在有关联关系的表中增加数据的方式为(这里以一对多的关系为例):

cate = Category.objects.create(xxxxx)
good = Goods.objects.create(xxxxx, cate=cate)
1
2
在有关联关系的表中删除数据的时候,需要给外键指定它的级联方式,主要有一下几种:

#如果要删除主,所有从的外键置null (重要)
per = models.OneToOneField(to=Person,on_delete=models.SET_NULL,null=True)
#如果要删除主,所有从一起删除
per = models.OneToOneField(to=Person,on_delete=models.CASCADE,null=True)
#如果要删除主,django什么也不做,有数据库决定是否合法
per = models.OneToOneField(to=Person,on_delete=models.DO_NOTHING,null=True)
#如果要删除主,所有从的外键置为6 (重要)
cate = models.ForeignKey(to=”Category”,on_delete=models.SET(6))
#如果要删除主,所有从的外键置为默认值5 (重要)
cate = models.ForeignKey(to=”Category”,on_delete=models.SET_DEFALUT,default=”5″)
#如果要删除主,如果有从数据存在,不允许删除
cate = models.ForeignKey(to=”Category”,on_delete=models.PROTECT)

字典算法实现及操作 –python(实用)

字典算法实现及操作 –python(实用)

字典算法实现 –python
我在做项目的处理工作时,因为项目数据的需要,我想对字典的每一个*底层的值进行操作,得到所有底层值得路径和值并输出,于是就写了这个算法。

代码及功能:
def print_k(area, i=0, a=”, key=”):
if key != ”:
a = a + key + ‘,’
for k in area:
if isinstance(area[k], dict):
print_k(area[k], i+1, a=a, key=k)
else:
for j in (a + k).split(‘,’):
print(j, end=’–‘,)
print(‘——-‘, area[k])

这个是一个嵌套函数,我们传入一个字典,它会遍历输出所有的底层值
比如我们先读取一个json文件,并且转换为dict,然后传入这个函数。%title插图%num

读取文件 & 打印

import json
f1 = open(‘json_data/empty1.json’)
file = json.load(f1)
print_k(file)%title插图%num
格外操作:
我们可以通过修改print()函数得输出流,将输出结果写到文件里边,下面来示例一下。
print函数有个参数为file ,通过修改它就可以实现上功能

def print_k(area, i=0, a=”, key=”):
if key != ”:
a = a + key + ‘,’
for k in area:
if isinstance(area[k], dict):
print_k(area[k], i+1, a=a, key=k)
else:
for j in (a + k).split(‘,’):
print(j, end=’–‘, file=f)
print(‘——-‘, area[k], file=f)
dicts = {“a”: “1层1”, ‘j’: {“a”: “2层1”, “b”: “2层2”}, “b”: “一层2”, “g”: “一层3”, “o”: “一层4”,
‘1’: {“a”: “二层”, “b”: “2c”, “g”: “2c”}}
with open(‘Txt/test3.txt’, ‘w’) as f:
print_k(dicts)

可以看到我们进行了输出重定向。我们看到test3.txt本来是空的%title插图%num

在运行了代码之后%title插图%num

字典的值和路劲被逐行写进来了,规则还可以自己修改,非常方便。

查题程序,无脑查题拿高分

查题程序,无脑查题拿高分

前言
现在上网课自己答题太累了,所以做一个答题的程序方便自己,后面可能考虑自己做一个浏览器脚本更方便。如果有侵权什么的记得联系博主删除哦

先修知识
PyQt5界面制作、requests模拟请求框架基本使用

代码
import sys,requests,json
from PyQt5.QtWidgets import QMainWindow,QApplication, QMessageBox
from PyQt5.uic import loadUi

class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
loadUi(‘maingui.ui’, self)
self.init_t()

def init_t(self):
self.pushButton.clicked.connect(self.search)

def search(self):
try:
text = self.textEdit.toPlainText().strip()
if (len(text) < 6):
QMessageBox.warning(self, “Warning”, “题目少于6个字”, QMessageBox.Yes, QMessageBox.Yes)
else:
url=”http://39.108.63.141:8932/?q=”+text
res=requests.get(url=url)
if(res.status_code==200):
res=json.loads(res.text)
if(res[“status”]==”ok”):
data=res[“data”]
s=”题目:【{}】\n答案:【{}】”.format(data[“question”],data[“answer”])
QMessageBox.information(self, “提醒”,s,
QMessageBox.Yes, QMessageBox.Yes)
self.textEdit.clear()
else:
QMessageBox.warning(self, “Warning”, “api响应异常,响应信息为:{}”.format(res),
QMessageBox.Yes, QMessageBox.Yes)
else:
QMessageBox.warning(self, “Warning”, “api响应异常,响应状态码为:{}”.format(res.status_code), QMessageBox.Yes, QMessageBox.Yes)
except Exception as e:
QMessageBox.warning(self, “Warning”, “程序出错:{}”.format(e),
QMessageBox.Yes, QMessageBox.Yes)
s = sys.exc_info()
print(“Error ‘%s’ happened on line %d” % (s[1], s[2].tb_lineno))

app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec())

这里还用到了一个ui文件,附带下载链接,特意设置成了不需要积分(设置成0积分要下载码,所以还是改成要一个积分了):https://download.csdn.net/download/weixin_45857307/16159847

或者百度云链接: https://pan.baidu.com/s/1HujQJK4_DDz3ScRDek_Trg 提取码: msrc 复制这段内容后打开百度网盘手机App,操作更方便哦

Python3 零基础自学笔记_pytest框架

Python3 零基础自学笔记_pytest框架

pytest
pytest命名规则
测试文件以test_开头(以_test结尾也可以)
测试类以Test开头(驼峰命名法),并且不能带有 init 方法
测试函数以test_开头
断言使用asser
fixture函数\修饰器
@pytest.fixture(scope=’module’)
1
scope参数有四种,分别是’function’,‘module’,‘class’,‘session’,默认为function。

function:每个test都运行,默认是function的scope
class:每个class的所有test只运行一次
module:每个module的所有test只运行一次
session:每个session只运行一次
备注
可以通过在fixture函数中通过yield实现setup和teardown功能

mark.parametrize装饰器
可以实现测试用例参数化

@pytest.mark.parametrize(‘参数名’,list)
1
*个参数是字符串,多个参数中间用逗号隔开

第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

传一个参数 @pytest.mark.parametrize(‘参数名’,list) 进行参数化

传两个参数@pytest.mark.parametrize(‘参数名1,参数名2’,[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])])

进行参数化,当装饰给方法时,这时方法被被执行2次,

第1次:参数名1 对应值 参数1_data[0],参数名2 对应值 参数2_data[0]
第2次:参数名1 对应值 参数1_data[1],参数名2 对应值 参数2_data[1],这样就可以用到我们测试用例执行中,根据用例的多少,调用多次,断言多次,不需要用循环去写了。

setup和teardown操作
在pytest中setup和teardown操作与unittest中相似。

执行测试
命令行形式
pytest # run all tests below current dir
pytest test_mod.py # run tests in module file test_mod.py
pytest somepath # run all tests below somepath like ./tests/
pytest -k stringexpr # only run tests with names that match the
# the “string expression”, e.g. “MyClass and not method”
# will select TestMyClass.test_something
# but not TestMyClass.test_method_simple
pytest test_mod.py::test_func # only run tests that match the “node ID”,
# e.g “test_mod.py::test_func” will be selected
# only run test_func in test_mod.py

通过 pytest.mark装饰器对测试的test进行分类执行
通过通过@pytest.mark控制需要执行哪些feature的test,例如在执行test前增加修饰@pytest.mark.website

通过-m “website” 执行有website标记的test方法
pytest -v -m “website” pytest1.py
1
通过 -m “not website” 执行没有website标记的test方法
pytest -v -m “not website” pytest1.py
1
Console参数介绍
-v 显示每个测试函数的执行结果
-q 只显示整体测试结果
-s 显示测试函数中print()函数输出
-x 在遇到的*个错误时退出测试
-h 帮助
断言
使用pytest.raises捕获程序抛出的异常

def test_div_error(self,a,b,expect):
with pytest.raises(ZeroDivisionError):
self.calc.div(a,b)

上述用例可通过而不报错

测试报告
pytest可以方便的生成测试报告,即可以生成HTML的测试报告,也可以生成XML格式的测试报告用来与持续集成工具集成。

生成HTML格式报告

py.test –resultlog=path
1
生成XML格式的报告:

py.test –junitxml=path
1
拓展性插件
测试报告
pytest-cov
计算pytest覆盖率,支持输出多种格式的测试报告

安装方式与样例
pip install pytest-cov
pytest –cov-report=html –cov=./ test_code_target_dir

Console参数介绍
–cov=[path], measure coverage for filesystem path (multi-allowed), 指定被测试对象,用于计算测试覆盖率
–cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed), 测试报告的类型
–cov-config=path, config file for coverage, default: .coveragerc, coverage配置文件
–no-cov-on-fail, do not report coverage if test run fails, default: False,如果测试失败,不生成测试报告
–cov-fail-under=MIN, Fail if the total coverage is less than MIN. 如果测试覆盖率低于MIN,则认为失败
样例结果
%title插图%num

Python基础知识点及运用方法

Python基础知识点及运用方法
一、变量
变量:’装’程序中的数据

变量名—- 标识符: 是独一无二的

​ 1.标识符可以由字母、数字、下划线(_)组成,其中数字不能打头

​ 2.标识符不能是Python关键字,但可以包含关键字

​ 3.标识符不能包含空格

赋值:将数据放入变量的过程

name = 1 # name 就是变量名又称标识符,1 是变量名的赋值
print(name)

二、运算
运算中的类型
1. + —- 加法运算
a = 1
b = 2
c = a+b
print(c)

2. — —- 减法运算
a = 3
b = 2
c = a-b
print(c)

3. * —- 乘法运算
a = 3
b = 2
c = a*b
print(c)

4. / —- 除法运算
a = 4
b = 2
c = a/b
print(c)

5. % —- 取余运算
a = 4
b = 3
c = a%b
print(c)
1 # 这里为什么会是 1 呢,因为3不能被整除,还有余数1

a = 4
b = 2
c = a%b
print(c)
0 # 能被整除时,余数就是0呢

6. ** —- 幂运算(平方)
a = 2
b = 2
c = a**b
print(c)
4 # 2平方 2*2=4

a = 2
b = 4
c = a**b
print(c)
16 # 2的4次方 2*2*2*2=16

7. // —- 整除运算 向下取整
a = 3
b = 2
c1 = a/b
c2 = a//b
print(c1)
1.5 # 不能被整除时,会有小数点
print(c2)
1 # 但在整除运算时,会把小数点去掉,只要整数

8. == —- 判断
a = 1
b = 1
print(a == b)
True # True 布尔值 判断 a 是否等于 b 是返回 True

a = 1
b = 2
print(a == b)
False # False 布尔值 判断 a 是否等于 b 不是返回 False

9. round() —- 取整 四舍五入
a = 7
b = 5
c = a/b
print(round(c))
1 # 7/5 = 1.4 不能被整除,舍掉小数0.4 向下取整

a = 7
b = 4
c = a/b
print(round(c))
2 # 7/4 = 1.75 不能被整除,大于0.5 向上取整

a = 1
b = 2
d = 10
c = a/b
e = a/d
print(round(c))
0
print(round(e))
0 # 当分子为1时 不会四舍五入取整,会直接取值为0

10. math —- 函数模块
import math

a = 6.6
b = math.ceil(a)
c = math.floor(a)
print(‘向上取整为’, b)
向上取整为 7 #向上取整数为 7
print(‘向下取整为’, c)
向上取整为 6 #向下取整数为 6
#这里不管小数点后面的大小

网上查找到的一些math函数模块运用方法
d = 3
e = math.sqrt(d)
print(‘平方根的值为’, e)
1.7320508075688772

f = math.exp(d)
print(‘e的N次幂的值为’, f)
20.085536923187668

g = 625
h = 5
i = math.log(g,h)
print(‘对数计算的值为’, i)
4.0

11. decimal —- 模块 精度计算
import decimal # 数值需要传入字符串中,未放入字符串的会同下方一样
a = decimal.Decimal(‘2.2’)
b = decimal.Decimal(‘2.0’)
c = a-b
print(decimal.Decimal(c))
0.2

import decimal #只是用decimal模块来计算时,会精确到小数点后50位数
a = 2.2
b = 2.0
c= a-b
print(decimal.Decimal(c))
0.20000000000000017763568394002504646778106689453125

三、数值类型
1. int —- 整数
1, 2, 3, 4, 5 # 整数类型
1
2. float —- 浮点数
0.5, 1.1, 3.6, 7.7 # 浮点数类型
1
3. bool —- 布尔值
bool: Ture(1) False(0) # 在布尔值中只有两种方式,所对应的就是1和0
1
4. complex —- 复数
complex(1+2j) # 前面的1是实部,后面的2j是虚部,加起来就是一个复数
1
5. type —- 查看数据类型 注:重点 重点 重点 一个常用的类型
print(type(1))
<class ‘int’> # 1 是一个整数类型

print(type(2.5))
<class ‘float’> # 2.5 是一个浮点数类型

print(type(Ture))
<class ‘bool’> # Ture 是一个布尔值类型

print(type(‘1’))
<class ‘srt’> # 1 在这里是一个字符串类型

四、数据类型
1. srt —- 字符串
‘’ —- 单引号
“” —- 双引号
“””””” —- 三引号 在没有变量命名时可作为注释使用
字符串的基本方法: 增 删 改 查
⑴. 增
字符串拼接: + 拼接符
a = ‘风陨’
b = ‘老师’
c = ‘很帅’
d = a + b +c
print(d)
风陨老师很帅 #输出结果

⑵. 删
replace 替换 使用方法 重点 重点 重点
A = ‘adfhkmaehfd’
B = ‘adfhkmaehfdadfhkmaehfd’
print(A.replace(‘d’, ”))
print(B.replace(‘d’, ”))
afhkmaehf
afhkmaehfafhkmaehf #*参数’d’为赋值里待删除参数,第二参数”里无任何对像时在原有的赋值里删除所有待删参数

print(A.replace(‘d’, ‘ ‘))
print(B.replace(‘d’, ‘ ‘))
a fhkmaehf
a fhkmaehf a fhkmaehf # 第二个参数为空格时,赋值里待删除参数替换为空格

print(A.replace(‘d’, ‘帅’, 1))
print(A.replace(‘d’, ‘帅’, 2))
print(B.replace(‘d’, ‘帅’, 1))
print(B.replace(‘d’, ‘帅’, 3))
a帅fhkmaehfd
a帅fhkmaehf帅
a帅fhkmaehfdadfhkmaehfd
a帅fhkmaehf帅a帅fhkmaehfd # 第三个参数为,赋值里待删除替换参数的替换次数

⑶. 改
upper —- 改大写 针对的是字母
a = ‘ddhf’
b = ‘1235’
c = ‘小星星’
print(a.upper())
print(b.upper())
print(c.upper())
DDHF #输出结果:全部改成了大写字母
1235 #输出结果:当是数字时无任何变化
小星星 #输出结果:当是文字时无任何变化

lower —- 改小写 针对的是字母
a = ‘FdHk’
print(a.lower())
fdhk #输出结果:全部改成了小写字母

capitalize —- 首字母大写
a = ‘year’
b = ‘new year’
print(a.capitalize())
print(b.capitalize())
Year
New year #输出结果:首字母改成了大写,第二个单词仍然是小写字母

title —- 每个单词首字母大写
a = ‘year’
b = ‘new year’
print(a.title())
print(b.title())
Year
New Year #输出结果:每个首字母单词改成了大写

split —- 切割
a = ‘new year’
print(a.split(‘e’))
[‘n’, ‘w y’, ‘ar’] #输出结果:显示待切割参数删除,余下切割分离留下的参数

strip —- 去空格
b = ‘ new year ‘
print(b.strip())
print(b.lstrip())
print(b.rstrip())
new year #去掉开头和结尾空格
new year #去掉左边空格
new year #去掉右边空格 因空格无法完全显示出来,自己可以去验证下空格的位置

⑷. 查
索引切片:
下标:位置从*个开始 编号从0开始 特性:左闭右开

先切片,给下标,索引位置

​ a = ‘1 2 3 4 5 6 7 8 9 0 a b c d’

下标编号: 0 1 2 3 4 5 6 7 8 9 10 11 12 13……以此类推

count —- 查次数 重点 重点 重点
a = ‘hhgauehjdiosdhieh’
print(a.count(‘h’))
5 #输出结果:显示待查参数’h’出现5次

a = ‘hhgauehjdiosdhieh’
print(a.count(‘h’, 4, 14))
2 #输出结果:
#*参数待查’h’出现2次,
#第二参数’4’为待查参数下标位置第4位参数’u’开始
#第三参数’14’为待查参数下标位置第14位参数’i’结束

index —- 查下标 左边开始查,查到*个就结束 ,如果找不到就报错 重点 重点 重点
a = ‘gauehjdhhiosdhieh’
print(a.index(‘h’))
4 #输出结果:当参数待查’h’下标位置在赋值中的第4个位置,

a = ‘hhgauehjdiosdhieh’
print(a.index(‘h’, 5, 14))
6 #输出结果:
#*参数为待查参数’h’
#第二参数’5’为待查参数在赋值中下标位置第5位开始
#第三参数’14’为待查参数在赋值中下标位置第14位结束

a = ‘gauejdiosdie’
print(a.index(‘h’))
Traceback (most recent call last):
File “D:/Python/Python_notebook/课堂笔记/学习Python第二课3.26.py”, line 110, in <module>
print(a.index(‘h’))
ValueError: substring not found
#输出结果:当参数待查’h’不在赋值中时就会报错

find —- 查下标 左边开始查,查到*个就结束 ,如果找不到不报错
a = ‘gauejdhiosdhieh’
print(a.find(‘h’))
6 #输出结果:当参数待查’h’下标位置在赋值中的第6个位置,

print(a.find(‘h’, 3, 13))
6 #输出结果:当参数待查’h’下标位置在赋值中的第6个位置,
#*参数为待查参数’h’
#第二参数’3’为待查参数在赋值中下标位置第3位开始
#第三参数’13’为待查参数在赋值中下标位置第13位结束

print(a.find(‘z’))
-1 #输出结果:当参数待查’z’在赋值中没有时,不会报错,但会显示-1结果,这个根计算机系统有关
#在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
#在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
#long(长整型)  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
#注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。(网络查找资料,有待查证,如有问题,请告知,谢谢!)

isdigit —- 判断是否为纯数字
a = ‘1256’
b = ’12ssd’
print(a.isdigit())
True #输出结果:a变量中的赋值是纯数字
print(b.isdigit())
False #输出结果:b变量中的赋值不是纯数字

isalpha —- 判断是否为纯字符
a = ‘1256’
b = ’11ssd’
c = ‘星星*棒’
print(a.isalpha())
False #输出结果:a变量中的赋值不是纯字符
print(b.isalpha())
False #输出结果:b变量中的赋值不是纯字符
print(c.isalpha())
True #输出结果:c变量中的赋值是纯字符

starwith —- 判断开始
a = ’23kjidheyghg’
b = ‘kjidh23eyghg’
print(a.startswith(’23’))
True #输出结果:判断a变量中的赋值’23’是开始的
print(b.startswith(’23’))
False #输出结果:判断b变量中的赋值’23’不是开始的

endswith —- 判断结束
a = ’23kjidheyghg’
b = ‘kjidh23eyggh’
print(a.endswith(‘g’))
True #输出结果:判断a变量中的赋值’g’是结束的
print(b.endswith(‘g’))
False #输出结果:判断b变量中的赋值’g’不是结束的

islower —- 判断全为小写
a = ‘ddhf’
b = ‘AsfD’
c = ‘ASDFH’
print(a.islower())
True #输出结果:判断a变量中的赋值是全部为小写
print(b.islower())
False #输出结果:判断a变量中的赋值不是全部为小写
print(c.islower())
False #输出结果:判断a变量中的赋值不是全部为小写

isupper —- 判断全为大写
a = ‘ddhf’
b = ‘AsfD’
c = ‘ASDFH’
print(a.isupper())
False #输出结果:判断a变量中的赋值不是全部为大写
print(b.isupper())
False #输出结果:判断a变量中的赋值不是全部为大写
print(c.isupper())
True #输出结果:判断a变量中的赋值是全部为大写

《小白初识python之第二章基础语法》

《小白初识python之第二章基础语法》

 

 

一、数据类型
1、标准数据类型
Python3 中有六个标准的数据类型:

Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
2、Number(数字)
Python3 支持 int、float、bool、complex(复数)

在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。

像大多数语言一样,数值类型的赋值和计算都是很直观的。

内置的 type() 函数可以用来查询变量所指的对象类型。

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class ‘int’> <class ‘float’> <class ‘bool’> <class ‘complex’>
二、运算符
1、算术运算符
a:  +、-、*、/

b:  // 取整

c:  % 取余

d: ** 幂运算

>>> 5 + 4 # 加法
9
>>> 4.3 – 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32
2、赋值运算符
简单的赋值运算符: =

加法赋值运算符: +=

减法赋值运算符: -=

乘法赋值运算符: *=

除法赋值运算符: /=

取模赋值运算符:%=

幂赋值运算符: **=

取整除赋值运算符://=

#!/usr/bin/python3

a = 21
b = 10
c = 0

c = a + b
print (“1 、 c 的值为:”, c)

c += a #等价于c = c+a
print (“2 、 c 的值为:”, c)

c *= a #等价于c = c*a
print (“3 、 c 的值为:”, c)

c /= a #等价于c = c/a
print (“4 、 c 的值为:”, c)

c = 2
c %= a #等价于c = c%a
print (“5 、 c 的值为:”, c)

c **= a #等价于 c = c**a
print (“6 、 c 的值为:”, c)

c //= a #等价于c = c//a
print (“7 、c 的值为:”, c)
3、比较运算符
以下假设变量x为10,变量y为20:

大于号: >      返回x是否大于y

小于号:<       返回x是否小于y

大于等于:>=   返回x是否大于等于y

小于等于:<=   返回x是否小于等于y

不等于:  !=  比较两个对象是否不相等

等于:==     比较对象是否相等

注意:一个等号是赋值 ,两个等号是等于(比较两个数是否相等);!= 是不等于

x = 10
y = 20
print(x>y)#返回x是否大于y
print(x<y)#返回x是否小于y
print(x>=y)#返回x是否大于等于y
print(x<=y)#返回x是否小于等于y
print(x!=y)#比较两个对象是否不相等
print(x==y)  #比较对象是否相等
4、逻辑运算符
与: and   (and进行条件判断时,需要条件都成立才返回True,只要有一个不成立就返回False)

或:or       (or:进行条件判断时只要有任何一个条件满足就返回True,都不成立才返回False)

非:  !     (!:进行取反,不满足条件时才返回TRUE)

a = 10
b = 20
print(a==10 and b==10) #返回false
print(a==10 and b==20) #返回true

print(a==10 or b==10) #返回true
print(a==20 or b==10) #返回false

print(a!=20) #返回true
print(a!=10) #返回false
三、字符串
1、字符串定义
Python中的字符串用单引号 ‘ 或双引号 ” 括起来,”””也可以。

2、字符串操作
字符串访问
a、通过索引访问,索引从0开始,空格也占一个索引位置

索引值以 0 为开始值,-1 为从末尾的开始位置。%title插图%num

 

字符串切片
a、遵循左闭右开的原则(取左边下标的值,不取右边下标的值)

b、步长  str[起始索引:结束索引:步长]

str[0:5:2]    表示步长为2,每隔两个进行取值

注意:1、str[::-1]步长为负数表示倒叙

2、起始索引的*对值要小于结束索引的*对值,要不会取不到值

c、字符串的截取的语法格式如下(步长默认为1,可以省略不写):

变量[头下标:尾下标]
d、倒序切片

str1[起始索引:结束索引:步长]

步长: 正数:表示正序切片,负数:倒序切片

正序、倒序 本质是一样的,只是切片的方向不一样,起始索引不一样 ,

切片正序还是倒序只跟步长正负有关系 正序切 用正数 ,倒序切 就用负数 ;

不管是正序切片,还是倒序切片,都有两种写法

1:索引从0开始正序取值;2:索引从-1开始倒序取值

原则:你需要的取值保证在这个范围内

倒序切片起始索引是-1

注意: 正序:索引取值从0开始

倒序:索引取值从-1开始

字符串运算
1、字符串的拼接是用 + 连接起来的

2、重复输出用 *

#!/usr/bin/python3

str = ‘python’

print (str) # 输出字符串
print (str[0:-1]) # 输出*个到倒数第二个的所有字符
print (str[0]) # 输出字符串*个字符
print (str[2:5]) # 输出从第三个开始到第五个的字符
print (str[2:]) # 输出从第三个开始的后的所有字符
print (str * 2) # 输出字符串两次,也可以写成 print (2 * str)
print (str + “TEST”) # 连接字符串
3、字符串转义字符
1、 \n    换行

2、 \  转义字符

3、 r   不进行转义

4、 \\  反斜杠符号

print(“python\hello”)
print(“python\nhello”)
print(r’python\nhello’)
print(‘python\\hello’)
print(r’python\\hello’)
转义字符 描述 实例
\(在行尾时) 续行符
>>> print(“line1 \
… line2 \
… line3”)
line1 line2 line3
>>>
\\ 反斜杠符号
>>> print(“\\”)
\
\’ 单引号
>>> print(‘\”)

\” 双引号
>>> print(“\””)

\a 响铃
>>> print(“\a”)
执行后电脑有响声。
\b 退格(Backspace)
>>> print(“Hello \b World!”)
Hello World!
\000 空
>>> print(“\000”)
>>>
\n 换行
>>> print(“\n”)
>>>
\v 纵向制表符
>>> print(“Hello \v World!”)
Hello
World!
>>>
\t 横向制表符
>>> print(“Hello \t World!”)
Hello      World!
>>>
\r 回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。
>>> print(“Hello\rWorld!”)
World!
>>> print(‘google runoob taobao\r123456’)
123456 runoob taobao
\f 换页
>>> print(“Hello \f World!”)
Hello
World!
>>>
\yyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
>>> print(“\110\145\154\154\157\40\127\157\162\154\144\41”)
Hello World!
\xyy 十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行
>>> print(“\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21”)

 

python

python

***python习题##***
问题
已知列表data中有若干字符串,要求编写程序,对data中的字符串进行过滤,只输出重复字符不超过一半的字符串。

提示:以下是本篇文章正文内容,下面案例可供参考

一、分析
键盘输入字符串后需要使用split()来进行分割操作
需要引入collections中的Counter来方便计数
通过for循环来对字符串计数
通过if语句找出每个字符串中字母重复*多的
字母重复*多的那个字母重复的个数与该字符串长度进行比较决定要不要输出该字符串
二、步骤
1.引入库中方法
代码如下(示例):

from collections import Counter #导入Counter
1
2.键盘输入数据
代码如下(示例):

print(“输入字符串”)
data=input() #手动输入
datalist=data.split(“,”) #分割字符串
data=datalist
print(data) #输出字符串列表

代码
from collections import Counter #导入Counter
print(“输入字符串”)
data=input() #手动输入
datalist=data.split(“,”) #分割字符串
#print(datalist)
data=datalist
#data=[‘Hello’,’World’,’python’,’aaabbb’,’cccdd’]
print(data) #输出字符串列表
for i in data: #for循环
a=Counter(i) #对列表中每一个字符串进行计数
#print(Counter(i))
maxlen=0
for j in a:
#print(key,a[j]) #输出的是字母和个数,例如 “all” 输出 a 1 l 2
if maxlen< a[j]:
maxlen= a[j] #得到字符串中字母重复*多的
#print(maxlen) #输出重复数量
if maxlen <= len(i)/2: #重复*多的字母的重复个数与该字符长度比较,没有超过一半则输出该字符串
print(i)

%title插图%num

python爬虫–验证码、cookie

python爬虫–验证码、cookie

 

爬取基于某些用户的用户信息

点击登陆按钮之后发起post请求

post请求中会携带登陆之前录入的相关登陆信息(用户名,密码,验证码。。。)

Cookie

http/https协议特性:无状态。

没有请求到对应页码数据的原因:

发起第二次基于个人主页的页面请求的时候,服务器端并不知到本次请求是基于登陆状态下的请求。

Cookie:用来让服务器端记录客户端的相关状态

手动处理:

通过抓包工具获取Cookie值,将该值封装到headers中

自动处理:

session会话对象:

1.可以进行请求的发送
2.如果请求过程中产生了cookie,则cookie会被自动存储/携带在该Session对象中
操作步骤:

1.创建一个session对象:session = requests.Session()
2.使用sess ion对象进行模拟登录post请求的发送( cookie就会被存储在session中)
3.session对象对个人主页对应的get请求进行发送(携带了cookie)
古诗文网验证码识别
https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx

代码
Classcjy

import requests
from hashlib import md5

class Chaojiying_Client(object):

def __init__(self, username, password, soft_id):
self.username = username
password = password.encode(‘utf-8’)
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
‘user’: self.username,
‘pass2’: self.password,
‘softid’: self.soft_id,
}
self.headers = {
‘Connection’: ‘Keep-Alive’,
‘User-Agent’: ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)’,
}

def PostPic(self, im, codetype):
“””
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
“””
params = {
‘codetype’: codetype,
}
params.update(self.base_params)
files = {‘userfile’: (‘ccc.jpg’, im)}
r = requests.post(‘http://upload.chaojiying.net/Upload/Processing.php’, data=params, files=files, headers=self.headers)
return r.json()

def ReportError(self, im_id):
“””
im_id:报错题目的图片ID
“””
params = {
‘id’: im_id,
}
params.update(self.base_params)
r = requests.post(‘http://upload.chaojiying.net/Upload/ReportError.php’, data=params, headers=self.headers)
return r.json()

主程序

import requests
from lxml import etree
from Classcjy import Chaojiying_Client

def getCodeText(imgPath):
chaojiying = Chaojiying_Client(‘azb123 ‘, ‘azb123’, ‘914332’) # 用户中心>>软件ID 生成一个替换 96001
im = open(imgPath, ‘rb’).read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
img_code = chaojiying.PostPic(im, 1902)[‘pic_str’]
return img_code

if __name__ == ‘__main__’:
url = ‘https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36’
}
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
img_url = ‘https://so.gushiwen.cn/’+tree.xpath(‘//*[@id=”imgCode”]/@src’)[0]
img_data = requests.get(url=img_url,headers=headers).content
with open(‘./Code.jpg’,’wb’) as fp:
fp.write(img_data)
img_code = getCodeText(‘./Code.jpg’)
print(img_code)

模拟古诗文网登陆
import requests
from lxml import etree

if __name__ == ‘__main__’:
#通过Session对象记录获取cookie
session = requests.Session()
login_url = ‘https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36’
}
#获取登录页面,并建立etree对象
page_text = session.get(url=login_url,headers=headers).text
tree = etree.HTML(page_text)
#使用xpath解析验证码图片地址、动态属性
img_url = ‘https://so.gushiwen.cn/’+tree.xpath(‘//*[@id=”imgCode”]/@src’)[0]
viewstate = tree.xpath(‘//*[@id=”__VIEWSTATE”]/@value’)[0]
viewstategenerator = tree.xpath(‘//*[@id=”__VIEWSTATEGENERATOR”]/@value’)[0]
#将验证码图片存储本地
img_data = session.get(url=img_url,headers=headers).content
with open(‘./Code.jpg’,’wb’) as fp:
fp.write(img_data)
# 提示用户输入验证码
img_code = input(‘请输入验证码:’)
data = {
‘__VIEWSTATE’: viewstate,
‘__VIEWSTATEGENERATOR’:viewstategenerator,
‘from’:’http://so.gushiwen.cn/user/collect.aspx’,
’email’: ‘注册邮箱’,
‘pwd’: ‘密码’,
‘code’: img_code,
‘denglu’: ‘登录’,
}

#post请求模拟登陆
index = session.post(url=login_url, headers=headers, data=data)
detial_url = ‘https://so.gushiwen.cn/user/collectbei.aspx?sort=t’
detial_text = session.get(url=detial_url,headers=headers).text
with open(‘index.html’, ‘w’, encoding=’utf-8′) as fp:
fp.write(detial_text)

效果图

%title插图%num

蓝桥杯集锦02(python3)

试题 基础练习 查找整数
问题描述
给出一个包含n个整数的数列,问整数a在数列中的*次出现是第几个。

输入格式
*行包含一个整数n。

第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

第三行包含一个整数a,为待查找的数。

输出格式
如果a在数列中出现了,输出它*次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2

count = input()
lst = list(map(int,input().split()))
num_index = int(input())
a = 0

dics = {}

for i,num in enumerate(lst,start=1):
dics[num] = i
if num_index in dics:
a = 1
print(dics[num_index])
break

if a == 0:
print(‘-1’)

试题 基础练习 数列特征
问题描述
给出n个数,找出这n个数的*大值,*小值,和。

输入格式
*行为整数n,表示数的个数。

第二行有n个数,为给定的n个数,每个数的*对值都小于10000。

输出格式
输出三行,每行一个整数。*行表示这些数中的*大值,第二行表示这些数中的*小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11

count = int(input())
lst = list(map(int,input().split()))
maxnum = max(lst)
minnum = min(lst)
sums = sum(lst)
print(maxnum)
print(minnum)
print(sums)

问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

00000

00001

00010

00011

00100

请按从小到大的顺序输出这32种01串。

输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>

[print(“{0:05b}”.format(i)) for i in range(32)]
1
试题 基础练习 杨辉三角形
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

下面给出了杨辉三角形的前4行:

1

1 1

1 2 1

1 3 3 1

给出n,输出它的前n行。

输入格式
输入包含一个数n。

输出格式
输出杨辉三角形的前n行。每一行从这一行的*个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1

count = int(input())
n = 0
line = [1]

while n != count:
print(” “.join(str(i) for i in line))
line = [1] + [line[i] + line[i + 1] for i in range(len(line)-1)] + [1]
n +=1

试题 基础练习 特殊的数字
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行

for num in range(153,410):
temp = str(num)
if num == int(temp[0])**3 + int(temp[1])**3 + int(temp[2])**3:
print(num)

试题 基础练习 特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899

num = int(input())
sums = 0

for i in range(10000,1000000):
if str(i) == str(i)[::-1]:
sums = 0
for a in str(i):
sums += int(a)
if sums == num:
print(i)

num = int(input())
sums = 0

for i in range(10000,1000000):
str_num = str(i)
if str_num == str_num[::-1]:
sums = 0
if len(str_num) == 5:
sums += (int(str_num[0])+int(str_num[1]))*2 + int(str_num[2])
if sums == num:
print(i)
if len(str_num) == 6:
sums += (int(str_num[0]) + int(str_num[1]) + int(str_num[2])) * 2
if sums == num:
print(i)

n = int(input())
my_list = []
for i in range(100,1000) :
# 如果该数字是6位数
if sum(map(int,str(i) + str(i)[::-1])) == n :
my_list.append(str(i) + str(i)[::-1])

# 如果该数字是5位数
if sum(map(int,str(i) + str(i)[:2][::-1])) == n :
my_list.append(str(i) + str(i)[:2][::-1])
for i in sorted(map(int,my_list)) : # 排序
print(i)

洛谷的题:混合牛奶

P1208 [USACO1.3]混合牛奶 Mixing Milk
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助 Marry 乳业找到*优的牛奶采购方案。

Marry 乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天 Marry 乳业可以从奶农手中采购到小于或者等于奶农*大产量的整数数量的牛奶。

给出 Marry 乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的*小花费。

注:每天所有奶农的总产量大于 Marry 乳业的需求量。

输入输出样例
输入 #1复制
100 5
5 20
9 40
3 10
8 80
6 30
输出 #1复制
630

s1 = list(map(int,input().split()))
num = s1[0]
count = 0
a = [0 for i in range(s1[1])]

for i in range(s1[1]):
a[i] = list(map(int,input().split()))
a.sort()

for i in range(s1[1]):
if num > 0:
if num < a[i][1]:
count = count + num * a[i][0]
num = 0
else:
count = count + a[i][1] * a[i][0]
num = num-a[i][1]
print(count)

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速