You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python输入验证(含英文词典校验)与自动生成短篇故事求助

Python新手:单词校验、变量逻辑与故事生成问题

需求

  • 创建first_name、generic_location、whole_number、plural_noun四个变量,自动生成短篇故事
  • 除whole_number外,其余变量输入需为真实英文单词
  • 通过合法输入的判断结果,控制故事是否输出

现有代码

first_name = input("Enter a first name."); 
if first_name.isalpha():
    first_name = True; 
    print(first_name); 
else:
    first_name = False; 
    print("Please use only letters."); 
whole_number = input("Enter a whole number."); 
if whole_number.isdigit():
    whole_number = True; 
    print(whole_number); 
else:
    whole_number = False; 
    print("Please use only numbers."); 
plural_noun = input("Enter a plural noun."); 
if plural_noun.isalpha():
    plural_noun = True; 
    print(plural_noun); 
else:
    plural_noun = False; 
    print("Please use only letters."); 
generic_location = input("Enter a generic location."); 
if generic_location.isalpha(): 
    generic_location = True; 
    print(generic_location); 
else:
    generic_location = False; 
    print("Please use only letters."); 
print(end=''); 
if(first_name, whole_number, plural_noun, generic_location == True):
    print(first_name, "buys", whole_number, "different types of", plural_noun, "at", generic_location, "."); 
else: 
    print("Oops please double check your answers!"); 

疑问

  • 将变量设为True/False来控制故事输出的写法是否正确?
  • 是否需要将短篇故事设为变量,避免print语句冗余?
  • 如何验证输入为真实英文单词(而非仅字母组成的字符串)?

解决方案

1. 变量赋值与条件判断的修正

你当前的写法有核心问题:把存储用户输入内容的变量直接改成了布尔值True/False,导致后续输出故事时无法获取原始输入内容。正确的做法是分离输入内容和验证状态:

  • 用xxx变量存储用户输入的原始内容
  • 用xxx_valid变量存储该输入是否合法的布尔值

同时,最后条件判断的写法错误,(first_name, whole_number, plural_noun, generic_location == True)是一个元组表达式,无论内容如何都会被判定为True。正确的写法是检查所有验证状态变量都为True。

2. 故事内容是否设为变量

如果故事仅需输出一次,直接用print没问题;但如果后续需要重复调用、修改格式,将故事定义为字符串变量会更灵活。推荐使用f-string格式化,可读性和维护性更强。

3. 真实英文单词的校验

可以借助nltk库的英文词库实现校验,步骤如下:

  • 安装nltk:pip install nltk
  • 下载词库并编写校验函数

修改后的完整代码示例

import nltk
nltk.download('words')
from nltk.corpus import words

# 初始化词库集合,转小写避免大小写问题
word_set = set(word.lower() for word in words.words())

def is_real_english_word(input_str):
    # 处理带空格的情况(比如generic_location可能是"coffee shop")
    words_in_input = input_str.lower().split()
    return all(word in word_set for word in words_in_input)

# 获取输入并验证
first_name = input("Enter a first name: ")
first_name_valid = is_real_english_word(first_name) and first_name.isalpha()
if not first_name_valid:
    print("Please enter a real English first name using only letters.")

whole_number = input("Enter a whole number: ")
whole_number_valid = whole_number.isdigit()
if not whole_number_valid:
    print("Please enter only numbers.")

plural_noun = input("Enter a plural noun: ")
plural_noun_valid = is_real_english_word(plural_noun) and plural_noun.isalpha()
if not plural_noun_valid:
    print("Please enter a real English plural noun using only letters.")

generic_location = input("Enter a generic location: ")
generic_location_valid = is_real_english_word(generic_location)
if not generic_location_valid:
    print("Please enter a real English location.")

# 生成并输出故事
if first_name_valid and whole_number_valid and plural_noun_valid and generic_location_valid:
    story = f"{first_name} buys {whole_number} different types of {plural_noun} at {generic_location}."
    print(story)
else:
    print("Oops please double check your answers!")

内容的提问来源于stack exchange,提问作者invertdefault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:14:54