我试图创建一个循环,该循环将采用用户输入的内容并在大写和小写之间交替打印。例如:用户输入' helloworld',它打印回' HeLlOwOrLd'。这是我到目前为止所拥有的(相信我,我知道它不是最优的,它只是我可以开始工作):
s = input("enter characters: ")
word = ''
count = 0
for i in s:
up = s[::2]
up2 = up.upper()
up3 = up2[0 + count]
low = s[1::2]
low2 = low.lower()
low3 = low2[0 + count]
word += up3 + low3
count += 1
print(word)
当我在调试器中跟踪它时,word会出现正确的值,然后它再次运行循环,从而使索引超出范围错误。想法?
答案 0 :(得分:2)
你的循环次数太多了。你在循环中将你的分裂成两半,但是为s中的每个字符循环一次。
s = input("enter characters: ")
word = ''
for count in range(len(s[::2])):
up = s[::2]
up2 = up.upper()
up3 = up2[0 + count]
low = s[1::2]
low2 = low.lower()
if(len(low2)>count):
low3 = low2[0 + count]
else:
low3=''
word += up3 + low3
count += 1
print(word)
干杯!
答案 1 :(得分:2)
count
最终会等于s
的长度。但是,您使用count
作为短于s
的字符串的索引,例如up3
。
尝试以下方法:
>>> result = ''
>>> word = 'hello'
>>> for i in range(len(word)):
... result += (word[i].lower() if i%2 else word[i].upper())
...
>>> result
'HeLlO'
此外:
>>> word = 'HellOWorLD'
>>> ''.join(word[i].lower() if i%2 else word[i].upper() for i in range(len(word)))
'HeLlOwOrLd'
答案 2 :(得分:0)
您可以使用string
和itertools.cycle
中的大小写转换函数来改变应用于每个字符的大小。将所有内容包含在连接语句中,然后得到:
''.join(case(c) for case,c in
zip(itertools.cycle((string.upper,string.lower)), 'helloworld'))