0

我需要制作一个程序,用户在其中输入一个单词,我需要对该单词中的每个字母做一些事情。他们不能一次输入一个字母,只输入一个单词。

IE 有人输入“测试”我怎样才能让我的程序知道它是一个四个字母的单词以及如何分解它,比如让我的程序制作四个变量,每个变量设置为不同的字母。它还应该能够处理更大和更小的单词。

我可以使用 for 语句吗?像 For letter ste 那个字母到一个变量的东西,但是它是什么样的一个 20 个字符的字母,程序如何获得所有的变量名等等?

4

5 回答 5

3

你的意思是这样的吗?

>>> s = 'four'
>>> l = list(s)
>>> l
['f', 'o', 'u', 'r']
>>>

附录:

即使这(显然)是您认为自己想要的,也可能没有必要,因为字符串几乎可以保存任何大小的单词——所以像s上面这样的单个字符串变量应该足以让您的程序诗句尝试创建每个字符的一堆单独命名的变量。一方面,很难编写程序的其余部分,因为您不知道要使用哪些有效的变量名。

可以不为每个字符使用单独的变量的原因是因为单个字符串可以包含任意数量的字符,也可以为空。len()如果应用于 1,Python 的内置函数将返回字符串中字母数量的计数,因此len(s)上面的结果将是4.

字符串中的任何字符都可以通过在方括号之间0len(s)-1方括号内的整数对其进行索引来随机访问,因此要引用第三个字符,您将使用s[2]. 将索引视为字符串开头的偏移量或字符很有用。

即便如此,在 Python 中通常不需要使用索引因为您也可以在for循环中迭代处理字符串中的每个字符,而无需使用它们,如下面的简单示例所示:

num_vowels = 0
for ch in s:
    if ch in 'aeiou':
        num_vowels += 1
print 'there are', num_vowels, 'vowel(s) in the string', s

Python 还具有许多其他工具和内置程序,可以在处理字符串时提供进一步帮助(实际上可以简化上面的示例),随着您对语言及其许多库的熟悉,您最终会学到这些。

于 2013-02-02T22:36:28.703 回答
1

当您迭代一个字符串时,它会返回单个字符,例如

for c in thestring:
    print(c)

如果您确实需要,您可以使用它来将字母放入列表中,这将保留其顺序,但这list(string)是一个更好的选择(请注意,像 dict 或 set 这样的无序类型不保证任何顺序)。

于 2013-02-02T22:33:02.180 回答
1

你不必做任何这些;在 Python 中,您可以使用方括号访问字符串的字符:

>>> word = "word"
>>> print(word[0])
w
>>> print(word[3])
d
>>> print(len(word))
4
于 2013-02-02T22:52:47.503 回答
0

您不想将每个字母分配给单独的变量。然后,您将编写程序的其余部分,甚至不知道您定义了多少变量!这是一个比一次处理整个字符串更糟糕的问题。

相反,您想要做的是只有一个变量保存字符串,但您可以通过索引来引用其中的单个字符。假设字符串在 中s,然后s[0]是第一个字符,s[1]是第二个字符,等等。您可以通过检查找出数字上升了多远len(s) - 1(因为索引从 0 开始,长度为 1 的字符串的最大索引为 0,a长度为 2 的字符串具有最大索引 1 等)。

这比弄清楚如何生成len(s)变量名、将它们全部分配给一段字符串、然后知道需要引用哪些变量要容易得多。

但是,字符串是不可变的,因此您不能分配tos[1]来更改第二个字符。如果您需要这样做,您可以使用 eg 创建一个列表l = list(s)。然后l[1]是第二个字符,您可以指定l[1] = something更改列表中的元素。然后,当你完成后,你可以得到一个新的字符串,通过将作为参数传递的一系列字符串连接在一起来s_new = ''.join(l)构建join一个字符串,使用左边调用它的字符串作为每个元素之间的分隔符序列;在这种情况下,我们使用空字符串作为分隔符连接单字符串列表,因此我们只需将所有单字符串连接到一个字符串中)。

于 2013-02-02T23:04:12.810 回答
0
x = 'test'   
counter = 0   
while counter < len(x): 
    print x[counter]  # you can change this to do whatever you want to with x[counter]
    counter += 1
于 2013-02-02T23:10:46.817 回答