<p>你的代码大部分是不可出售的,但我会通过它来解释我遇到的所有问题。您的问题中也没有正确地缩进代码,所以我在这方面做了一些假设。你知道吗</p>
<h2>解决代码问题</h2>
<p><strong>字母表生成</strong></p>
<pre><code>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"]`
</code></pre>
<p>这些可以更简洁地表达为:</p>
<pre><code>lowercase_letters = list(string.ascii_lowercase)
uppercase_letters = list(string.ascii_uppercase)
</code></pre>
<p><strong>迭代逻辑</p>
<p>您当前的实现<em>根本不会迭代</em>,因为您分配了<code>i = stringsize+1</code>,然后创建了一个while循环,条件是<code>i < stringsize+1</code>-<em>当第一次计算条件时,这永远不会是真的</em>。你知道吗</p>
<p>正确的python方法是使用如下for循环:</p>
<pre><code>for i in range(stringsize):
...
</code></pre>
<p><strong>字符串串联</strong></p>
<p>从技术上讲,Python中的字符串是列表,但通过在列表中附加单个字符来构造字符串并不是很容易。你知道吗</p>
<p>一种方法是设置<code>StringGen = ''</code>,然后在for循环中使用<code>StringGen += c</code>向其添加字符。然而,<a href="https://waymoot.org/home/python_string/" rel="nofollow noreferrer">this isn't efficient</a>。我将在本文底部提供一个解决方案,以演示一个不涉及循环内串联的实现。你知道吗</p>
<p><strong>对条件逻辑误用整数</p>
<p>代码:</p>
<pre><code>MajorMin = randint(1,2)
if MajorMin == 1:
...
if MajorMin == 2:
...
</code></pre>
<p>使用这种等效逻辑可以更清楚地说明:</p>
<pre><code>use_uppercase_letter = random.choice([True, False])
if use_uppercase_letter:
...
else:
...
</code></pre>
<h2>替代实现</h2>
<p><strong>您的方法的精细变化</strong></p>
<p>这里有一个不同的<code>randomstr</code>实现,它基于以下几点:</p>
<pre><code>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))
</code></pre>
<p><strong>我最擅长的</p>
<p>这是一个更简洁的实现,我将提供的情况下,你想要它,但它偏离了你原来的方法很多。你知道吗</p>
<pre><code>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))
</code></pre>
<p><strong>示例运行</strong></p>
<p>这些是您通过上述任一实现获得的输出的示例。你知道吗</p>
<pre class="lang-none prettyprint-override"><code>MYXPupqiRG
ELNMPktrbe
ZnYBjlIxNQ
</code></pre>
<hr/>