初学者:未定义全局名“x”

2024-09-28 17:03:11 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我的指导方针是:

  1. 编写一个程序来生成10个随机的小写、大写字母和数字字符串。在
  2. 编写一个程序从(1)-(1)中随机读取10个字符串将是第(2)部分的函数- 把它描述成胡言乱语。在
  3. 从电话簿中选出十个名字,并用(2)中的函数将其描述为胡言乱语。在

我遇到了没有定义x的问题。我添加了一些省略号来帮助压缩。所以计划是:

import random

import math


def randstr():
    global x
    int(x=0)
    a = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
    rs = ((random.choice(a)) + (random.choice(a)) + (random.choice(a)) + (random.choice(a)) + (random.choice(a)) + (random.choice(a)) + (random.choice(a)) + (random.choice(a)) + (random.choice(a)) + (random.choice(a)))
    print rs
    if rs[0] == 'A' or 'B' or 'C' or 'D' or 'E' or 'F' or 'G' or 'H' or 'I' or 'J' or 'K' or 'L' or 'M' or 'N' or 'O' or 'P' or 'Q' or 'R' or 'S' or 'T' or 'U' or 'V' or 'W' or 'X' or 'Y' or 'Z':
        x += 1
    if rs[0] == 'a' or 'b' or 'c' or 'd' or 'e' or 'f' or 'g' or 'h' or 'i' or 'j' or 'k' or 'l' or 'm' or 'n' or 'o' or 'p' or 'q' or 'r' or 's' or 't' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z':
        x += 1
    elif rs[1] == 'a' or 'b' or 'c' or 'd' or 'e' or 'f' or 'g' or 'h' or 'i' or 'j' or 'k' or 'l' or 'm' or 'n' or 'o' or 'p' or 'q' or 'r' or 's' or 't' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z':
        x += 1
    ...

    elif rs[9] == 'a' or 'b' or 'c' or 'd' or 'e' or 'f' or 'g' or 'h' or 'i' or 'j' or 'k' or 'l' or 'm' or 'n' or 'o' or 'p' or 'q' or 'r' or 's' or 't' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z':
        x += 1
    if rs[1] == 'A' or 'B' or 'C' or 'D' or 'E' or 'F' or 'G' or 'H' or 'I' or 'J' or 'K' or 'L' or 'M' or 'N' or 'O' or 'P' or 'Q' or 'R' or 'S' or 'T' or 'U' or 'V' or 'W' or 'X' or 'Y' or 'Z':
        x -= 2
    ...

    elif rs[9] == 'A' or 'B' or 'C' or 'D' or 'E' or 'F' or 'G' or 'H' or 'I' or 'J' or 'K' or 'L' or 'M' or 'N' or 'O' or 'P' or 'Q' or 'R' or 'S' or 'T' or 'U' or 'V' or 'W' or 'X' or 'Y' or 'Z':
        x -= 2
    if rs[0] == '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' or '0':
        x -= 2
        if rs [1] == 'a' or 'b' or 'c' or 'd' or 'e' or 'f' or 'g' or 'h' or 'i' or 'j' or 'k' or 'l' or 'm' or 'n' or 'o' or 'p' or 'q' or 'r' or 's' or 't' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z' or 'A' or 'B' or 'C' or 'D' or 'E' or 'F' or 'G' or 'H' or 'I' or 'J' or 'K' or 'L' or 'M' or 'N' or 'O' or 'P' or 'Q' or 'R' or 'S' or 'T' or 'U' or 'V' or 'W' or 'X' or 'Y' or 'Z':
            x -= .25
        ...

        elif rs [9] == 'a' or 'b' or 'c' or 'd' or 'e' or 'f' or 'g' or 'h' or 'i' or 'j' or 'k' or 'l' or 'm' or 'n' or 'o' or 'p' or 'q' or 'r' or 's' or 't' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z' or 'A' or 'B' or 'C' or 'D' or 'E' or 'F' or 'G' or 'H' or 'I' or 'J' or 'K' or 'L' or 'M' or 'N' or 'O' or 'P' or 'Q' or 'R' or 'S' or 'T' or 'U' or 'V' or 'W' or 'X' or 'Y' or 'Z':
            x -= .25

    ...

        elif rs [8] == 'a' or 'b' or 'c' or 'd' or 'e' or 'f' or 'g' or 'h' or 'i' or 'j' or 'k' or 'l' or 'm' or 'n' or 'o' or 'p' or 'q' or 'r' or 's' or 't' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z' or 'A' or 'B' or 'C' or 'D' or 'E' or 'F' or 'G' or 'H' or 'I' or 'J' or 'K' or 'L' or 'M' or 'N' or 'O' or 'P' or 'Q' or 'R' or 'S' or 'T' or 'U' or 'V' or 'W' or 'X' or 'Y' or 'Z':
            x -= .25
    return rs

print randstr()

randstr()

Tags: or函数字符串import程序ifrandom大写字母
3条回答

您必须声明它,而不是int(x=0)-调用函数:

x = 0

另外,似乎不需要在函数中使用global x。在

所以,这是你的一部分功能:

^{pr2}$

还有几个问题。在

首先,rs的声明。您使用的是+,但是您应该使用,,否则python将只对所有值求和并返回一个数字。同时拆除不必要的支架:

rs = [random.choice(a), random.choice(a), ...]

或者只使用一个循环:

rs = []
for i in range(10): #creating 10 random numbers
    rs.append(random.choice(a))

您的if语句也没有像您认为的那样做。请改用in运算符:

if rs[0] in 'abcdefghijklmnopqrstuvwxyz':
   ...

其他条件语句也是如此。希望这有帮助!在

因此,如果在代码的开头添加x=0或只是x=int(0),那么它就可以工作了,因为您试图将x=定义为int(),这是不可能的。在

import random

import math

def randstr():
    # I removed the 'global x' you should not need it
    x=0             # I made the change for you
    a = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')

这应该可以解决“x未定义”的问题,并且您还应该能够除去global x

在继续之前,您还需要注意一些其他错误。在

第一个问题是您的if语句。

看看这个例子:

string = "foo"
if string == "foo" or "bar":
    dosomething()

在人眼看来,这是正确的,但计算机的看法不同。将条件与andor组合时,计算机将从左到右检查条件。在这种情况下,计算机会看到:

If string is equal to foo or if bar

第二个条件,在or后面,与说if bar == True:条是字符串相同,任何字符串都是总是真的,因此dosomething()函数将始终执行。通过将上述示例更改为:

^{pr2}$

现在,计算机将执行它:

If string is equal to foo or if string is equal to bar

简化代码

我想指出的第二件事是编程中的首要规则之一:如果你多次输入同一个东西,可能有更好的方法

在您的代码中,设想用if rs[9] == 'A' or rs[9] == 'B'替换已经很长的条件,等等,它将变得非常长和混乱。制作一个字母表的列表,然后对照列表检查变量,会简单得多。例如:

alpha_list = ['A','B','C'] # etc through 'Z'
if rs[0] in alpha_list:
    dosomething()

in关键字告诉Python检查rs[0]的值是否在list字母列表中,或者换句话说,如果它是字母表中的字母。现在,您可以用一个更短、更干净的解决方案替换所有这些冗长而混乱的条件:)

正如aIKid所指出的,字符串也是iterable,因此可以用所有字母的字符串(alphabet = "ABCDEF"…)来替换列表。任何一个都可以。在

至于你问题的最初答案,aIKid回答得很完美,我只是想试着用一些其他的方法来帮助你提高!在

相关问题 更多 >