我必须使用for循环,不允许列表。可以假设字符串是非空的。我有什么:
def max_numbers(s):
n_string = ''
for char in s:
if char.isdigit():
n_string += char
return max(n_string)
max_numbers('22 53 123 54 243')
5
expected 243
请不要使用任何先进的方法,我还是初学者。我希望243出现,但最终以5结束。
答案 0 :(得分:4)
这个想法是从字符串中分离出整数(正如你已经做的那样,但有点错误),并记录到目前为止的最大值。如果某个字符不是数字,则将n_string
转换为int
并与max_
进行比较,以跟踪到目前为止找到的最大值,然后将n_string
设置为空号。
最后的检查是针对最后一个数字,因为在字符串的末尾可能并不总是非数字,所以最后一次迭代不会在else
部分。
def max_numbers(s):
n_string = ''
max_ = 0
for char in s:
if char.isdigit():
n_string += char
else:
if n_string and int(n_string) > max_:
max_ = int(n_string)
n_string = ''
if n_string and int(n_string) > max_:
max_ = int(n_string)
return max_
print(max_numbers('22 53 123 54 243'))
输出:
243
修改强>
如果n_string
为空,则int(n_string)
失败并显示错误
ValueError:基数为10的int()的文字无效:' '
因此,为了避免这种情况,需要检查n_string
是否为空,才能执行int(n_string)
。在python中,empty string evaluates to False
, and non-empty string to True
。所以,只需写
if n_string and int(n_string) > max_:
检查n_string
是非空和 n_string
,因为整数大于max_
。当n_string
为空时,if
的第二部分由于if
的{{3}}行为而未评估,因此可以避免错误。
一些相关链接:
答案 1 :(得分:1)
不会为你编写任何代码,因为按照指定的方式进行操作只会很无聊。此外,由于你没有说明你正在使用的python版本,我将假设版本2.
以下是您需要的一些事项:
首先将名为num
的变量初始化为空字符串
读取数字,直到您到达字符串的末尾或达到非数字。每个数字读取都应附加到num
neg
不为空,请使用int
将num
转换为整数,否则跳至第5步num
的变量初始化为空字符串,将名为neg
的变量初始化为1
-
字符,请将neg
设置为-1
,否则读取数字,直到您到达字符串的末尾或达到非数字。每个数字读取都应附加到num
num
不为空,请使用int
将num
转换为整数;否则跳到第6步neg
非无聊的版本:
print (max(map(int, my_str.split())))
答案 2 :(得分:1)
def max_numbers(s):
# biggest number we've seen so far. init to a very small number so
# it will get replaced immediately by real input data
biggest = -999
# accumulate digit characters from input
n_string = ''
# loop through each input character
for char in s:
# is it a digit 0-9?
if char.isdigit():
# add it onto the end of n_string
n_string += char
# not a digit
else:
# if n_string has some digits in it
if n_string:
# calculate integer value of n_string, and if it's bigger
# than the previous biggest, save it as the new biggest
biggest = max(biggest, int(n_string))
# reset n_string back to empty
n_string = ''
return biggest
答案 3 :(得分:-2)
如果@ IvanCai的答案太高级,请尝试:
def max_numbers(s):
top=0
curr=0
for char in s:
if char.isdigit():
curr*=10
curr+=int(char)
if curr>top:
top=curr
elif char==' ' or char=='\n':
curr=0
return top
print(max_numbers('22 53 123 54 243'))