当字母和数字在随机字符串中的某些位置时,我必须添加和减去值,如下所示:
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)
答案 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
这并不意味着你当然不应该努力工作,但要明白什么时候能节省时间。