私信  •  关注

Matt

Matt 最近回复了
10 月前
回复了 Matt 创建的主题 » 在文本文件Python中搜索大写单词的数量

假设我们有一个示例文件 doc.txt 内容如下:

这是一个识别大写单词的测试文件。 我创建这个示例是因为问题的需求可能会有所不同。 例如,像SQL这样的首字母缩略词应该算作大写吗? 如果是:这将导致九个。

如果要计算大写(也称为标题大小写)单词,但排除所有大写单词(如首字母缩略词),可以执行以下操作:

def count_capital_words(filename):                                               
    count = 0                                                                    
    with open(filename, 'r') as fp:                                              
        for line in fp:                                                          
            for word in line.split():                                            
                if word.istitle():                                               
                    print(word)                                                  
                    count += 1                                                   
    return count


print(count_capital_words('doc.txt'))  # 8

filter(None, ...) 功能将确保 word IndexError 如果是这样的话:

def count_capital_words(filename):                                               
    count = 0                                                                    
    with open(filename, 'r') as fp:                                              
        for line in fp:                                                          
            for word in filter(None, line.split()):                              
                if word[0].isupper():                                            
                    count += 1                                                   
    return count


print(count_capital_words('doc.txt'))  # 9

from itertools import chain                                                      


def get_words(filename):                                                         
    with open(filename, 'r') as fp:                                              
        words = chain.from_iterable(line.split() for line in fp)                 
        yield from words 
9 月前
回复了 Matt 创建的主题 » 将数组传递给jQuery每个函数以重新格式化数据

不能使用短的C语法推送到数组 (list[] = val) . 您将寻找一个名为 push

var x = []; // declare an array
var myObject = { a: 1, b: 2 }; // Defining an example object
var mySecondObject = { a: 3, b: 5 }; // another sample object
x.push(myObject);
x.push(mySecondObject);

console.log(x);

输出:

[
    { a: 1, b: 2 },
    { a: 3, b: 5 }
]

如果我们使用您提供的代码:

var parsed = [];
var count = 0;
$.each(data, function(k, outer) {
  count += 1;
  parsed[count].push(k);
  $.each(outer, function(i, inner) {
    parsed[count].push(i);
    });
});

如果要允许push确定基于0的自动索引,则不一定需要count变量。

1 年前
回复了 Matt 创建的主题 » Python中的8皇后解决方案

谢谢大家的意见。我发现问题出在我的diagsOK()函数的实现上。我仍然不确定这个函数哪里出错了,但是我在如何正确地编写这个函数上做了一些思考,并提出了下面的解决方案。这个问题肯定有一个更简单、更优雅的解决方案,但我想用我知道的方法来解决它。我已经测试了下面的解决方案,它是有效的。我很高兴:-)

# Matt Lozier's 8 Queens Solution in Python.
#
# Thanks to Eilon Lipton (elipton@microsoft.com) for his logic 
# in implementing the addQueen() function, which I adapted to Python
# from his C implementation.

# This 2D array (or in Python lists of lists) is one solution

board = [[0, 0, 0, 0, 0, 1, 0, 0],
         [0, 0, 0, 1, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 1, 0],
         [1, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 1],
         [0, 1, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 1, 0, 0, 0],
         [0, 0, 1, 0, 0, 0, 0, 0]]

def clearBoard(board):
    for i in range(8):
        for j in range(8):
            board[i][j] = 0

def printBoard(board):
    for i in range(8):
        for j in range(8):
            if board[i][j] == 1:
                print("Q", end="")
            else:
                print("X", end="")
        print("")
    print("")

def checkColsOK(board):
    for i in range(8):
        sum = 0
        for j in range(8):
            sum += board[j][i]
        if sum > 1:
            return 0




def checkRowsOK(board):
    for i in range(8):
        sum = 0
        for j in range (8):
            sum += board[i][j]
        if sum > 1:
            return 0


def checkDiagsOK(board):

# left to right, bottom up
    counter = 8
    sum = 0

    for i in range(8):
        x = i
        y = 0
        for j in range(counter):
            #print(board[y][x], end="")
            sum += board[y][x]
            x += 1
            y +=1
        counter -= 1

        #print("")
        #print("There are ", end="")
        #print(sum, end="")
        #print(" queens in this diagonal.")
        if sum > 1:
            return 0
        sum = 0


# right to left, top down
    counter = 8
    sum = 0

    for i in range(8):
        x = i
        y = 0
        for j in range(counter):
            #print(board[x][y], end="")
            sum += board[x][y]
            x += 1
            y +=1
        counter -= 1

        #print("")
        #print("There are ", end="")
        #print(sum, end="")
        #print(" queens in this diagonal.")

        if sum > 1:
            return 0
        sum = 0


# right to left, bottom up
    counter = 8
    sum = 0

    for i in reversed(range(8)):
        x = i
        y = 0
        for j in range(counter):
            #print(board[x][y], end="")
            sum += board[x][y]
            x -= 1
            y += 1
        counter -= 1

        #print("")
        #print("There are ", end="")
        #print(sum, end="")
        #print(" queens in this diagonal.")

        if sum > 1:
            return 0
        sum = 0

# left to right, top down
    counter = 8
    sum = 0

    for i in range(8):
        x = 7
        y = i
        for j in range(counter):
            #print(board[x][y], end="")
            sum += board[x][y]
            x -= 1
            y += 1
        counter -= 1

        #print("")
        #print("There are ", end="")
        #print(sum, end="")
        #print(" queens in this diagonal.")

        if sum > 1:
            return 0
        sum = 0

def addQueen(board, col):

    row = 0

    for row in range(8):
        board[row][col] = 1
        if (checkRowsOK(board) != 0 and checkDiagsOK(board) != 0):
            if col == 7:
                printBoard(board)
            else:
                addQueen(board, col + 1)
        board[row][col] = 0


clearBoard(board)
addQueen(board, 0)

#if checkDiagsOK(board) != 0:
#    print("Diagonals are OK!")

#if checkRowsOK(board) != 0:
#    print("Rows are OK!")

#if checkRowsOK(board) != 0:
#    print ("Cols are OK!")

#printBoard(board)

#clearBoard(board)

#printBoard(board)
1 年前
回复了 Matt 创建的主题 » python trim帮助变量(单括号和双括号)

你应该使用python regexp . 下面是python解释器的一个例子。试试看,如果符合你的需要就接受。

>>> import re
>>> s = '<img src="//d30v2pzvrfyzpo.cloudfront.net/uk/images/restaurants/65115.gif" itemprop="image" alt="Gourmet Sushi" width="100" height="100" onerror="this.onerror = null;this.src = \'//dy3erx8o0a6nh.cloudfront.net/images/serp/serp_default_logo.svg\';">'
>>> pattern = re.compile(r'<img\s+src="//([^"]+)".*')
>>> for i in pattern.findall(s):
...     print(i)

d30v2pzvrfyzpo.cloudfront.net/uk/images/restaurants/65115.gif
1 年前
回复了 Matt 创建的主题 » 如何设置redis请求的节点超时

这不是写得很清楚,但是当你用命令(如set,hset等)和时间限制调用它时,它会返回一个函数。用这些值调用这个返回函数。我不知道客户是从哪里来的,我想你应该把它放在范围内。这不是很好的代码,我建议你把你写的东西贴出来,然后问如何用它来实现你想要的。

1 年前
回复了 Matt 创建的主题 » dynamodb:使用python扫描vs查询

查询的一个明显问题是 and 而不是 & 使用“and”基本上就是删除查询的第一部分。

1 年前
回复了 Matt 创建的主题 » 使用git存储库签入/签出visual studion团队项目

根据你的描述,有可能 Team Found Version Control (TFVC) 在azure devops中是一个更好的版本控制选项。可能是 check out options 更像你所熟悉的。

在创建新项目或添加新的回购项目时,可以选择此版本控制选项。

1 年前
回复了 Matt 创建的主题 » 使用rabbitmq集成nodejs和python

https://www.npmjs.com/package/miko 是nameko的rpc协议的nodejs客户端。

您可能还想考虑使用grpc,而不是nameko附带的amqp rpc实现。这里有一个很棒的writeup和示例项目: https://itnext.io/grpc-apis-with-nameko-11bbd9492225

2 年前
回复了 Matt 创建的主题 » 在python3中如何将单词向后翻转?在这种情况下[副本]

递归方法:

def reverse(s): return s[0] if len(s)==1 else s[len(s)-1] + reverse(s[0:len(s)-1])

例子:

print(reverse("Hello!"))    #!olleH
1 年前
回复了 Matt 创建的主题 » 对单独出现的元素应用jquery函数

目前我无法测试,但我认为这可以满足您的需要:

function showDiv() {
    if(counter == 0 ) { counter ++; return; }
    $('#whatsapp').find('#bubble-' + counter + ':not(.ignoreMe)').addClass('ignoreMe').show().jGravity({ 
        target: 'div.bubble',
        ignoreClass: 'ignoreMe',
        weight: 25, 
        depth: 5, 
        drag: true 
    });
    counter ++

它添加了一个类 ignoreMe 对于每个项,然后使用 :not 伪类。

1 年前
回复了 Matt 创建的主题 » 如何删除Git中已存在的目标路径?

不需要使用命令行。就把它扔了 gittest gitsub 垃圾桶里的文件夹。他们 .git 回购协议就在里面,会被扔掉。请注意,您丢失了所有的工作,您正在丢弃工作目录,但听起来这是您想要做的,如果您已经推到Bitbucket,您总是可以克隆一个新的工作目录,并得到您的工作。

1 年前
回复了 Matt 创建的主题 » 无法在python中使用imap连接gmail/outlook

第一步是检查imap.lasterrortext属性的内容,看看发生了什么。例如:

#  Connect to an IMAP server.
#  Use TLS
imap.put_Ssl(True)
imap.put_Port(993)
success = imap.Connect("imap.someMailServer.com")
if (success != True):
    print(imap.lastErrorText())
    sys.exit()

我的猜测是防火墙(软件或硬件)正在阻止出站连接。

另一种解决方案是使用gmail rest api,如以下示例所示: https://www.example-code.com/python/gmail.asp http端口(443)不太可能被防火墙阻止。您可以下载到Chilkat电子邮件对象中,然后以与通过IMAP下载完全相同的方式保存附件。

1 年前
回复了 Matt 创建的主题 » 在Jupyter笔记本中运行Tornado服务器

第1部分:让我们得到嵌套龙卷风

要找到所需的信息,您必须遵循以下crumbtrails,首先查看的发行说明中描述的内容 IPython 7 它将特别指出有关异步和等待部分的更多信息。 documentation ,到 this discussion , 建议使用 nest_asyncio .

关键在于:

  • a)要么欺骗python运行两个嵌套的事件循环。(Nest-Asyncio做什么)
  • b)您在已经存在的EventLoop上调度协程。(我不知道如何处理龙卷风)

我很确定你知道这些,但我相信其他读者会感激的。

不幸的是,除非您像在jupyterhub上那样控制部署,并且可以将这些行添加到自动加载的ipython初创公司脚本中,否则无法使其对用户完全透明。但我认为以下内容足够简单。

import nest_asyncio
nest_asyncio.apply()


# rest of your tornado setup and start code.

第2部分:Gotcha同步代码块EventLoop。

上一节只关注能够运行Tornado应用程序。但请注意 任何同步代码都将阻塞事件循环 ;因此在运行时 print(requests.get("http://localhost:8000")) 当您阻止EventLoop时,服务器似乎不工作,只有当等待EventLoop重新启动的代码完成执行时,它才会重新启动…(理解这是留给读者的练习)。你要么发行 print(requests.get(“http://localhost:8000”)) 从另一个内核 或者,使用aiohtp。

下面介绍如何以与请求类似的方式使用aiohtp。

import aiohttp
session =  aiohttp.ClientSession()
await session.get('http://localhost:8889')

在这种情况下,由于aiohtp是非阻塞的,所以事情看起来会正常工作。在这里,您可以看到一些额外的ipython魔力,我们可以自动检测异步代码并在当前的eventlocop上运行它。

一个很酷的练习可以是 request.get 在另一个内核的循环中,并运行 sleep(5) 在运行Tornado的内核中,看到我们停止处理请求…

第3部分:免责声明和其他途径:

这是 相当棘手 我建议不要在生产中使用,并警告您的用户这不是推荐的操作方法。

这并不能完全解决您的问题,您需要运行一些不在主线程中的东西,我不确定这是否可能。

你也可以试着和其他的循环跑者一起玩 trio curio ;它们可能允许您做默认情况下不能用Asyncio做的事情,比如嵌套,但是 here be dragoons . 我强烈推荐三重奏和 multiple blog posts around its creation 尤其是当你在教异步的时候。

享受,希望这有帮助,并请报告错误,以及确实有效的事情。