python - 来自用 Python 自动化无聊的东西的“逗号代码”程序
问题描述
我正在通过 Al Sweigart 的“Automate the Boring Stuff with Python”一书学习 Python。我正在完成关于列表的一章,并且我有一个名为“逗号代码”的程序提示:
假设您有一个这样的列表值:
spam = ['apples', 'bananas', 'tofu', 'cats']
编写一个函数,该函数将列表值作为参数并返回一个字符串,其中所有项目由逗号和空格分隔,并在最后一项之前插入和插入。例如,将前一个垃圾邮件列表传递给函数将返回
'apples, bananas, tofu, and cats'
. 但是您的函数应该能够处理传递给它的任何列表值。"
到目前为止,这是我的代码:
def commaCode(newList):
print(str(newList[:-1]) + 'and' + ' ' + str(newList[-1]))
return
nextlist = []
anotherlist = input('Enter a value')
while anotherlist != '':
nextlist = nextlist + list(anotherlist)
commaCode(nextlist)
我觉得这应该可行,但是每当我输入某种输入时,程序只会让我输入更多输入,但什么也没有发生。然后我尝试退出程序并询问是否要我“杀死程序”。我不确定我的代码有什么问题......我认为它可能与“while”语句有关,但我不确定如何解决它。
解决方案
好功夫。您的功能相当接近,但您while
将无限运行,因为anotherList
循环块内永远不会改变。nextlist
但是,将在此循环中继续扩展,用户传递的任何字符串都input()
分解为字符。最终,程序将耗尽内存并崩溃。
不要相信我的话:print
应该在循环块内终止循环的变量,并查看它在每次传递时所做的事情(重要的调试技能)。
有几种方法可以解决这个问题。下面的方法允许用户在每个循环通过时输入输入,break
如果为空,则其结果要么是循环,要么如果不是,则附加到用户输入的累积列表中。
def comma_code(items):
return ', '.join(items[:-1]) + ' and ' + items[-1]
items = []
while 1:
user_input = input('Enter a value: ')
if user_input == '':
break
items.append(user_input)
print(comma_code(items))
样品运行:
Enter a value: 1
Enter a value: 2
Enter a value: 3
Enter a value: 3
Enter a value: 4
Enter a value: 5
Enter a value:
1, 2, 3, 3, 4 and 5
请注意,变量名称snake_cased
不是camelCased
根据Python 编码标准。
我还删除了print
你commaCode
函数中的那个。这是一个副作用,通常是不可取的,因为该功能不是多用途的:它只将内容打印到标准输出,不能提供太多其他功能。如果您返回结果,调用者可以选择如何处理它(打印、反转、放入数据库……)。
另请注意,如果用户不输入任何内容或输入一项,您将分别得到崩溃或格式错误的输出。尝试将这些边缘情况作为练习来处理!
推荐阅读
- c# - 在 c# .net core 中创建自定义文件扩展名
- tmlanguage - 有没有办法防止(除了).tmLanguage 中“匹配”中的特定字符
- html - 将文本添加到边框而不添加间距
- php - 接收推送通知两次 firebase PHP 脚本
- jsp - 将 Web 应用程序与 IdentityServer 集成
- elasticsearch - 未找到“弹性搜索”模块
- ios - 如何修复——当权限处理程序已经在我的 Podfile 中时,IPHONEOS_DEPLOYMENT_TARGET 设置为 8.0?
- reactjs - 在 React Js 中更改 Segment 的图标
- c# - EF Core LINQ GROUPBY 然后选择获取实体的多个属性
- python - 将数组字典转换为单个熊猫数据框