如何在Python中添加在某些字符符合特定条件时分配的值?

时间:2013-12-03 00:19:29

标签: python

当字母和数字在随机字符串中的某些位置时,我必须添加和减去值,如下所示:

1。字符串中的字母= +1

2。大写字母开头字符串= +1

3。字符串内部或结尾处的大写字母= -2

4。字符串中的数字或其他符号= -2并且每个字母的扣除.25 字符串。

我可以获得随机字符串,但是我很难用'x'添加这些值。

import random
import math

x=0

def randstr(localX):
    a = 'abcdefghijklmnopqrstuvwxyz'
    b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    c = '0123456789'
    d = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    rs = (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d))
    print rs
    if rs[0] in b:
        localX += 1
    if rs[0] in a:
        localX += 1
    elif rs[1] in a:
        localX += 1
    elif rs[2] in a:
        localX += 1
    elif rs[3] in a:
        localX += 1
    elif rs[4] in a:
        localX += 1
    elif rs[5] in a:
        localX += 1
    elif rs[6] in a:
        localX += 1
    elif rs[7] in a:
        localX += 1
    elif rs[8] in a:
        localX += 1
    elif rs[9] in a:
        localX += 1
    if rs[1] in b:
        localX -= 2
    elif rs[2] in b:
        localX -= 2
    elif rs[3] in b:
        localX -= 2
    elif rs[4] in b:
        localX -= 2
    elif rs[5] in b:
        localX -= 2
    elif rs[6] in b:
        localX -= 2
    elif rs[7] in b:
        localX -= 2
    elif rs[8] in b:
        localX -= 2
    elif rs[9] in b:
        localX -= 2
    if rs[0] in c:
        localX -= 2
        if rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[1] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[2] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[3] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[4] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[5] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[6] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[7] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[8] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [9] in a:
            localX -= .25
    elif rs[9] in c:
        localX -= 2
        if rs [0] in a:
            localX -= .25
        elif rs [1] in a:
            localX -= .25
        elif rs [2] in a:
            localX -= .25
        elif rs [3] in a:
            localX -= .25
        elif rs [4] in a:
            localX -= .25
        elif rs [5] in a:
            localX -= .25
        elif rs [6] in a:
            localX -= .25
        elif rs [7] in a:
            localX -= .25
        elif rs [8] in a:
            localX -= .25
    return rs
    return localX
randstr(localX)

2 个答案:

答案 0 :(得分:2)

为了使x的值在您的函数的全局范围内受到影响,您的x必须在全局范围内初始化。

现在,它正在您的函数中的本地范围内初始化。在调用函数之前,要么返回x的值,要么在全局范围内初始化它(在任何函数之外...),即:

选项0:

#declare x at global scope
x = 0
#declare the function affecting x anywhere you want
def randstr():
    global x
    #..... code affecting the value of x
    return whatever
#then use your function affecting x
randstr()

选项1 :(更好)

#pass x as argument 
def randstr(x):
    #..... code affecting the value of x
    return x
x = 0
#other code affecting x
#.....
#pass x as argument and modify the value of your local x
x = randstr(x)

显然,我认为您的代码存在其他问题,因为完全缺乏真正需要解决的循环,但我在此推断您是一名学生,正在学习。

for characterVar in stringVar:
        #code that is repeated for each character
        #handling the character by manipulatin characterVar
        if characterVar == "a" :
            #do stuff if a character in stringVar is a "a"

是循环字符串的方式

可能有效的例子。请注意,代码应该使用正则表达式,并且生成字符串的方式很糟糕,但这是从原始答案中保留的,而不是为OP过多复杂的事情

import random
import math

def randStr():
    x = 0.0
    small = ('abcdefghijklmnopqrstuvwxyz')
    capitals = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    digits = ('0123456789')
    d = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
    rs = (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d)) + (random.choice(d))
    qtyOfLetters = 0
    for char in rs:
        if char in small or char in capitals:
            qtyOfLetters += 1
    x += qtyOfLetters
    if rs[0] in capitals:
        x += 1.0
    for c in rs:
        if c in capitals:
            x -= 2.0
        if not ((c in capitals) or (c in small)):
            x -= (2.0 + 0.25 * qtyOfLetters)
    return (rs,x)

result = randStr()
print ("Generated string : '" + str(result[0]) +"'")
print ("result : " + str(result[1]))

答案 1 :(得分:0)

首先让我说你学习编写软件很棒,我认为Python是初学者的完美语言。这听起来像是你在教自己,并且通过跳进来弄脏手是一种很好的学习方式。

但是,您需要思考在学习过程中如何最好地花时间。当你开始时,通常最大的问题是不知道"什么是正确的问题?"如果您从未听说过for循环,那么如何阅读有关for循环的教程?

有两种解决方案:

1)从一些指导教程开始,以便您快速掌握最常用的语言功能。如果你掌握了基础知识,你真的可以节省很多时间。

2)学会识别什么时候应该是更好的方式"做某事。如果您在实施任务时需要付出很多努力,那么通常有更好的方法来实现它。例如,当你不得不反复输入相同的代码(或复制粘贴代码块,在这里和那里更改位)时,你可能已经尝试搜索"如何减少代码中的复制粘贴&#34 ;或者"如何减少代码重复"。这只是一个例子,但学习何时查阅文档对于程序员来说是一项非常重要的技能。

一旦您感觉自己获得了一些知识,您的课程就会迅速提升。以下是改进现有代码的一些提示:

string模块中有一些预定义的字符串可以提高代码的可读性

>>> import string
>>> string.lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.lowercase + string.uppercase + string.digits
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

这是一个简单的for循环

的示例
>>> my_string = "hello"
>>> for my_char in my_string:
...     print my_char
... 
h
e
l
l
o

另一个包含每个角色的索引:

>>> for my_index, my_char in enumerate(my_string):
...     print my_index, my_char
... 
0 h
1 e
2 l
3 l
4 o

这里有一个很好的引用:

  

“更聪明,更努力”

     

- Carl Barks

这并不意味着你当然不应该努力工作,但要明白什么时候能节省时间。