小编ano*_*oir的帖子

不能在Python 3.1中使用unichr

我一直在浏览Python Cookbook(第2版),以了解如何处理字符串和字符.

我想尝试将数字转换为其Unicode等价物.所以我尝试使用名为' unichr '内置函数,根据Cookbook,它是这样的:

>>> print repr(unichr(8224))
Run Code Online (Sandbox Code Playgroud)

...并将输出:

u'\u2020'
Run Code Online (Sandbox Code Playgroud)

但是,代码失败了.我认为它与print有关(因为Python 3使用print()而不是print""),但这也没有用.我尝试了几种代码变体,但仍然失败了.最后,我只输入了一个简单的行:

unichr(10000)
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,无论我在上述函数中添加了什么值,这个错误信息都会不断弹出:

 NameError: name 'unichr' is not defined
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?是否有一些我应该导入的特定模块?

python string unicode

52
推荐指数
5
解决办法
4万
查看次数

Python递归函数错误:"超出最大递归深度"

我使用以下代码解决了Euler项目的问题10,该代码通过强力实施:

def isPrime(n):

    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def primeList(n):

    primes = []

    for i in range(2,n):
        if isPrime(i):
            primes.append(i)

    return primes


def sumPrimes(primelist):
    prime_sum = sum(primelist)
    return prime_sum


print (sumPrimes(primeList(2000000)))
Run Code Online (Sandbox Code Playgroud)

这三个功能的工作原理如下:

  1. isPrime检查一个数字是否是素数;
  2. primeList返回一个列表,其中包含一组限制为"n"的特定范围的素数,并且;
  3. sumPrimes总结列表中所有数字的值.(不需要最后一个功能,但我喜欢它的清晰度,特别是像我这样的初学者.)

然后我编写了一个新函数primeListRec,它与primeList完全相同,以帮助我更好地理解递归:

def primeListRec(i, n):
    primes = []
    #print i


    if (i != n):
        primes.extend(primeListRec(i+1,n))

    if (isPrime(i)):
        primes.append(i)
        return primes


    return primes
Run Code Online (Sandbox Code Playgroud)

上面的递归函数有效,但仅适用于非常小的值,如'500'.当我输入'1000'时,该功能导致我的程序崩溃.当我输入类似'2000'的值时,Python给了我这个:

RuntimeError:超出最大递归深度.

我的递归函数出了什么问题?或者是否有一些特定的方法来避免递归限制?

python recursion

22
推荐指数
1
解决办法
7万
查看次数

构造函数(Python)之外的方法中的实例变量 - 为什么以及如何?

我的问题涉及在类构造函数之外的方法中初始化的实例变量.这适用于Python.

我先说出我的理解:

  1. 类可以定义构造函数,也可以定义其他方法.
  2. 实例变量通常在构造函数中定义/初始化.
  3. 但是实例变量也可以在构造函数之外定义/初始化,例如在同一类的其他方法中.
  4. (2)和(3)的一个例子 - 参见下面的Cat类中的self.meowself.roar:

    class Cat():
    
        def __init__(self):
            self.meow = "Meow!"
        def meow_bigger(self):
            self.roar = "Roar!"
    
    Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 为什么在构造函数中初始化实例变量是最佳实践?

  2. 如果实例变量在构造函数以外的方法中定期初始化,可能会出现一般/特定的混乱?(例如,在他的编程Python中读过Mark Lutz的Tkinter指南,我认为这很好,我注意到用于保存PhotoImage对象/引用的实例变量在其他方法中初始化,而不是在构造函数中初始化.它似乎没有工作问题,但从长远来看,这种做法是否会引起问题?)

  3. 在哪些情况下,在其他方法中而不是在构造函数中初始化实例变量会更好


  1. 据我所知,实例变量不是在创建类对象时存在,而是实例化类对象之后存在.继续我上面的代码,我证明了这一点:

    >> c = Cat() 
    >> c.meow
    'Meow!'
    >> c.roar
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    AttributeError: 'Cat' object has no attribute 'roar'
    >>> c.meow_bigger()
    >>> c.roar
    'Roar!'
    
    Run Code Online (Sandbox Code Playgroud)

    原样:

    • 我一开始无法访问实例变量(c.roar).
    • 但是,在我调用实例方法c.meow_bigger()一次后,我突然能够访问实例变量c.roar …

python constructor class instance-variables

6
推荐指数
2
解决办法
5526
查看次数

d3.create() 返回带有 .node() 的元素,但不显示在浏览器中

  1. 我试图让 D3.js 使用d3.create()生成矩形元素。它不工作/不显示。

  2. 首先,我创建一个矩形()函数,它返回一个元素:

    function rectangle() {
    
        _el = d3.create("rect")
            .attr("stroke", "black")
            .attr("fill", "black")
            .attr("stroke-width", "10px")
            .attr("x", 0)
            .attr("y", 0)
            .attr("width", 300)
            .attr("height", 200);
    
        return _el
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后,我创建一个 SVG 选择,并在其中附加矩形().node()的实例:

    
    const SVG_WIDTH = 1000;
    const SVG_HEIGHT = 1000;
    
    svg = d3.select("body").append("svg")
        .attr("width", SVG_WIDTH)
        .attr("height", SVG_HEIGHT)
        .attr("id", "generated")
    
    svg.append(
        // () => rectangle().node()
        function () { return rectangle().node() }
    )
    
    Run Code Online (Sandbox Code Playgroud)
  4. 然而我的浏览器(Google Chrome)中没有任何视觉输出。

  5. 然而,当我查看 DOM(通过 Chrome 的“元素”选项卡)时,D3 生成了正确的 SVG/矩形代码:

    <svg width="1000" height="1000" id="generated">
        <rect stroke="black" fill="black" stroke-width="10px" …
    Run Code Online (Sandbox Code Playgroud)

javascript svg d3.js

3
推荐指数
1
解决办法
1114
查看次数

打印出日文(中文)字符

我读日语,想尝试处理一些日文文本.我尝试使用Python 3:

for i in range(1,65535):
    print(chr(i), end='')
Run Code Online (Sandbox Code Playgroud)

然后Python给了我很多错误.什么地方出了错?

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Traceback (most recent call last):
  File "C:\test\char.py", line 11, in <module>
    print(chr(i), end='')
  File "C:\Python31\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x80' in position 0: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

我的理解是chr函数继续将Unicode数字转换为相应的日语字符.如果是这样,为什么不输出日文字符?为什么它会在罗马字符列表的末尾崩溃?

如果我错误地认为Unicode集是为了迎合非西方语言而设计的,那么请纠正我.


编辑:

我尝试了John Machin在IDLE中提出的3行,输出工作正常!

在此之前,我一直在使用程序员的记事本,工具设置为捕获python.exe编译器的输出.也许这就是错误发生的原因.

但是,对于大多数其他事情,输出被正确捕获; 那么为什么它在这个过程中特别失败?即为什么代码在IDLE Python Shell中工作,而不是通过Programmer的Notepad输出捕获?无论接口如何,输出都不应该相同吗?

python unicode

2
推荐指数
1
解决办法
1万
查看次数

如何使用 ripgrep/fzf 列出匹配搜索的源文件名

问题

我需要搜索文本文件的目录,其中也搜索文件的内容。我目前正在使用 ripgrep 和 fzf 来执行此操作 - 问题是每个文件的每一行都会输出搜索。我需要每个搜索匹配项也指示其源文件名/文件路径。

例子:

我们有以下两个文件:

示例.md

某事 某事 foo 某事

某事 某事 foo 某事

某事 某事 foo 某事

某事 某事 foo 某事

有用的例子.md

某事 某事 foo 某事

我们rg . | fzf在包含它们的目录中运行,写入 foo,并得到以下结果:

有用的示例.md:某事某事foo某事

example.md:某事某事foo某事

example.md:某事某事foo某事

example.md:某事某事foo某事

example.md:某事某事foo某事

这里的问题是 example.md 的每一行都是一个搜索结果。它应该是引用其文件的匹配项。它应该看起来像这样:

有用的示例.md:某事某事foo某事

example.md:某事某事foo某事

…………………………………………………………………………………………………………………………………………………………………………

…………………………………………………………………………………………………………………………………………………………………………

…………………………………………………………………………………………………………………………………………………………………………

fuzzy-search fzf

2
推荐指数
1
解决办法
2845
查看次数

滚动条从 Tkinter 画布中消失,并拒绝坚持侧包装

  1. 我正在尝试将滚动条附加到 Tkinter 画布。
  2. 为了测试滚动条,我动态生成了 100 个“Hello World”标签,并将它们打包在一个内容保持框架中。

我的代码失败了。问题:

  1. 滚动条甚至不出现。
  2. 相反,内容框架会扩展到 100 个包装标签的全高。
  3. 有趣的是,如果我self.frame_for_content.pack() self.scrollbar.pack(). (我无法理解为什么会这样,但滚动条仍然不起作用或遵守side打包行为。)

我曾尝试将 Brian Oakley 的一些建议纳入scroll regionbbox,但无济于事。

我已将代码减少到最低限度,但无法通过。将不胜感激的帮助。

import tkinter as tk
import tkinter.ttk as ttk

class TestGUI(tk.Tk):
    def __init__(self):
        super().__init__()

        self.canvas = tk.Canvas(self)
        self.frame_for_content = tk.Frame(self.canvas)

        self.canvas_frame = self.canvas.create_window((0,0), window=self.frame_for_content, anchor=tk.NW)

        self.scrollbar = tk.Scrollbar(self.canvas, orient=tk.VERTICAL, command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.scrollbar.set)

        self.frame_for_content.pack()
        self.canvas.pack(side=tk.LEFT)
        self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

        for i in range(100):
            tk.Label(self.frame_for_content, text="Hello World - " + str(i)).pack()

        self.update()
        self.canvas.config(scrollregion=self.canvas.bbox(tk.ALL))

TestGUI().mainloop()
Run Code Online (Sandbox Code Playgroud)

python canvas tkinter

1
推荐指数
1
解决办法
644
查看次数