簡體   English   中英

我怎么能永遠重復這個?

[英]How can I make this repeat forever?

我有這個地形發生器,在我看來非常有效。 我無法讓它永遠打印出來。 這是我現有的代碼:

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作為地形生成器。

好吧,如果你想在字符之間延遲,你就不能使用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)

你不能在你的打印功能中有一個循環,你必須把你的打印功能放在一個循環中,所以例如:

while True:
    print random.choice(['#','o','~','*']),

您可以嘗試這個代碼的簡化版本:

import random, sys, time
while True: sys.stdout.write(random.choice('#o~*') + ' '); time.sleep(0.05)

這是一種新方法。

滾動你自己

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

帶隨機符號的無限迭代器:

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="")

你可以使用發電機:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM