是否可以根据用户输入添加到字符串 python

Is it possible to add to a string based on user input python

我目前正在开发一个接受用户输入的程序,根据用户输入的不同,字符串应该会发生变化。我想知道是否有一种方法可以在收到用户输入后更改字符串。以下是示例代码。

title = input('Title: ')
subtitle = input('Subtitle: ')
chapter = input('Chapter: ')
subchapter = input('Subchapter: ')

title1 = '/title{}'.format(title)
subtitle1 = '/subtitle{}'.format(subtitle)
chapter1 = '/chapter{}'.format(chapter)
subchapter1 = '/subchapter{}'.format(subchapter)

output_txt = title1+subtitle1+chapter1+subchapter1
print(output_txt)
  1. 用户输入:应该是一个数字
  2. 然后输入将被格式化为它的透视字符串
  3. 根据用户输入的字符串,output_txt,应该进行相应的格式化

场景 1: 用户输入

Title: 4
Subtitle:
Chapter: 12
Subchapter: 1

output_txt应该是

output_txt = '/title4/chapter12/subchapter1'

场景二: 用户输入

Title: 9
Subtitle: 
Chapter: 2
Subchapter: 

output_txt应该是

output_txt = '/title9/chapter2'

我一直在使用 if elif,但由于可能有多种组合,我认为这样做并不是最有效的。

非常感谢任何正确方向的帮助或提示

您可以在将字符串值分配给变量时使用 if-else 条件

title = input('Title: ')
subtitle = input('Subtitle: ')
chapter = input('Chapter: ')
subchapter = input('Subchapter: ')

title1 = '/title{}'.format(title) if title else ''
subtitle1 = '/subtitle{}'.format(subtitle) if subtitle else ''
chapter1 = '/chapter{}'.format(chapter) if chapter else ''
subchapter1 = '/subchapter{}'.format(subchapter) if subchapter else ''

output_txt = title1+subtitle1+chapter1+subchapter1
print(output_txt)

给大家介绍一下typer

typer 将帮助您使用 python 轻松创建 CLI

您的代码可以这样处理

import typer

# By defining the data type, we can set the input only a number
def main(title: int = None, subtitle: int = None, chapter: int = None, subchapter: int = None):
    title = f'/title{title}' if title else ''
    subtitle = f'/subtitle{subtitle}' if subtitle else ''
    chapter = f'/chapter{chapter}' if chapter else ''
    subchapter = f'/subchapter{subchapter}' if subchapter else ''

    output_txt = title+subtitle+chapter+subchapter
    print(output_txt)


if __name__ == "__main__":
    typer.run(main)

您只需要 运行 通过为每个需要的参数添加参数即可

python script_name.py --title 5 --chapter 2 --subchapter 7

为了完整起见,您可能还想测试一个数字。

# Test

def test_for_int(testcase):
    try:
        int(testcase)
        return True
    except ValueError: # Strings
        return False
    except TypeError: # None
        return False

# Get the inputs

title = input('Title: ')
subtitle = input('Subtitle: ')
chapter = input('Chapter: ')
subchapter = input('Subchapter: ')

# Run the tests and build the string

output_txt = ''
if test_for_int(title):
    output_txt += '/title{}'.format(title)
if test_for_int(subtitle):
    output_txt += '/subtitle{}'.format(subtitle)
if test_for_int(chapter):
    output_txt += '/chapter{}'.format(chapter)
if test_for_int(subchapter):
    output_txt += '/subchapter{}'.format(subchapter)
    
print(output_txt)

你可以这样做...

def get_user_input(message):
    user_input = input(message+' : ')
    if user_input == '' or user_input.isdigit() == True:
        return user_input
    else:
        return False


def f():
    title   = ''
    while True:
        title = get_user_input('title')
        if title == False:
            continue
        else:
            break



    subtitle   = ''
    while True:
        subtitle = get_user_input('subtitle')
        if subtitle == False:
            continue
        else:
            break


    chapter   = ''
    while True:
        chapter = get_user_input('chapter')
        if chapter == False:
            continue
        else:
            break

    subchapter   = ''
    while True:
        subchapter = get_user_input('subchapter')
        if subchapter == False:
            continue
        else:
            break

    s  = ''
    s += '/title'+str(title) if title != '' else ''
    s += '/subtitle'+str(subtitle) if subtitle != '' else ''
    s += '/chapter'+str(chapter) if chapter != '' else ''
    s += '/subchapter'+str(subchapter) if subchapter != '' else ''

    return s

输出...

title : 1
subtitle : 2
chapter : 3
subchapter : 4

'/title1/subtitle2/chapter3/subchapter4'

title : 1
subtitle : 
chapter : 3
subchapter : 

'/title1/chapter3'

显然,您需要为特定目的对代码进行少量更改。

这是一种使用正则表达式进行输入验证和列表推导来收集输入并构建输出字符串的方法。

import re


def get_input( label: str = None ) -> int:
    entry = input(label + ': ')

    if re.match(r'^\d+$', entry) is None:
        return None

    if int(entry) <= 0:
        return None

    return int(entry)


tpl_labels = ('Title', 'Subtitle', 'Chapter', 'Subchapter')

lst_values = [get_input(x) for x in tpl_labels]

output_txt = '/'.join([f'{x.lower()}{y}' for x, y in zip(tpl_labels, lst_values) if y])

if not output_txt:
    print('No valid responses given.')
else:
    output_txt = '/' + output_txt
    print(output_txt)

get_input() 函数要求用户输入的每个值都是正整数。所有其他输入都被静默忽略(并返回 None)。