在这段代码中,我想创建一个包含字符串加密版本的字典。但是,在第一个if语句中,代码似乎跳过了两个if语句而不理解为什么
8 import string
9
10
11 drunk="abcdefABC"
12 joe={}
13 shift=4
14 for i in drunk:
15 for j in string.ascii_lowercase:
16 listj=[]
17 listj.append(j)
18 for x in string.ascii_uppercase:
19 listx=[]
20 listx.append(x)
21 if i in listj:
22 tempvara=ord(i)
23 tempvarb=chr(tempvara+shift)
24 joe[i]=tempvarb
25 if i in listx:
26 vartempa=i.lower()
27 vartempb=ord(i)
28 vartempc=chr(vartempb+shift)
29 vartempc=vartempc.upper()
30 joe[i]=vartempc
31 print(Joe)
以Python编码
////
更新
import string
drunk="abcdefABC"
joe={}
shift=4
for j in string.ascii_lowercase:
listj=[]
listj.append(j)
for x in string.ascii_uppercase:
listx=[]
listx.append(x)
for i in drunk:
if i in listj:
tempvara=ord(i)
tempvarb=chr(tempvara+shift)
joe[i]=tempvarb
if i in listx:
vartempa=i.lower()
vartempb=ord(i)
vartempc=chr(vartempb+shift)
vartempc=vartempc.upper()
joe[i]=vartempc
print(Joe)
我注意到有人说我已将列表放在循环内部,所以我把它拿出来并在那里声明它但似乎它不起作用并且有同样的问题
答案 0 :(得分:4)
您为每个字符初始化listj
和listx
,因此只有z
和Z
才会进入该字符。
这意味着:对于a
,您初始化listj
,然后添加a
。对于b
,您再次初始化listj
,放弃a
。再次c
...
如您所见,变量j
已经在字符c
,但列表listj
已被清除。
不是在内部声明数组,而是在循环外移动:
import string
drunk="abcdefABC"
joe={}
shift=4
listj=[]
for j in string.ascii_lowercase:
listj.append(j)
listx=[]
for x in string.ascii_uppercase:
listx.append(x)
for i in drunk:
if i in listj:
tempvara=ord(i)
tempvarb=chr(tempvara+shift)
joe[i]=tempvarb
if i in listx:
vartempa=i.lower()
vartempb=ord(i)
vartempc=chr(vartempb+shift)
vartempc=vartempc.upper()
joe[i]=vartempc
print(joe)
并且,正如@Fred Larson所提到的,循环中列表的初始化是多余的。你也可以这样做
import string
drunk="abcdefABC"
joe={}
shift=4
listj=string.ascii_lowercase
listx=string.ascii_uppercase
for i in drunk:
if i in listj:
tempvara=ord(i)
tempvarb=chr(tempvara+shift)
joe[i]=tempvarb
if i in listx:
vartempa=i.lower()
vartempb=ord(i)
vartempc=chr(vartempb+shift)
vartempc=vartempc.upper()
joe[i]=vartempc
print(joe)
如果你摆脱了更多的源代码,你可能会发现你的代码有一个错误:
import string
drunk="abcdefABC"
joe={}
shift=4
for i in drunk:
if i in string.ascii_lowercase:
joe[i] = chr(ord(i) + shift)
if i in string.ascii_uppercase:
vartempa = i.lower()
joe[i] = chr(ord(i) + shift).upper()
print(joe)
请注意,永远不会使用vartempa
。