1.pop3协议解析及代码实现
2.Tornado之ioloop源码学习
3.c++队列的问题,学习图时在成员函数使用了pop(),但是无效,请问是什么原因?
4.jsp Poup弹出框
5.RocketMQ 5.0: POP 消费模式 原理详解 & 源码解析
6.python代ç 大å
¨ç®åï¼
pop3协议解析及代码实现
POP3,作为电子邮件接收的最新标准协议,是网页源码jsonTCP/IP协议族中的客户端/服务器通信协议,由RFC规范。它允许客户端通过两个默认端口与服务器交互,执行一系列文本命令来获取邮件。 客户端向POP3服务器发送的命令包括:USER: 用于登录,用户名和密码以明文形式传输。
PASS: 输入密码,成功后进入处理阶段。
STAT: 显示邮件数量和大小,提供邮件状态信息。
LIST: 列出邮件摘要,显示每封邮件的大小和编号。
RETR: 下载邮件内容,服务器会显示成功响应和邮件大小。
QUIT: 结束会话,完成通信。
例如,通过Wireshark抓包,可以看到服务器对每个命令的响应,通常以"+OK"或"-ERR"开头,noip源码具体信息如邮件数量、大小或错误原因。 在实际操作中,如telnet到POP3服务器(如"telnet pop..com "),在输入相应的命令后,会得到服务器的确认或错误反馈。重要的是,密码在通信过程中是明文传输的,应谨慎处理。 要获取完整的源代码和报文示例,可以关注微信公众号程序猿编码,或直接联系作者获取更多信息(微信号c)。Tornado之ioloop源码学习
在闲暇之余,我研究了tornado的源码,并计划以系列文章的形式记录关键部分,旨在总结学习心得并可能对使用该框架的朋友有所帮助。如有疏漏,欢迎私信或评论指正。
在研究开源项目时,我通常选择原始版本的tornadoweb/tornado,因为我认为其核心功能通常在1.0.0版本就已经完备,后续的改进主要集中在细节,而非重大功能。代码风格的typeorm 源码统一性可能会因不同开发者提交的代码而有所差异。
在阅读之前,我建议您对Linux的IO模型有所了解,特别是epoll和kqueue(在Mac或BSD系统中)的概念。Python 2.6及以上版本的select库提供了相关实现,但2.6以下版本则需要依赖tornado对底层epoll的封装。以下代码正是处理这个选择过程的。
接下来,让我们深入探讨tornado的内部。首先,我们关注的是底层的 epoll 实现,如 GitHub 上的代码。它提供了常规的epoll功能,熟悉该技术的开发者一眼就能看懂。
然后是 IOLoop 类,我们从头开始分析。其中定义了 epoll 中的关键事件,如 _EPOLLIN 和 _EPOLLOUT,分别表示文件描述符的读写就绪状态。
在代码中,_set_close_exec 方法的作用是解决子进程 fork 后可能遇到的问题。当子进程仅被 fork 并执行 exec 时,原有的文件描述符可能会消失,这个方法确保在 exec 时关闭这些描述符。
r,AndroidPath源码 w = os.pipe() 则创建了一个管道,用于高效地中断 IOLoop 循环。当管道另一端写入数据时,会阻塞 poll() 方法,从而停止循环。
此外,IOLoop 通过 signal 模块监控 block 时间,当超过设定时间,将执行预先定义的 handler。信号 SIGALRM 和 ITIMER_REAL 通常一起使用。
至关重要的 start 方法下,有几个辅助方法。_callbacks 存储了将在下一次 IOLoop 循环前调用的函数,保证跨线程安全。相比之下,_timeouts 保存了执行函数和截止时间的对应关系,允许延迟执行。
关于 poll_timeout 的设置,它决定了 IOLoop 等待就绪事件的时间。默认值为 0.2 秒,如果存在可以执行的回调,会调整为尽快执行。最后,IOLoop 通过 poll 函数获取就绪事件,使用 signal.ITIMER_REAL 进行计时,signal 源码处理后利用 pop 方法而非遍历,避免映射关系在处理过程中变化。
以上就是对 IOLoop 的基本介绍,期待你的反馈和指正。
c++队列的问题,学习图时在成员函数使用了pop(),但是无效,请问是什么原因?
问题在于你的queue<int> adj(int v) 函数返回的是一个queue的拷贝,而不是queue本身。
改成
queue <int>& adj(int v) //获取和顶点v相邻的所有顶点
{
return adjacent[v];
}
全部源码如下:
#include<iostream>
#include<queue>
using namespace std;
class Graph {
public:
Graph(int v) //创建一个包含v个顶点但不包含边的图
{
this -> adjacent = new queue < int > [v];
this -> V = v;
this -> E = 0;
}
int Vnum() //获取顶点的数量
{
return this -> V;
}
int Enum() //获取边的数量
{
return this -> E;
}
void addEdge(int v, int w)
//向图中增加一条边 v-w
{
this -> adjacent[v].push(w);
this -> adjacent[w].push(v);
this -> E++;
}
queue <int>& adj(int v) //获取和顶点v相邻的所有顶点
{
return adjacent[v];
}
private:
int V; //顶点数量
int E; //顶点边数量
queue < int > * adjacent;
};
class DepthFirstSearch {
public:
DepthFirstSearch(Graph G, int s) { //构件深度优先搜索对象,利用深度优先搜索找出G图中s顶点的所有相同顶点
this -> marked = new bool[G.Vnum()];
for (int i = 0; i < G.Vnum();
++i) {
marked[i] = false;
}
this -> N = 0;
dfs(G, s);
}
void dfs(Graph G, int v) //利用深度优先搜索找出G中v顶点的所有相通顶点
{
marked[v] = true;
int w = G.adj(v).front();
while (!G.adj(v).empty()) //找到v队列里的内容
{
if (!marked[w]) {
dfs(G, w);
}
cout << "队列大小:" << G.adj(v).size() << endl;
G.adj(v).pop();
cout << "队列删除后的大小:" << G.adj(v).size() << endl;
if (G.adj(v).empty() == 1) {
break;
}
w = G.adj(v).front();
}
this -> N++;
//N加1 的位置放在当前节点变true的时候
}
bool mark(int w) //判断w与s是否相通
{
return marked[w];
}
int count() {
return N;
}
private: bool * marked; //索引代表顶点,值表示当前顶点是否已经被搜索
int N; //记录有多少个顶点与s顶点相同
};
int main() {
Graph g();
g.addEdge(0, 6);
g.addEdge(0, 2);
g.addEdge(0, 1);
g.addEdge(0, 6);
g.addEdge(5, 3);
g.addEdge(5, 4);
g.addEdge(3, 4);
g.addEdge(4, 6);
g.addEdge(7, 8);
g.addEdge(9, );
g.addEdge(9, );
g.addEdge(, );
g.addEdge(9, );
DepthFirstSearch * DFS = new DepthFirstSearch(g, 0);
int num = DFS -> count();
cout << num << endl;
return 0;
}
jsp Poup弹出框
其实代码非常简单:
<SCRIPT LANGUAGE=javascript>
<!--
window.open ('page.html')
-->
</SCRIPT>
因为这是一段javascript代码,所以它们应该放在<SCRIPT LANGUAGE=javascript>标签和</script>之间。<!-- 和 -->是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。
window.open ('page.html') 用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。
用单引号和双引号都可以,只是不要混用。
这一段代码可以加入HTML的任意位置,<head>和</head>之间可以,<body>间</body>也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。
2、经过设置后的弹出窗口
下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。
<SCRIPT LANGUAGE=javascript>
<!--
window.open ('page.html', 'newwindow', 'height=, width=, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no')
//写成一行
-->
</SCRIPT>
参数解释:
<SCRIPT LANGUAGE=javascript> js脚本开始;
window.open 弹出新窗口的命令;
'page.html' 弹出窗口的文件名;
'newwindow' 弹出窗口的名字(不是文件名),非必须,可用空''代替;
height= 窗口高度;
width= 窗口宽度;
top=0 窗口距离屏幕上方的象素值;
left=0 窗口距离屏幕左侧的象素值;
toolbar=no 是否显示工具栏,yes为显示;
menubar,scrollbars 表示菜单栏和滚动栏。
resizable=no 是否允许改变窗口大小,yes为允许;
location=no 是否显示地址栏,yes为允许;
status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;
</SCRIPT> js脚本结束
3、用函数控制弹出窗口
下面是一个完整的代码。
<html>
<head>
<script LANGUAGE=javascript>
<!--
function openwin() {
window.open (page.html, newwindow, height=, width=, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no)
//写成一行
}
//-->
</script>
</head>
<body onload=openwin()>
..任意的页面内容...
</body>
</html>
这里定义了一个函数openwin(),函数内容就是打开一个窗口。在调用它之前没有任何用途。
怎么调用呢?
方法一:<body onload=openwin()> 浏览器读页面时弹出窗口;
方法二:<body onunload=openwin()> 浏览器离开页面时弹出窗口;
方法三:用一个连接调用:
<a href=注意:使用的“ 方法四:用一个按钮调用:
<input type=button onclick=openwin() value=打开窗口>
4、同时弹出2个窗口
对源代码稍微改动一下:
<script LANGUAGE=javascript>
<!--
function openwin() {
window.open (page.html, newwindow, height=, width=, top=0, left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no)
//写成一行
window.open (page2.html, newwindow2, height=, width=, top=, left=,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no)
//写成一行
}
//-->
</script>
为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要相互覆盖即可。最后用上面说过的四种方法调用即可。
注意:2个窗口的name(newwindows和newwindow2)不要相同,或者干脆全部为空。OK?
5、主窗口打开文件1.htm,同时弹出小窗口page.html
如下代码加入主窗口<head>区:
<script language=javascript>
<!--
function openwin() {
window.open(page.html,,width=,height=)
}
//-->
</script>
加入<body>区:
<a href=1.htm onclick=openwin()>open</a>即可。
6、弹出的窗口之定时关闭控制
下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段代码加入弹出的页面(注意是加入到page.html的HTML中,可不是主页面中,否则...),让它秒后自动关闭是不是更酷了?
首先,将如下代码加入page.html文件的<head>区:
<script language=javascript>
function closeit() {
setTimeout(self.close(),) //毫秒
}
</script>
然后,再用<body onload=closeit()> 这一句话代替page.html中原有的<BODY>这一句就可以了。(这一句话千万不要忘记写啊!这一句的作用是调用关闭窗口的代码,秒钟后就自行关闭该窗口。)
7、在弹出窗口中加上一个关闭按钮
<FORM>
<INPUT TYPE='BUTTON' value='关闭' onClick='window.close()'>
</FORM>
呵呵,现在更加完美了!
8、内包含的弹出窗口-一个页面两个窗口
上面的例子都包含两个窗口,一个是主窗口,另一个是弹出的小窗口。
通过下面的例子,你可以在一个页面内完成上面的效果。
<html>
<head>
<SCRIPT LANGUAGE=javascript>
function openwin()
{
OpenWindow=window.open(, newwin, height=, width=,toolbar=no,scrollbars=+scroll+,menubar=no);
//写成一行
OpenWindow.document.write(<TITLE>例子</TITLE>)
OpenWindow.document.write(<BODY BGCOLOR=OpenWindow.document.write(<h1>Hello!</h1>)
OpenWindow.document.write(New window opened!)
OpenWindow.document.write(</BODY>)
OpenWindow.document.write(</HTML>)
OpenWindow.document.close()
}
</SCRIPT>
</head>
<body>
<a href=<input type=button onclick=openwin() value=打开窗口>
</body>
</html>
看看 OpenWindow.document.write()里面的代码不就是标准的HTML吗?只要按照格式写更多的行即可。千万注意多一个标签或少一个标签就会出现错误。记得用OpenWindow.document.close()结束啊。
9、终极应用--弹出的窗口之Cookie控制
回想一下,上面的弹出窗口虽然酷,但是有一点小毛病(沉浸在喜悦之中,一定没有发现吧?)比如你将上面的脚本放在一个需要频繁经过的页面里(例如首页),那么每次刷新这个页面,窗口都会弹出一次,是不是非常烦人?:-(
有解决的办法吗?Yes! ;-) Follow me.
我们使用cookie来控制一下就可以了。
首先,将如下代码加入主页面HTML的<HEAD>区:
<script>
function openwin(){
window.open(page.html,,width=,height=)
}
function get_cookie(Name) {
var search = Name + =
var returnvalue = ;
if (documents.cookie.length > 0) {
offset = documents.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = documents.cookie.indexOf(;, offset);
if (end == -1)
end = documents.cookie.length;
returnvalue=unescape(documents.cookie.substring(offset, end))
}
}
return returnvalue;
}
function loadpopup(){
if (get_cookie('popped')==''){
openwin()
documents.cookie=popped=yes
}
}
</script>
然后,用<body onload=loadpopup()>(注意不是openwin而是loadpop啊!)替换主页面中原有的<BODY>这一句即可。你可以试着刷新一下这个页面或重新进入该页面,窗口再也不会弹出了
RocketMQ 5.0: POP 消费模式 原理详解 & 源码解析
RocketMQ 5.0 引入 Pop 消费模式,用于解决 Push 消费模式存在的痛点。Pop 消费模式将客户端的重平衡逻辑迁移至 Broker 端,使得消息消费过程更加高效,避免消息堆积和横向扩展能力受限的问题。引入轻量化客户端后,通过 gRPC 封装 Pop 消费接口,实现了多语言支持,无需在客户端实现重平衡逻辑。
Pop 消费模式的原理在于客户端仅需发送 Pop 请求,由 Broker 端根据请求分配消息队列并返回消息。这样可以实现多客户端同时消费同一队列,避免单一客户端挂起导致消息堆积,同时也消除了频繁重平衡导致的消息积压问题。
Pop 消费流程涉及消息拉取、不可见时间管理、消费失败处理和消息重试等关键环节。消息拉取时,系统会为一批消息生成 CheckPoint,并在 Broker 内存中保存,以便与 ACK 消息匹配。消息不可见时间机制确保在规定时间内未被 ACK 的消息将被重试。消费失败时,客户端通过修改消息不可见时间来调整重试策略。当消费用时超过预设时间,Broker 也会将消息放入重试队列。通过定时消息,Broker 可以提前消费重试队列中的消息,与 ACK 消息匹配,实现高效消息处理。
在 Broker 端,重平衡逻辑也进行了优化。Pop 模式的重平衡允许多个消费者同时消费同一队列,通过 popShareQueueNum 参数配置额外的负载获取队列次数。Pop 消息处理涉及从队列中 POP 消息、生成 CheckPoint 用于匹配 ACK 消息、以及存储 CheckPoint 与 Ack 消息匹配。Broker 端还通过 PopBufferMergeService 线程实现内存与磁盘中的 CheckPoint 和 Ack 消息匹配,以及消息重试处理。
源码解析部分涉及 Broker 端的重平衡逻辑、Pop 消息处理、Ack 消息处理、CheckPoint 与 Ack 消息匹配逻辑等关键组件的实现细节,这些细节展示了 RocketMQ 5.0 如何通过优化消费模式和流程设计,提升消息消费的效率和稳定性。
python代ç å¤§å ¨ç®åï¼
pythonæ趣çç¼ç¨ä»£ç
class?Point:
row=0col=0def?__init__(self,?row,?col):self.row=row
self.col=col
def?copy(self):return?Point(row=self.row,?col=self.col)
#åå§æ¡æ¶
import?pygame
import?random
#åå§å
pygame.init()
W=
H=
ROW=
COL=
size=(W,H)
window=pygame.display.set_mode(size)
pygame.display.set_caption('è´ªåè')
bg_color=(,,)
snake_color=(,,)
head=Point(row=int(ROW/2),?col=int(COL/2))
head_color=(0,,)
snakes=[
Point(row=head.row,?col=head.col+1),Point(row=head.row,?col=head.col+2),Point(row=head.row,?col=head.col+3)]
#çæé£ç©
def?gen_food():
while?1:pos=Point(row=random.randint(0,ROW-1),?col=random.randint(0,COL-1))
#
is_coll=False
#æ¯å¦è·è碰ä¸äº
if?head.row==pos.row?and?head.col==pos.col:
is_coll=True#è身å
for?snake?in?snakes:
if?snake.row==pos.row?and?snake.col==pos.col:is_coll=True
break
if?not?is_coll:
breakreturn?pos#å®ä¹åæ
food=gen_food()
food_color=(,,0)
direct='left'#left,right,up,down
#
def?rect(point,?color):
cell_width=W/COLcell_height=H/ROWleft=point.col*cell_widthtop=point.row*cell_heightpygame.draw.rect(window,?color,
(left,?top,?cell_width,?cell_height)
)pass#游æ循ç¯
quit=True
clock=pygame.time.Clock()
while?quit:
#å¤çäºä»¶for?event?in?pygame.event.get():if?event.type==pygame.QUIT:
quit=Falseelif?event.type==pygame.KEYDOWN:
if?event.key==?or?event.key==:if?direct=='left'?or?direct=='right':
direct='up'elif?event.key==?or?event.key==:if?direct?==?'left'?or?direct?==?'right':
direct='down'elif?event.key==?or?event.key==:if?direct?==?'up'?or?direct?==?'down':
direct='left'elif?event.key==?or?event.key==:if?direct?==?'up'?or?direct?==?'down':
direct='right'#åä¸è¥¿eat=(head.row==food.row?and?head.col==food.col)#éæ°äº§çé£ç©if?eat:food?=?gen_food()
#å¤ç身å#1.æåæ¥ç头ï¼æå ¥å°snakesç头ä¸snakes.insert(0,?head.copy())#2.æsnakesçæåä¸ä¸ªå æif?not?eat:snakes.pop()
#移å¨if?direct=='left':head.col-=1
elif?direct=='right':head.col+=1
elif?direct=='up':head.row-=1
elif?direct=='down':head.row+=1
#æ£æµdead=False#1.æå¢if?head.col0?or?head.row0?or?head.col=COL?or?head.row=ROW:dead=True
#2.æèªå·±for?snake?in?snakes:if?head.col==snake.col?and?head.row==snake.row:
dead=Truebreakif?dead:print('æ»äº')
quit=False
#渲æââç»åºæ¥#èæ¯pygame.draw.rect(window,?bg_color,?(0,0,W,H))#è头for?snake?in?snakes:rect(snake,?snake_color)
rect(head,?head_color)rect(food,?food_color)#pygame.display.flip()#设置帧é¢ï¼é度ï¼clock.tick(8)#æ¶å°¾å·¥ä½
è¿æ¯ä¸ä¸ªç®æçè´ªåèç代ç ï¼è½ç¶ç»æç®åï¼ä½æ¯è¯¥æçåè½é½æ¯å®æ´çï¼å¯ç©æ§ä¹ä¸é
æ±pythonæ°æ®æ åå代ç ï¼ä½¿ç¨pythonæ ååæ°æ®ç代ç å¦ä¸ï¼
fromsklearnimportpreprocessing
importnumpyasnp
X=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])
X_scaled=preprocessing.scale(X)
print(X_scaled)
pythonå£è¯æ 代ç ç®å```python#Pythonå£è¯æ 代ç foriinrange(1,6):forjinrange(1,i+1):print('*',end='')print('\n')```
æå±ï¼å¦ææ³æ¹åæ çå½¢ç¶ï¼å¯ä»¥å¨ä»£ç ä¸æ·»å æ´å¤çæ§å¶åæ°ï¼å¦å¨æ¯ä¸è¡ä¸æ·»å ä¸åçç©ºæ ¼æ°ï¼ä½¿å¾æ çå½¢ç¶ä¸ä¸æ ·ãåæ¶å¯ä»¥éè¿æ·»å HTMLæ ç¾ï¼ä½¿ç¨CSSæ ·å¼æ¥æ¹åå£è¯æ çé¢è²ãèæ¯åæåççã
个æç®python代ç ï¼æ¿èµ°å³ç¨
Helloï¼å¤§å®¶å¥½ï¼ææ¯ç¨åºæ±ªå°æ~
è½ç¶pythonæ¯ä¸ä¸ªæå ¥é¨çè¯è¨ï¼ä½æ¯å¾å¤äººä¾ç¶è¿æ¯ä¼é®å°åºæä¹æ ·å¦Pythonææå¿«ï¼çæ¡å½ç¶æ¯å®æåç§å°é¡¹ç®ï¼åªæèªå·±å»æ³ä¸åï¼æè®°å¾ä½è§åãæ¬æåçæ¯ä¸ªæç®ä»»å¡ï¼åå¦è å¯ä»¥å°è¯çèªå·±å®ç°ï¼æ¬æåæ ·ä¹æ¯æ®µä»£ç ï¼Pythonå¼åè ä¹å¯ä»¥ççæ¯ä¸æ¯æ没æ³å°çç¨æ³ã
以ä¸æ¹æ³å¯ä»¥æ£æ¥ç»å®å表æ¯ä¸æ¯åå¨éå¤å ç´ ï¼å®ä¼ä½¿ç¨set()å½æ°æ¥ç§»é¤ææéå¤å ç´ ã
ç»å®å ·ä½ç大å°ï¼å®ä¹ä¸ä¸ªå½æ°ä»¥æç §è¿ä¸ªå¤§å°åå²å表ã
è¿ä¸ªæ¹æ³å¯ä»¥å°å¸å°åçå¼å»æï¼ä¾å¦ï¼Falseï¼Noneï¼0ï¼ââï¼ï¼å®ä½¿ç¨filter()å½æ°ã
æ们常ç¨For循ç¯æ¥éåæ个å表ï¼åæ ·æ们ä¹è½æ举å表çç´¢å¼ä¸å¼ã
å¦ä¸ä»£ç 段å¯ä»¥å°æå 好çæ对å表解å¼æ两ç»ä¸åçå ç»ã
该æ¹æ³å°éè¿éå½çæ¹å¼å°å表çåµå¥å±å¼ä¸ºå个å表ã
该æ¹æ³å°è¿å第ä¸ä¸ªå表çå ç´ ï¼ä¸ä¸å¨ç¬¬äºä¸ªå表å ãå¦æåæ¶è¦åé¦ç¬¬äºä¸ªå表ç¬æçå ç´ ï¼è¿éè¦å ä¸å¥set_b.difference(set_a)ã
å¦ä¸ä»£ç åå¯ä»¥ç¨æ¥è®¡ç®æ§è¡ç¹å®ä»£ç æè±è´¹çæ¶é´ã
该ç®æ³ä¼æä¹±å表å ç´ ç顺åºï¼å®ä¸»è¦ä¼éè¿Fisher-Yatesç®æ³å¯¹æ°å表è¿è¡æåºï¼
ä¸éè¦é¢å¤çæä½å°±è½äº¤æ¢ä¸¤ä¸ªåéçå¼ã
以ä¸ï¼æ¯æç®åå举çå个pythonæç®ä»£ç ï¼æ¿èµ°å³ç¨ï¼å¸æå¯¹ä½ ææ帮å©ï¼
pythonæ°æ代ç æåªäºï¼pythonæ°æ代ç æå¦ä¸ï¼
defnot_emptyï¼sï¼ã
returnsandlenï¼sãstripï¼ï¼ï¼0ã
#returnsandsãstripï¼ï¼ã
#å¦æç´æ¥ååsãstripï¼ï¼é£ä¹så¦ææ¯Noneï¼ä¼æ¥éï¼å 为None没æstripæ¹æ³ã
#å¦æsæ¯Noneï¼é£ä¹Noneandä»»ä½å¼é½æ¯Falseï¼ç´æ¥è¿åfalseã
#å¦æséNoneï¼é£ä¹å¤å®sãtripï¼ï¼æ¯å¦ä¸ºç©ºã
ç¸å ³ç®ä»ã
Python解éå¨æäºæ©å±ï¼å¯ä»¥ä½¿ç¨CæC++ï¼æè å ¶ä»å¯ä»¥éè¿Cè°ç¨çè¯è¨ï¼æ©å±æ°çåè½åæ°æ®ç±»åãPythonä¹å¯ç¨äºå¯å®å¶å软件ä¸çæ©å±ç¨åºè¯è¨ãPython丰å¯çæ ååºï¼æä¾äºéç¨äºå个主è¦ç³»ç»å¹³å°çæºç ææºå¨ç ã
å¹´æï¼è¯è¨æµè¡ææ°çç¼è¯å¨Tiobeå°Pythonå å为æå欢è¿çç¼ç¨è¯è¨ï¼å¹´æ¥é¦æ¬¡å°å ¶ç½®äºJavaãCåJavaScriptä¹ä¸ã
è´¨æ°è¡¨ä»£ç ï¼è´¨æ°è¡¨ä»£ç æ¯æç¨ç¼ç¨è¯è¨çæä¸ç³»åè´¨æ°ç代ç ãè´¨æ°æ¯æåªè½è¢«èªèº«å1æ´é¤çèªç¶æ°ï¼å¦2ï¼3ï¼5ï¼7çã
ä¸åçç¼ç¨è¯è¨æä¸åçå®ç°æ¹æ³ï¼æå¯ä»¥ç»ä½ ä¸äºåèã以ä¸æ¯ä¸äºç½ä¸æç´¢å°çè´¨æ°è¡¨ä»£ç 示ä¾ï¼
Cè¯è¨ï¼
#includestdio.hintmain(){ ?inti,j;?printf("2\n");?for(i=3;i=;i+=2)//ä»3å¼å§éåå¥æ°
{ for(j=3;ji;j++)//å¤ææ¯å¦è½è¢«å°äºå®çå¥æ°æ´é¤{ ?if(i%j==0)//å¦æè½æ´é¤ï¼åè·³åºå¾ªç¯
break;
}if(j==i)//å¦æ循ç¯æ£å¸¸ç»æï¼å说ææ¯è´¨æ°ï¼æå°åºæ¥
printf("%d\n",i);}?return0;}
Pythonï¼
#!/usr/bin/python#-*-coding:UTF-8-*-
#è¾åºæå®èå´å çç´ æ°
#ç¨æ·è¾å ¥æ°æ®lower=int(input("è¾å ¥åºé´æå°å¼:"))
upper=int(input("è¾å ¥åºé´æ大å¼:"))
fornuminrange(lower,upper+1):?#ç´ æ°å¤§äº1
ifnum1:foriinrange(2,num):?if(num%i)==0:breakelse:?print(num)