我有这个地形发生器,在我看来非常有效。我无法让它永远打印出来。这是我现有的代码:
import random
print(' '.join([random.choice(['#','o','~','*']) for i in range(10000)]))
我试图这样做,但我得到了SyntaxError
。
import random
print(' '.join([random.choice(['#','o','~','*']) while True]))
我怎样才能让它永远重复?我还想在每个角色的打印之间延迟0.05秒。如果你能保持最多两行,这很酷。如果你不能,那没关系。谢谢! 注意:这是关于gamedev的不,我恰好使用.join
作为地形生成器。
答案 0 :(得分:10)
好吧,如果你想在字符之间有延迟,你就不能使用join()
,因为这会给你一个字符串而不是“字符生成器”。
如果您计划使用“无限”生成器,则出于同样的原因,您不能使用join()
。
这个怎么样:
import random
import sys
import time
while True:
print(random.choice("#o~*"), end="", flush=True) # Python 3.3 and up
time.sleep(0.05)
答案 1 :(得分:3)
您的打印功能内部不能有循环,必须将打印功能放在循环中,例如:
while True:
print random.choice(['#','o','~','*']),
答案 2 :(得分:3)
您可以尝试这段代码的简化版本:
import random, sys, time
while True: sys.stdout.write(random.choice('#o~*') + ' '); time.sleep(0.05)
答案 3 :(得分:3)
这是一种新方法。
import random
import time
class GenerateRandomChar(object):
def __init__(self, charlist):
self.charlist = charlist
def __next__(self):
return random.choice(self.charlist)
terrain_tiles = GenerateRandomChar("#o~*")
while True:
print(next(terrain_tiles), end='')
time.sleep(0.05)
此外,如果您正在构建地图,您可能需要考虑以下内容:
class Map(list):
def __init__(self, terrain_tiles, WIDTH=12, HEIGHT=12):
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
self.terrain_tiles = GenerateRandomChar(terrain_tiles)
for y in range(self.HEIGHT):
self.append([next(self.terrain_tiles) for x in range(self.WIDTH)])
def __str__(self):
return "\n".join([" ".join([tile for tile in row]) for row in self])
>>> map_ = Map("~o#*")
>>> print(map_)
o o o o o o ~ ~ # ~ ~ ~
# # # o o # o # o # * #
~ o # * ~ # o # * ~ # ~
o * o o o * # o # o # *
# * o # # # * o ~ * # #
# ~ o ~ * # # ~ o o ~ ~
~ * # # o ~ o * # # ~ o
# o * o o * o * ~ ~ o *
# # * * ~ ~ ~ * # * # o
o o ~ ~ # * ~ ~ * ~ * o
~ * ~ ~ * # * * ~ # o #
* o ~ # ~ # ~ ~ o o o o
答案 4 :(得分:2)
带有随机符号的无限迭代器:
import itertools
it = (random.choice(['#','o','~','*']) for i in itertools.repeat(""))
正如有些人评论的那样,join()
不会帮助你,因为它会在返回之前生成整个字符串。你可以尝试(Python 3):
[print(char, end="") for char in it] # not such a good idea
或
for char in it: print(char, end="")
答案 5 :(得分:2)
您可以使用生成器:
from itertools import repeat
import random
from time import sleep
import sys
gen = (random.choice(['#','o','~','*']) for _ in repeat(None))
for x in gen:
print x,
sys.stdout.flush()
sleep(0.05)