【发布时间】:2014-03-18 11:37:00
【问题描述】:
我有一个 Python 3.x 脚本,它只有以下功能:
from random import random
def slicer(longitude):
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result = ""
x = 0
for i in range(1, int(longitude)):
x = int(62 * random())
if x == 0:
x += 1
else:
# get a random letter from alphabet, seem this is the problem > (alphabet[x:1]):
string_section = alphabet[x:1]
result = result + string_section
return result
print(str(slicer(10))) # get a 10 digit string
但是这段代码不起作用,我被卡住了......
s[x:1] 是否允许,其中x 是来自 for 循环的变化值?
如果没有,是否有其他方法可以达到相同的效果?感谢您的帮助。
【问题讨论】:
-
请记住,在 python 切片中,如果 a 和 b 都是非负数,mylist[a:b] 应该有 b > a。负索引 x 映射到 (len(mylist)+x),因此它们从末尾开始计数。
-
输出应该是使用函数中提供的字母表的具有 n 位数字的随机字符串。我知道这可以用另一种方法来实现,但我特别想使用这种方法。奇怪的是,脚本没有显示任何错误,只是一个空结果。
-
哦!所以问题,实际上是字母[x:1],解决了将其更改为:字母[x:x + 1] ...谢谢!我从 Python 开始
-
null(无)或空(“”)?
-
从技术上讲,它是通过使用长度为 1 的切片 (
alphabet[x:x+1]) 来解决的,但这有点误导。您不是在尝试获取长度为 1 的切片,而是在尝试获取单个元素。以这种方式编写代码可能会更好,这样任何阅读代码的人都会从您的选择中看到您只是为了获得一件物品。由于alphabet[x]有效,并且它没有请求超出可迭代对象索引范围的切片的缺陷,因此在这种情况下更简单、更容易理解。
标签: python string python-3.x slice