![](/img/trans.png)
[英]I'm trying to export csv files to a local folder and I don't know what I'm doing wrong but it doesn't work
[英]I'm creating a password generator but I don't know why it doesn't work
基本上我是 python 的新手,我正在使用 python 3 來嘗試創建一個密碼生成器,只是為了好玩,但我一直遇到問題。 當我在 Pydroid 3 中嘗試以下代碼時,它按預期工作,即創建一個長度由用戶確定的混合字符(符號、大小寫字母和數字)密碼,但是當我在 Pycharm 上運行它時,我盡管說我想要超過 1 個字符,但只得到 1 個字符。有人知道這個問題嗎?
import random
import string
import pyfiglet
print(pyfiglet.figlet_format('Password Generator!\n', font="digital"))
length = int(input('How many characters long do you want the password to be? '))
alphabet = list(string.ascii_lowercase)
numbers = range(0, 10)
specialchar = list(string.punctuation)
char = ('alfa', 'num', 'char')
pw = []
passw = ''
while length > 0:
if random.choice(char) == 'alfa':
x = str(random.choice(alphabet))
pw.append(x)
passw = ''.join(x)
length -= 1
elif random.choice(char) == 'num':
x = str(random.choice(numbers))
pw.append(x)
passw = ''.join(x)
length -= 1
else:
x = str(random.choice(specialchar))
pw.append(x)
passw = ''.join(x)
length -= 1
def randomupper(c):
if random.random() > 0.5:
return c.upper()
return c.lower()
password = ''.join(map(randomupper, passw))
print(f'Your randomly generated password is: {password}')
更改此行,它將起作用
password = ''.join(map(randomupper, pw))
使用passw = ''.join(x)
你迭代地在x
中添加一個帶有空字符''
的字符到變量 passw,當循環結束時,它最終將只有一個字符。 但是pw.append(x)
將x
內的字符添加到pw
的末尾並增加其大小。 因此,當您使用passw
而不是pw
時,您只會看到在循環中創建的最后一個字符。
這是因為字符串passw
只是將最新的字符x
附加到自身。 它根本不與列表pw
交互。 不需要同時擁有pw
和passw
而是在每個直接附加到字符串的 if 語句中使用pw += x
,然后將最后一行更改為password = ''.join(map(randomupper, pw))
主要問題是行passw = ''.join(x)
刪除密碼並用最后生成的字符替換它。
其他一些需要改進的地方:
for i in range(length)
確保循環准確執行length
次,而無需初始化、更新和測試變量pw.append(x)
這樣的代碼對於每個 if 測試都是相同的,可以放在外面passwd = ''.join(pw)
只是復制字符串更新后的代碼:
import random
import string
length = int(input('How many characters long do you want the password to be? '))
alphabet = list(string.ascii_lowercase)
numbers = range(0, 10)
specialchar = list(string.punctuation)
char = ('alfa', 'num', 'char')
passw = ''
for i in range(length):
if random.choice(char) == 'alfa':
x = str(random.choice(alphabet))
elif random.choice(char) == 'num':
x = str(random.choice(numbers))
else:
x = str(random.choice(specialchar))
passw.append(x)
def randomupper(c):
if random.random() > 0.5:
return c.upper()
return c.lower()
password = ''.join(map(randomupper, passw))
print(f'Your randomly generated password is: {password}')
到目前為止,我已經閱讀了所有回復,你們幫助了我很多,謝謝。 我意識到 passw = ''.join(x) 語句中有一個錯誤,它應該是 passw = ''.join(pw)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.