【问题标题】:automatically add space in input before hitting enter在输入之前自动在输入中添加空格
【发布时间】:2017-02-02 23:44:19
【问题描述】:

我对 python 的经验很少,我相信我的标题甚至是不正确的措辞。我有一个程序,当您键入一个键列表并按 Enter 时,它会播放一个音符。但是,要使其正常工作,您需要在每个键之间按空格键。我想让它接受说 eflkjh 而不是 e f l k j h。我该怎么做?

soundBinary = input(" > ")
for note in soundBinary.split():

    if note == "q":          #rest
        freq = 37
    elif note == "w":        #b
        freq = 280
    elif note == "e":        #b
        freq = 300
    elif note == "r":        #b
        freq = 320
    elif note == "t":        #b
        freq = 340
    elif note == "y":        #b
        freq = 360
    elif note == "u":        #b
        freq = 380
    elif note == "i":        #b
        freq = 400
    elif note == "o":        #b
        freq = 440
    elif note == "p":        #b
        freq = 460
    elif note == "a":        #b
        freq = 480
    elif note == "s":        #b
        freq = 500
    elif note == "d":        #b
        freq = 520
    elif note == "f":        #b
        freq = 540
    elif note == "g":        #b
        freq = 560
    elif note == "h":        #b
        freq = 580
    elif note == "j":        #high c
        freq = 600
    elif note == "k":        #low c
        freq = 620
    elif note == "l":        #d
        freq = 640
    elif note == "z":        #e
        freq = 660
    elif note == "x":        #f
        freq = 680
    elif note == "c":        #g
        freq = 700
    elif note == "v":        #a
        freq = 720
    elif note == "b":        #b
        freq = 740
    elif note == "n":        #b
        freq = 760
    elif note == "m":        #b
        freq = 780    

    winsound.Beep(freq, rate)

【问题讨论】:

  • 如果不想要空格,为什么要在它们上面分割字符串?
  • 您输入的每个字母都必须沿整个列表级联,直到找到True 的条件。用字典肯定会更好。

标签: python string audio input space


【解决方案1】:

尝试以下方法:

for note in soundBinary:
    if note == "q":
        ....

例子:

string = "abcdefg"
for char in string:
    print char

输出:

scottsmudger@ns207588:~ $ python test.py
a
b
c
d
e
f
g

【讨论】:

    【解决方案2】:

    两部分:

    (1) 只遍历输入字符串的字符:

    for note in soundBinary:
    

    这会按顺序为您提供字符,而无需拆分任何内容。

    (2) 建立一个参考字典,并将其用作查找列表:

    note_id : {
        'q':37, 'w':280, 'e':300, 'r':320, 't':340, 'y': 360,
        'u':380 # et cetera
    }
    

    现在,您的程序在上述循环中使用它:

    for note in soundBinary:
        winsound.Beep( note_id[note] )
    

    这会让你动起来吗?将该参考列表放在程序的顶部会使实际的逻辑流程更易于阅读。

    【讨论】:

    • 所以实际上我需要做的就是删除 .split()。在我发布这个之前,我在网上搜索了大约一个小时。谢谢你们!当我问编码问题时,我总是像个白痴一样。
    • 那只是无知,通过研究和提问来纠正。哦,看!你了那部分!请记住,我们大多数人回答问题都很擅长,因为我们已经犯了你遇到的错误。我们中的一些人已经做了好几次了,只是为了确保...... :-)
    • 另外,请注意,支持社区可以为您提供一些额外的反馈和学习。不要孤立地编程;当你把自尊扔到最底层的抽屉里时,你可以学到很多东西。在它学会和别人一起玩之前不要让它出去。 :-)
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2014-12-21
    • 2021-06-15
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多