社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Blckknght

Blckknght 最近创建的主题
Blckknght 最近回复了
2 年前
回复了 Blckknght 创建的主题 » 最具python风格的方式是使用function获取用户输入

如果你被分配到 num1 num2 仅在函数中,您不再需要将它们作为参数传递。实际上,您不能将它们作为参数传递,因为函数外部的代码不知道为它们输入了什么值。这就是为什么你会得到一个例外,名字 num1 num2 它们是不受约束的。

只需删除这些参数:

def add():                    # get rid of parameters here
    num1=int(input('num1: '))
    num2=int(input('num2: '))
    return num1+num2
add()                         # and don't try to pass any arguments

至于首选的是什么,可能您希望在示例1上进行一些修改。如果希望函数收集用户输入, 让它成为一个单独的功能 .用户输入收集功能可以调用 add 函数的值,就像您的全局代码一样,不会污染全局名称空间。

def add(num1,num2):            # this is unchanged from the early examples
    return num1+num2

def do_stuff():                # put the user input in another function
    num1=int(input('num1: '))
    num2=int(input('num2: '))
    print(add(num1,num2))      # or return here, or do whatever makes sense
3 年前
回复了 Blckknght 创建的主题 » 在本地安装python包并不总是有效的

当你把这些库放进你的 lib 文件夹并按您的方式导入它们,您正在更改它们的包名。不再是了 colorama 顶级套餐,现在 lib.colorama .有些库可能对此没有问题,但对于其他库,它们希望能够使用正常名称导入自己的代码。如果 colorama.some_submodule 试图 import colorama ,它会失败。

重要的是要意识到 from lib import colorama 不会改变你的生活方式 科洛拉玛 随处可见。它只会更改本地名称空间。包裹还在 lib。科洛拉玛 ,我们刚把它和名字绑在一起 科洛拉玛 在当前模块中。

正如JonSG在评论中所建议的,更好的解决方案是 解放党 将文件夹放入Python搜索路径中,以便 进口色拉马 将找到具有正常名称的包。修改 sys.path 这是一种方法,另一种是 PYTHONPATH 环境变量(可能不适合当前问题,但有时在其他情况下有用)。

2 年前
回复了 Blckknght 创建的主题 » Python-计算从object1(x和y)到object2(x和y)的角度

这是应用程序的经典用例 math.atan2 功能:

from math import atan2, degrees

def AngleFromObject1ToObject2InDegrees(object1, object2):
    return degrees(atan2(object2.y - object1.y, object2.x - object1.x))

请注意,这使用了沿正x轴(向右)从零开始并逆时针增加的角度的数学约定。如果你愿意 0 要使它们上升并顺时针增加(如磁罗盘刻度盘上的轴承),可以将参数转换为 atan2 你也可以考虑把你的角度放在弧度上,这样就方便多了(因为其他三角函数都是弧度的)。

3 年前
回复了 Blckknght 创建的主题 » 在Python中,如何使用方法参数作为新对象的名称?

可以 做你想做的,但这是一个非常糟糕的主意。

首先,让我们解释一下怎么做。你会想使用 globals() builtin,它会向您返回一个字典,其中包含当前模块中定义的所有全局变量。如果编辑字典,全局变量将被更改。在您的情况下,您希望添加 Stock 对象作为由 ticker 名称这看起来像:

def buyStock(self, ticker, price, amount):
    #Add stock to portfolio
    self.stockPortfolio.append(ticker)
    globals()[ticker] = Stock(ticker, price, amount)  # make a global variable

现在你知道了 怎样 要做到这一点,以下是您可能不应该这么做的原因。像这样使用全局名称空间的问题是,您不能(轻松地)编写期望给定股票代码变量存在的代码。像你这样的台词 print(AMZN.amount) 如果你买了另一只股票就会失败。同样,如果你再购买一批亚马逊股票,你会覆盖 AMZN 使用新的 股票 对象,并且将无法了解您第一次购买的金额,以及您为此支付的价格。

更好的办法是将股票对象放入数据结构中,比如投资组合中已有的列表。这样你就不需要为它使用特定的名称,如果需要的话,你可以用相同的名称购买多个股票。我会用这样的方式:

def buyStock(self, ticker, price, amount):
    #Add stock to portfolio
    self.stockPortfolio.append(Stock(ticker, price, amount))

你可以用打印机打印最近购买的金额 print(p.stockPortfolio[-1].amount) ,或者写一个循环,打印出所有股票(可能还有它们的数量或价值),而不是总是得到第一个。

5 年前
回复了 Blckknght 创建的主题 » Python 2 while循环在第二次迭代中失败

您似乎正在覆盖 rmsd 函数的返回值。在循环中使用其他变量名,则不会出现此问题:

while True:
    # ...

    rmsd_value = rmsd(...)   # don't do rmsd = ... here, or you overwrite the function!

    # ...
5 年前
回复了 Blckknght 创建的主题 » 在python中用父类方法重写init

从调用中获取的代理对象 super 只是用来定位 with_two_legs 要调用的方法(因为您没有在 Human ,你可以用 self.with_two_legs 同样的结果)。

作为 wim 评论道,你的替代构造函数 有两条腿 不起作用,因为 班级休息 Liskov substitution principle 通过使用不同的构造函数签名。即使你能让代码调用 Animal 为了构建你的实例,你会遇到问题,因为你最终会得到一个 动物 实例而不是 一个(所以其他方法 ,如果您写了一些,将无法使用)。

注意,这种情况并不少见,许多Python子类的构造函数签名与其父类不同。但这确实意味着不能像使用 classmethod 试图构造实例的。你需要避免这些情况。

在这种情况下,最好使用 legs 对…的争论 动物 构造器。它可以默认为 2 如果没有通过替代编号,则为支腿。那你就不需要 类方法 ,并且在重写时不会遇到问题 __init__ :

class Animal:
    def __init__(self, name, legs=2): # legs is now optional, defaults to 2
        self.legs = legs
        print(name)

class Human(Animal):
    def __init__(self):
        super().__init__('Human')

john = Human()
6 年前
回复了 Blckknght 创建的主题 » 需要帮助理解python的递归

您当前的代码正在返回解决方案的数目。在这两个基本情况之后,有两个递归调用。在第一个递归调用中,我们检查存在多少个解决方案。 X 不包括 current**N . 第二个递归检查如果我们存在多少解 包括 当前**N .

如果要返回实际的解决方案本身(作为元组列表),则需要稍微更改代码。

从基本情况开始。如果 pw > X ,没有解决方案 current 这么大,所以我们应该返回一个空列表。如果 pw == X ,然后我们找到了一个解决方案,应该返回一个单元素列表,其中包含单元素元组 (current,) (注意后面的逗号,这是使括号形成元组所必需的,而不仅仅是为了操作顺序)。

递归的情况也需要更复杂一些。两个调用都将返回列表,我们希望合并这些列表。对于第一个递归,我们可以按原样使用返回的列表。对于第二个,我们需要添加 现在的 值到每个元组的开头。我建议使用一个生成器表达式(如果您想将列表与 + 而不是使用 list.extend ).

def powerSum(X, N, current = 1):
    pw = pow(current, N)
    if pw > X:
        return []
    elif pw == X:
        return [(current,)]
    else:
        result = powerSum(X, N, current+1)
        result.extend((current,) + tup for tup in powerSum(X-pw, N, current+1))
        return result