def file_contents():
global file_encrypt
encryption_file = input("What is the name of the file?")
file_encrypt = open(encryption_file, 'r')
contents = file_encrypt.read()
print (contents)
ask_sure = input("Is this the file you would like to encrypt?")
if ask_sure == "no":
the_menu()
这部分代码打开用户输入的文件,对吧?这里没有真正的问题。
def key_offset():
key_word = ''
count = 0
total = 0
while count < 8:
num = random.randint (33, 126)
letter = chr(num)
key_word = key_word + letter
count = count + 1
offset = ord(letter)
total = total + offset
print("Make sure you copy the key for decryption.")
if count == 8:
total = total/8
total = math.floor(total)
total = total - 32
print(key_word)
return total
这是计算偏移量等的部分。这里再次没有问题。
def encrypting():
file = file_contents()
total = key_offset()
encrypted = ''
character_number = 0
length = len(file_encrypt)
然后问题就出现了,我在第一个代码块中将变量file_encrypt设为全局,因此它应该可以工作。我试过在另一个变量如file_en = file_encrypt下调用它并在长度计算中使用file_en,但它一直说它没有长度......我试过问朋友和我的老师,但他们似乎一无所知。问题是每次我到达这个部分时都说file_encrypt没有长度或者我试过的另一种方式,file_en没有长度,与TextWrapper.io有关。
答案 0 :(得分:2)
file_encrypt
是一个文件指针,确实没有长度。您文件的内容位于contents
,但这是file_contents
函数的本地变量。
真的不应该使用全局变量;这里没有任何理由。而是从contents
返回实际数据 - file_contents
- 然后您可以在调用函数中使用它。
答案 1 :(得分:1)
您的代码存在一些问题,但暂时忽略了这些问题,我认为您的主要问题是:
1)函数“file_contents”没有返回任何内容,我怀疑你想要返回“内容”。很难说不知道你想用“文件”变量做什么。
def encrypting():
file = file_contents() # <--
2)正如其他人所说,“file_encrypt”是指向文件的指针,虽然在这个函数中你没有将它声明为全局,所以它可能是None。
def encrypting():
file = file_contents()
total = key_offset()
encrypted = ''
character_number = 0
length = len(file_encrypt) # <--
因此,这些修改应该能满足您的需求:
def file_contents():
global file_encrypt
encryption_file = input("What is the name of the file?")
file_encrypt = open(encryption_file, 'r')
contents = file_encrypt.read()
print (contents)
ask_sure = input("Is this the file you would like to encrypt?")
if ask_sure == "no":
the_menu()
return contents # <-- ADDED
def encrypting():
contents = file_contents() # <-- MODIFIED
total = key_offset()
encrypted = ''
character_number = 0
length = len(contents) # <-- MODIFIED