2017-03-07 82 views
0
from random import randint 
roomTypes = ['T|', 'M|', 'W|', 'H|', 'C|'] 
dungeonLayout = '' 
for i in range(1,10): 
    dungeonLayout = dungeonLayout.join(roomTypes[randint(0, 4)]) 
print('Room types are Temple |T|, Abandoned Military Base |M|, Wizard\'s Abodes |W|, House |H|, Church |C|') 
print('_____________________________') 
print('|' + dungeonLayout) 
print('_____________________________')` 

我的代碼(如上圖所示)是爲了返回房間隨機列表,這類作品的,然而相反的客房被格式化這樣的:。加入()返回意外串

|W|H| 

它打印:

|WH|| 

我很好奇,爲什麼這是和在想,如果我用join命令錯誤,或者我應該完全使用不同的命令。

+0

會有什麼' 'W |'。加入( 'H |')'返回? –

+0

@PeterWood我希望它返回W | H |,但它返回WH ||,即時通訊使用python 3.5.2,如果這有助於 – Harvey

+0

@哈維給出了什麼'str.join',這似乎不是一個合理的期望。請注意,例如'','。join('foo')'是'f,o,o''。 – jonrsharpe

回答

4

,因爲這條線的它 -

for i in range(1,10): 
    dungeonLayout = dungeonLayout.join(roomTypes[randint(0, 4)]) 

要修改dungeonLayout並再次使用它加入列表。

你應該做的 -

dungeonLayout = ''.join([roomTypes[randint(0, 4)] for _ in range(10)]) 
+0

有沒有什麼辦法可以使這個持久性,因爲我想保存這些信息以便以後在程序中使用。 – Harvey

+0

@哈維我編輯了答案。 – hashcode55

0

相反,你可以使用:

dungeonLayout = dungeonLayout + roomTypes[randint(0,4)] 

這將產生 「| T | C | M | T | M | C | C | C | C |」風格輸出。

0

my_str.join需要字符串的集合(即一個迭代器)並返回my_str,例如粘在一起那些字符串

"x".join(["1", "2", "3"]) 
# "1x2x3" 

和例如

"x".join("A|") 
# Ax| 

因爲A |是「A」和「|」的集合。

也許你可以解決這個循環,但它更好地使用理解:

"".join(roomTypes[randint(0,4)] for i in range(1,10)) 
0

而不是

dungeonLayout = dungeonLayout.join(roomTypes[randint(0, 4)])

你可能是指

dungeonLayout += roomTypes[randint(0, 4)]

您當前的代碼會從roomTypes中選取一個隨機的雙字符字符串,將其視爲一系列字母,然後使用dungeonLayout變量作爲分隔符將其加入,因此生成的字符串將爲someRoomType[0] + dungeonLayout + someRoomType[1]

你也可以更換整個「爲」用下面的代碼,它表達的「帶10種隨機房間類型和它們連接起來」的理念,循環:

from random import choices dungeonLayout = ''.join(choices(roomTypes, k=10))

2

join這裏描述https://docs.python.org/2/library/stdtypes.html#str.join並且總而言之,在給定的可迭代的中的每個元素之間使用str作爲膠水

既然要基本建立的「房間」的列表,你可以使用一個randomRooms列表存儲隨機房間類型的列表,然後使用join功能只是爲了節省出來的所需的格式。請注意,您將不得不在開始處添加分隔符,在末尾添加分隔符。這裏有最小代碼差異的例子給你。

from random import randint 
roomTypes = ['T', 'M', 'W', 'H', 'C'] 
randomRooms = [] 
for i in range(1,10): 
    randomRooms.append(roomTypes[randint(0, 4)]) 
dungeonLayout = '|' + '|'.join(randomRooms) + '|' 
print('Room types are Temple |T|, Abandoned Military Base |M|, Wizard\'s Abodes |W|, House |H|, Church |C|') 
print('_____________________________') 
print(dungeonLayout) 
print('_____________________________') 

同樣在https://eval.in/750197

0

給你!

from random import randint 
roomTypes = ['T|', 'M|', 'W|', 'H|', 'C|'] 
dungeonList = [] 
dungeonLayout = "" 
for i in range(1,10): 
    dungeonList.append(roomTypes[randint(0, 4)]) 

dungeonLayout = dungeonLayout.join(dungeonList) 
print(dungeonLayout) 
print('Room types are Temple |T|, Abandoned Military Base |M|, Wizard\'s Abodes |W|, House |H|, Church |C|') 
print('_____________________________') 
print('|' + dungeonLayout) 
print('_____________________________') 

因爲你參加每次,程序變得困惑。相反,我將所有的隨機數添加到列表中,然後加入一次。如果你加入了同樣的事情很多次了,電腦將開始錯誤

0

幾個選項...

最簡單的就是使用+運算符來連接每一個新的空間,你的字符串:

dungeonLayout = dungeonLayout + roomTypes[randint(0, 4)] 

但是你說得對,join()方法與此略有不同。參數應該是字符串,其使用字符串作爲分隔符連接起來的序列,即

separator = '|' 
myList = ['1', '2', '3'] 
print(separator.join(myList)) 

1|2|3 

所以,在你的情況下使用join()方法:

from random import randint 
roomTypes = ['T', 'M', 'W', 'H', 'C'] 
roomList = [] 
for i in range(1,10): 
    roomList.append(roomTypes[randint(0, 4)]) 
dungeonLayout = '|'.join(roomList) + '|' 
print('Room types are Temple |T|, Abandoned Military Base |M|, Wizard\'s Abodes |W|, House |H|, Church |C|') 
print('_____________________________') 
print('|' + dungeonLayout) 
print('_____________________________') 

希望有所幫助!

0

它非常簡單的編輯,只是改變

dungeonLayout = dungeonLayout.join(roomTypes[randint(0, 4)]) 

dungeonLayout = dungeonLayout + roomTypes[randint(0, 4)] 

而不是使用連接,只需使用+ 下面是完整的程序

from random import randint 
roomTypes = ['T|', 'M|', 'W|', 'H|', 'C|'] 
dungeonLayout = '' 
for i in range(1,10): 
    dungeonLayout = dungeonLayout + roomTypes[randint(0, 4)] 
print('Room types are Temple |T|, Abandoned Military Base |M|, Wizard\'s Abodes |W|, House |H|, Church |C|') 
print('_____________________________') 
print('|' + dungeonLayout) 
print('_____________________________') 
rand1 = randint(0, 4) 

防爆輸出:| T | W | M | M | W | M | C^| H | T |

1
dungeon_layout = '|' + ''.join(random.choice(room_types) for _ in range(15)) 

上面的代碼替換爲我添加和解決問題,並返回房間正確數量的循環,歸功於對@jDo,非常感謝。

+0

是的,我忘了提及我把'roomTypes = ['T |','M |','W |','H |','C |']'改成了'room_types =''T', 'M','W','H','C']'在我寫評論之前,所以'dungeon_layout ='|' +'|'.join(random.choice(room_types)for _ in range(10))+'|''generated''| W | T | T | T | T | C | W | T | T | T | 「'。無論如何,謝謝,很高興它的工作:) – jDo

0

str.join(迭代

返回一個字符串,它是弦的在迭代迭代串聯。元素之間的分隔符是提供此方法的字符串。

SRC = https://docs.python.org/2/library/stdtypes.html#str.join

所以,從說明..它返回迭代可迭代的中字符串的串聯。

如果你想你想要的結果,簡單地做:

dungeonLayout = dungeonLayout + roomTypes[randint(0,4)]