我怎样才能使它打印出用户输入的最长名称/字符串,而不需要再次输入

2024-04-24 10:32:15 发布

您现在位置:Python中文网/ 问答频道 /正文

def myNames():
    names = []
    while True:
        a = input("Enter Name: ")
        if a != "done":
            names.append(a)
        elif a == "done":
            return names

def all_lengths(myNames):
  num_of_strings = len(myNames)
  total_size = 0
  for item in myNames:
     total_size += len(item)
  ave_size = float(total_size) / float(num_of_strings)
  print(ave_size)

all_lengths(myNames())

def longestWord(myNames): 
    count = 0
    for i in myNames:
        if len(i) > count: 
            count = len(i)
            word = I
            print ("the longest string is ", word)

我怎样才能让它打印出用户输入的最长的名字,例如:在Samantha和John中,它会说Samantha是最长的名字。我需要它来计算最长的名称,并从第一个函数开始显示它,而不会让我再次输入名称


Tags: offorsizelenifnamesdefcount
2条回答

你应该试着更准确地说出你真正想问什么,然后重新组织它,这样每个人都会更容易理解

如果要检查列表中最长的字符串,只需如下操作:

l = ["Samantha", "John"]
maxlen = 0
maxstring = ""

for x in l:
    if len(x) > maxlen:
        maxlen = len(x)
        maxstring = x

print(maxstring)

允许您存储变量。事实上,你已经在你的函数中做了很多

初学者经常忽略的另一点是def语句不运行任何代码。它们创建函数,直到您调用它们或将相同的名称用于其他对象为止

当前调用函数需要更改的行是

所有长度(myNames())

存储结果而不是嵌套调用:

names = myNames()
all_lengths(names)

现在你也可以打电话了

longestWord(names)

注释

手工实现这些功能是一种很好的学习体验。以下是关于如何改进代码的一些评论:

  • Python用户通常只对类名使用CamelCase。函数和变量是用snake_形式编写的。因此my_names而不是myNameslongest_word而不是longestWord

  • 除法运算符/自动返回一个float,即使从python 3开始输入是int。不需要在total_size / num_of_strings中转换。如果需要整数截断,则必须使用//floor divide操作符显式地请求它

  • 在对序列计算求和时,即使求和的属性是间接的,也要使用sum内置函数:

      def all_lengths(my_names):
          return sum(len(x) for x in my_names) / len(my_names)
    
  • 如上面的示例所示,函数应该只做一件事,并且通常返回一个值。计算平均值和打印是两件事,其他地方的打印也是如此

  • 内置的max有一个key关键字,可以将longest_name替换为

      def longest_name(names):
          return max(names, key=len)
    

相关问题 更多 >