我正在尝试根据你提供的长度制作一个String生成器,它从2个数组中获取字母,一个为Maj提供,一个为Min,所以这是我的代码,但它通常返回“b”或错误
from random import randint
def randomstr(stringsize):
Alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
Alphabet2 = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
i = stringsize+1
LocalRanDom = ""
StringGen = []
while i < stringsize+1:
i = i-1
MajorMin = randint(1,2)
print(Alphabet[1])
if MajorMin == 1:
LocalRanDom = randint(1,26)
StringGen.append(Alphabet[LocalRanDom])
if MajorMin == 2:
LocalRanDom = randint(1,26)
StringGen.append(Alphabet2[LocalRanDom])
return StringGen
randomstr(3)
答案 0 :(得分:0)
这不是pythonic lol见Chris的评论
首先,我不知道我是为了什么?你只需要它
function OpenCloseNav() {
"use strict";
var mq = window.matchMedia("(min-width: 50em)");
var x = document.getElementById("_sidebar");
var y = document.getElementById("_main");
var z = document.getElementById("_menu");
if (mq.matches) {
// window width is at least 50em
if (x.style.width === "0rem") {
y.style.marginLeft = "22rem";
y.style.marginRight = "4rem";
x.style.width = "18rem";
x.style.marginLeft = "0rem";
z.style.left = "16rem";
} else {
y.style.marginLeft = "10.5rem";
y.style.marginRight = "9.5rem";
x.style.width = "0rem";
z.style.left = "0.25rem";
}
}
}
然后
i = stringsize+1
之后,你永远不会使用它。
如果您想要一个随机字符串生成器,您可以执行以下操作。
while i < stringsize+1:
i = i-1
答案 1 :(得分:0)
您的代码主要是无法解决的,但我会仔细阅读并解释我遇到的所有问题。你也没有在你的问题中正确地缩进你的代码,所以我在这方面做了一些假设。
字母代
Alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]`
Alphabet2 = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]`
这些可以更简洁地表达为:
lowercase_letters = list(string.ascii_lowercase)
uppercase_letters = list(string.ascii_uppercase)
迭代逻辑
您当前的实现将不会迭代,因为您分配了i = stringsize+1
然后创建了一个条件为i < stringsize+1
的while循环 - 当这将永远不会成立时首先评估条件。
正确和Pythonic的方法是使用这样的for循环:
for i in range(stringsize):
...
字符串连接
Python中的字符串在技术上是列表,但通过将单个字符附加到列表来构造字符串并不是非常令人愉快。
一种方法是设置StringGen = ''
,然后在for循环中使用StringGen += c
为其添加字符。但是,this isn't efficient。我将在本文的底部提供一个解决方案,以演示一个不涉及循环内连接的实现。
滥用条件逻辑的整数
代码:
MajorMin = randint(1,2)
if MajorMin == 1:
...
if MajorMin == 2:
...
使用这种等效逻辑可以更清楚:
use_uppercase_letter = random.choice([True, False])
if use_uppercase_letter:
...
else:
...
您的方法的精确变化
以下是randomstr
的不同实现,它基于以下几点构建:
import string
import random
def randomstr(stringsize):
lowercase_letters = list(string.ascii_lowercase)
uppercase_letters = list(string.ascii_uppercase)
def generate_letters(n):
for i in range(n):
use_uppercase_letter = random.choice([True, False])
if use_uppercase_letter:
yield random.choice(lowercase_letters)
else:
yield random.choice(uppercase_letters)
return ''.join(c for c in generate_letters(stringsize))
print(randomstr(10))
我最好的解决方案
这是一个更简洁的实现,我会在你需要的时候提供它,但它与你原来的方法有很大不同。
import string
import random
def randomstr(stringsize):
letters = list(string.ascii_lowercase + string.ascii_uppercase)
return ''.join(random.choice(letters) for _ in range(stringsize))
print(randomstr(10))
示例运行
这些是上述任一实现所获得的输出示例。
MYXPupqiRG
ELNMPktrbe
ZnYBjlIxNQ