小编Geo*_*eil的帖子

如何实现条件字符串格式化?

我一直在用Python编写基于文本的游戏,我遇到过一个实例,我希望根据一组条件对字符串进行不同的格式化.

具体来说,我想显示描述房间内物品的文字.我希望在房间的描述中显示这个,当且仅当有问题的物品对象位于房间对象的物品清单中时.它的设置方式,我觉得简单地连接基于条件的字符串将不会按我的意愿输出,并且最好为每种情况设置不同的字符串.

我的问题是,是否有基于布尔条件结果格式化字符串的pythonic方法?我可以使用for循环结构,但我想知道是否有更简单的东西,类似于生成器表达式.

我正在寻找类似于此的东西,以字符串形式

num = [x for x in xrange(1,100) if x % 10 == 0]
Run Code Online (Sandbox Code Playgroud)

作为我的意思的一般例子:

print "At least, that's what %s told me." %("he" if gender == "male", else: "she")
Run Code Online (Sandbox Code Playgroud)

我意识到这个例子不是有效的Python,但它总体上显示了我正在寻找的东西.我想知道布尔字符串格式是否有任何有效的表达式,类似于上面的.在搜索了一下之后,我无法找到任何与条件字符串格式有关的内容.我确实在格式字符串上找到了几个帖子,但这不是我想要的.

如果确实存在类似的东西,那将非常有用.我也对可能提出的任何替代方法持开放态度.提前感谢您提供的任何帮助.

python string-formatting

64
推荐指数
3
解决办法
5万
查看次数

Python中的Euler 5项目 - 如何优化我的解决方案?

我最近一直在研究Python中的Project Euler问题.我对Python很陌生,作为程序员还是有点新鲜.

无论如何,我遇到了与速度相关的问题,为问题#5编写了解决方案.问题是,

"2520是可以除以1到10之间的每个数字而没有任何余数的最小数字.可以被1到20的所有数字整除的最小正数是多少?"

我已经检查了一些,我无法找到任何与Python有关的问题.有一些已完成的脚本,但我想避免完全查看其他代码,如果可能的话,而不是想改进我自己的代码.

我编写的代码成功运行2520的示例和范围1到10,并且应该可以直接修改以处理问题.但是,在运行它时,我没有得到答案.据推测,这是一个非常高的数字,代码不够快.打印正在检查的当前号码似乎支持这一点,达到数百万而没有得到答案.

代码,在它的当前实现如下:

rangemax = 20
def div_check(n):
    for i in xrange(11,rangemax+1):
        if n % i == 0:
            continue
        else:
            return False
    return True

if __name__ == '__main__':
   num = 2
   while not div_check(num):
       print num
       num += 2
   print num
Run Code Online (Sandbox Code Playgroud)

我已经做了一些改变,我认为应该有助于提高速度.首先,对于一个数字可以被所有数字1到20整除,它必须是偶数,因为只有偶数可以被2整除.因此,我可以增加2而不是1.此外,虽然我没有想到我自己,我发现有人指出一个可以被11到20整除的数字可以被1到10整除.(没有检查那个,但似乎合理)

但代码仍然不够快.我可以进行哪些优化(程序化或数学)来使这段代码运行得更快?

提前感谢任何可以提供帮助的人.

python

9
推荐指数
3
解决办法
4万
查看次数

在numpy中围绕2D数组的边缘包裹切片

假设我在Python中使用numpy并且我有一个任意大小的二维数组.为方便起见,假设我有一个5 x 5阵列.具体数字对我的问题不是特别重要; 他们只是一个例子.

a = numpy.arrange(25).reshape(5,5)
Run Code Online (Sandbox Code Playgroud)

这会产生:

[[0, 1, 2, 3, 4 ],
 [5, 6, 7, 8, 9 ],
 [10,11,12,13,14],
 [15,16,17,18,19],
 [20,21,22,23,24]]
Run Code Online (Sandbox Code Playgroud)

现在,假设我想拍摄这个数组的2D切片.在正常情况下,这很容易.为了让细胞紧邻2,2,我只需使用a[1:4,1,4]哪种产生预期的效果

[[6, 7,   8 ],
 [11, 12, 13],
 [16, 17, 18]]
Run Code Online (Sandbox Code Playgroud)

但是,如果我想采取一个包裹阵列边缘的切片呢?例如a[-1:2,-1:2]会产生:

[24, 20, 21],
[4, 0,  1 ],
[9, 5,  6 ] 
Run Code Online (Sandbox Code Playgroud)

这在边缘无关紧要的几种情况下是有用的,例如围绕屏幕的游戏图形.我意识到这可以通过很多if语句和边界检查来完成,但我想知道是否有更简洁,更惯用的方法来实现这一点.

环顾四周,我找到了几个答案:https://stackoverflow.com/questions/17739543/wrapping-around-slices-in-python-numpy适用于一维数组,但我还没弄清楚如何将此逻辑应用于2D切片.

基本上,问题是:如何在numpy中包围数组边缘的2D数组?

提前感谢任何可以提供帮助的人.

python numpy

9
推荐指数
2
解决办法
4339
查看次数

python中简单数据存储的最佳格式

作为一个相对较新的程序员,我曾多次遇到这样的情况,即从外部源读取和汇编程序数据而不是将其写入代码中是有益的.当存在大量相同类型的对象时,大多数情况都是如此.在这种情况下,对象定义会迅速占用代码中的大量空间,并增加了对可读性的不必要的障碍.

作为一个例子,我一直在研究基于文本的RPG,它有大量的房间和项目可以跟踪.即使是少数项目和房间也会导致大量的对象创建代码.

我认为在这种情况下使用某种格式的外部数据存储,从文件中读取会更容易.在这样的文件中,项目和房间将按名称和属性存储,以便它们可以相对容易地解析为对象.

什么格式最适合这个?我觉得像SQL这样的成熟数据库会给相当轻松的脚本增加不必要的膨胀.另一方面,通过外部应用程序或其他python脚本,编辑此数据的简单方法很重要.在更轻松的事情上,我听到的最少提到的是XML,JSON和YAML.

从我所看到的,XML似乎不是最好的选择,因为许多人似乎发现它复杂而且难以有效地工作.

JSON和YAML似乎可能有用,但我不知道从外部编辑是多么容易.在这种情况下,速度不是主要关注点.虽然更快的实现当然是可取的,但它并不是我可以使用的限制因素.

我在这里和谷歌都环顾四周,虽然我已经看过很多关于这个话题,但我找不到任何对我有用的东西.像JSON或YAML这样的格式是否足够,或者我会更好地使用完整的数据库?

python

5
推荐指数
2
解决办法
3027
查看次数

标签 统计

python ×4

numpy ×1

string-formatting ×1