[英]I am getting out of range error on code, see details below
代碼:
import random
randomnum = random.randint(1, 256)
enter = "john"
enterlen = (len(enter))
enterarray = [randomnum, enterlen]
i = 0
while i <= enterlen:
enterarray.append(enter[i])
i = i + 1
錯誤:
Traceback (most recent call last):
File "/home/kdogg/PycharmProjects/starter/encode.py", line 9, in <module>
enterarray.append(enter[i])
IndexError: string index out of range
我正在嘗試使用此數組制作加密代碼。 我應該從一個隨機數開始填充數組,然后是我要編碼的單詞的長度,然后使用 1 對 1 的代碼( a = 1
, b = 2
, c = 3
等)。
我將隨機乘以給定的數字( a = 1
, b = 2
等)以獲得兩個值之間的數字(a 可能介於 1 和 25 之間,等等),然后將其轉換為十六進制以使其變暗。
示例:假設您輸入了單詞 ABC。 它最終會像(100)(3)(1545784)
首先是隨機數,然后是字長,然后每個字母將被分配一個介於兩個值之間的隨機數,然后所有內容都將轉換為十六進制。 但是,即使使用append()
我的數組也沒有填滿。
這很簡單。 Arrays 從 0 開始,但len()
返回項目數,因此您需要減少此數字。 我建議在 while 循環中將其更改為i < enterlen
。 您應該考慮使用 for 循環。
使用while i<enterlen:
而不是while i<=enterlen:
因為在你的情況下i直到 4 [第 5 個字符] 而 John 只有 4 個字符,所以它給出的索引超出范圍
您正在嘗試訪問不是該字符串值的有效索引的 enter[4]。 Arrays 是基於 0 的索引,因此輸入的唯一有效索引是 0、1、2 和 3。
要解決您的問題,您必須將 while 循環調整為 i < enterlen。 從而在 i = 4 時得出結論。
現在將正確打印 [98, 4, 'j', 'o', 'h', 'n']。
正如您在其他答案中看到的那樣,您需要使用<
而不是<=
因為 list 使用從0
到len(enter)-1
的索引
i = 0
while i < enterlen:
enterarray.append(enter[i])
i = i + 1
但是while
您可以使用for
-loop,但索引沒有問題。
for char in enter:
enterarray.append(char)
例如將 ASCII 字符轉換為數字
for char in enter:
number = ord(char) - ord('A') + 1
enterarray.append(number)
A = 1
, B = 2
, C = 3
等a = 33
, b = 34
, c = 34
等
如果你只想要小寫字符,那么你應該使用ord('a')
而不是ord('A') and you should convert
enter 轉換to
lower()` 以確保你沒有大寫字符。
enter = enter.lower()
順便說一句:如果您只想將字符添加到數組中,那么您可以這樣做
enterarray = [randomnum, enterlen] + list(enter)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.