【问题标题】:Python How to accept only certain words with user inputPython如何只接受用户输入的某些单词
【发布时间】:2023-03-30 05:25:02
【问题描述】:

好的,现在脚本正在运行,我想感谢大家的建议。

这是最终脚本

import smtplib 
import xbmc
import xbmcgui
import datetime

list = ("mary", "james", "tilly")

kb = xbmc.Keyboard('', 'Please type in your name to continue')
kb.doModal()
typedin = kb.getText()

if typedin.lower() in list:
    now = datetime.datetime.now()
    runtime = now.strftime("%Y-%m-%d %H:%M")

    content = xbmc.executebuiltin('kb.getText()')
    mailserver = smtplib.SMTP("smtp.mail.com",25)
    mailserver.ehlo()
    mailserver.starttls()
    mailserver.login('mail@somemail.com','somepwd')
    mailserver.sendmail('mail@somemail.com','mail@somemail.com',typedin + ' has run proggy ' + runtime)
    mailserver.close()
    xbmc.executebuiltin("Notification(An email has been sent, yada yada yada,()")
else:
    xbmc.executebuiltin("THE INPUTTED NAME, IS NOT VALID,()")
    xbmcgui.Dialog().ok(
    "Please try again - User name not correct",
    "The input yada yada",
    "yada yada",
    "yada yada")

所以,只是为了让您知道我正在使用在端口 25 上工作的实时邮件。 在 windows 和 linux 以及 openelec 上都进行了尝试和测试。工作正常。

【问题讨论】:

  • 当用户输入不在列表中时,你希望发生什么?
  • 目前只是使用 else 退出: xbmc.executebuiltin("Notification(Name is not in list, exiting,()") xbmc.executebuiltin("ActivateWindow(10000,return)" )
  • xbmc.executebuiltin("您使用的名称,不在列表中,()" 已经在代码底部,但如果名称不匹配则不会运行。
  • 我没有安装这些东西,所以无法测试它,但是用 'if tpyedin.lower() not in str1:'代替 else 怎么样?

标签: python list input xbmc kodi


【解决方案1】:

也许类似于 if 语句?所以只有给出其中一个词,然后做其余的,否则不接受。

list = ["simon", "tom", "sarah", "peter", "jane"]
word = input()
if word.lower() in list:
    print('Ok')
    #continue with rest of program
else:
     print('No, sorry')

【讨论】:

  • 我会尽快处理并回复。谢谢萤火虫
【解决方案2】:

在希望从用户那里获取输入的情况下,最好的做法是使用如下 raw_input 语句执行 while 循环:

word_list = ['simon', 'tom', 'sarah', 'peter', 'jane', 'sue']

def get_word():
    """returns the word that the user chooses"""
    print("Please choose a name from the following:")
    w_string = ""
    for w in word_list:
        w_string += w + ', '
    #print the word list without a comma at the end.
    print(w_string[:-1])

    while True:
        word = raw_input("\n> ") #use input("\n> ") for python3
        #If you wish to accept something like "SiMoN      " or "S Imon "
        #have the following line:
        word = word.lower().strip()
        if word in word_list:
            return word
        else:
            print("'%s' is not in the list of words. Please choose from the following:\n%s" % (word, w_string[:-1]))

word = get_word()
print(word)

【讨论】:

  • 我已经编辑了显示进度的脚本。 50% 现在工作。更多信息在第一篇文章的底部。感谢您的帮助
  • xbmc.executebuiltin("您使用的名称,不在列表中,()" 看起来不对。我不知道您为什么不使用打印,但我认为这应该看起来像:xbmc.executebuiltin("您使用的名称,不在列表中")
  • 粘贴了最终代码。感谢大家的建议。解决了
【解决方案3】:

我最好的选择是不要将列表转换为字符串并检查输入的名称是否在列表中,例如..

import smtplib
import xbmc
import xbmcgui
import datetime

nameList = ["simon", "tom", "sarah", "peter", "jane"]
kb = raw_input('Please type in your name to continue:')

if kb in nameList:
    now = datetime.datetime.now()
    runtime = now.strftime("%Y-%m-%d %H:%M")

    content = xbmc.executebuiltin('kb.getText()')
    mailserver = smtplib.SMTP("smtp.mail.com",25)
    mailserver.ehlo()
    mailserver.starttls()
    mailserver.login('mail@somemail.com','somepwd')
    mailserver.sendmail('mail@somemail.com','mail@somemail.com',typedin + 'has run keymail ' + runtime)
    mailserver.close()
else:
    print ("The Name %s, was not in the list")%kb

并且不要使用 list 和 str 作为变量名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多