簡體   English   中英

我的代碼出現超出范圍錯誤,請參閱下面的詳細信息

[英]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 = 1b = 2c = 3等)。

我將隨機乘以給定的數字( a = 1b = 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 使用從0len(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 = 3a = 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.

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