我是一个真正的python初学者,我正在尝试修改我在课程中看到的代码。我已经尝试找到所有大写字母的字符串。但问题是它只给了我一个大写字母,即使有不止一个。
def finding_upppercase_itterative(string_input):
for i in range(len(string_input)):
if string_input[i].isupper:
return string_input[i]
return "No uppercases found"
我应该如何修改这段代码给我所有的大写字母在给定的字符串。如果有人能给我解释一下背后的逻辑,我会很高兴的。
谢谢!
编辑1:感谢S3DEV,我输入了错误的二进制搜索算法。
如果您正在寻找使代码工作的小更改,一种方法是使用生成器函数,使用yield
关键字:
def finding_upppercase_itterative(string_input):
for i in range(len(string_input)):
if string_input[i].isupper():
yield string_input[i]
print(list(finding_upppercase_itterative('test THINGy')))
如果你只打印finding_upppercase_itterative('test THINGy')
,它会显示一个生成器对象,所以你需要把它转换成一个列表来查看结果。
有关生成器的更多信息,请参见:https://wiki.python.org/moin/Generators
这是为每个步骤编写的包含大量细节的固定代码。还有一些其他的答案,用更复杂的/"pythonic"的方法来做同样的事情。
def finding_upppercase_itterative(string_input):
uppercase = []
for i in range(len(string_input)):
if string_input[i].isupper():
uppercase.append(string_input[i])
if(len(uppercase) > 0):
return "".join(uppercase)
else:
return "No uppercases found"
# Try the function
test_string = input("Enter a string to get the uppercase letters from: ")
uppercase_letters = finding_upppercase_itterative(test_string)
print(uppercase_letters)
解释如下:
- 创建以
string_input
为参数的函数 - 创建一个名为
uppercase
的空列表 - 循环
string_input
中的每个字符 - [在循环中]如果是大写字母,将其添加到
uppercase
列表 - [跳出循环]如果
uppercase
列表的长度大于0 - [在
if
中]返回所有连接在一起的列表字符,没有作为分隔符(""
) - [在
else
]中,否则,返回"没有找到大写字母"> - [out of the function]获取
test_string
并将其存储在变量 中 - 从
test_string
中获取uppercase_letters
print
将uppercase_letters
发送给用户
有更短(和更复杂)的方法来做到这一点,但这只是初学者更容易理解的一种方法。
Also:您可能想要修改您的拼写,因为它使代码更难阅读和理解,并且也使键入拼写错误的标识符的名称变得更加困难。例如,upppercase
和itterative
应该分别为uppercase
和iterative
。
像这样简单的操作就可以了:
s = "My Word"
s = ''.join(ch for ch in s if ch.isupper())
return(s)
另一个StackOverflow问题背后的相反想法:从python字符串中删除大写字母
函数中的return
语句将阻止函数的执行。当它发现一个大写字母时,它将看到返回语句并停止。
一种方法是在list后面添加字母并在末尾返回它们:
def finding_uppercase_iterative(string_input):
letters = []
for i in range(len(string_input)):
if string_input[i].isupper():
letters.append(string_input[i])
if letters:
return letters
return "No uppercases found"