2013-08-02 2 views
1

Я пытаюсь написать программу, которая запрашивает у пользователя ввод строки без использования глобальных переменных. Если строка имеет круглые скобки только бок о бок, то она четная. если у него есть буквы, цифры или круглые скобки, то это неравномерно. Например,() и()() являются четными, тогда как (() и (pie) нет. Ниже я пишу до сих пор. Должен ли я создавать несколько функций для этой проблемы?Создание скобок даже?

def recursion(): 
    string = str(input("Enter your string: ")) 
    if string == "(" or ")": 
     print("The string is even.") 
    else: 
     print("The string is not even.") 
+0

Думаю, вам нужно прочитать книгу о вступительном Python. Эта проблема может быть решена в одной функции, но она будет использовать рекурсивную. –

+2

Ваше условие 'if' всегда будет оцениваться как' True', поскольку в '' '' '' '' '' '' '' '' '' '' '' '' '' ''. –

+0

вы должны сначала подумать о своем алгоритме. Так как сейчас программа практически не работает. –

ответ

0

Я соберу много информации в комментариях в ответ.

во-первых, в вашем публикуемую коде линии

if string == "(" or ")": 

всегда будет вычисляться True потому непустая строка всегда True. То, что вы написали, эквивалентно:

if (string == "(") or ")": 

, который, следовательно, эквивалентно

if (string == "(") or True: 

, который всегдаTrue.

Далее, так как кажется, что вы просто хотите проверить, если ваша строка состоит только из множеств «()», вы можете использовать предложение Джон Клементс из not string.replace('()',''):

if not string.replace('()', ''): 

Давайте посмотрим на что это делает:

>>> not '()'.replace('()', '') 
True 
>>> not '()()'.replace('()', '') 
True 
>>> not '(()'.replace('()', '') 
False 
>>> not '(pie)'.replace('()', '') 
False 

Последнее, что вы не должны вызывать переменную строку, потому что она затеняет модуль в стандартной библиотеке. Что-то вроде user_given_string может работать.

Подводя итог:

def recursion(): 
    user_given_string = input("Enter your string: ") 
    if not user_given_string.replace('()', ''): 
     print("The string is even.") 
    else: 
     print("The string is not even.") 
+0

Ah , Я понимаю строку «even = not string.replace ('()', ''). Это лучший способ сделать это, я думаю. – CamelopardalisRex

0

Нет, вам не нужно, чтобы сделать несколько функций для этого. Фактически, я лично просто сделаю это:

def recursion(): 
    print("The string is not even." if input("Enter your string: ").replace('()','') else "The string is even.") 

На самом деле нет необходимости иметь 6-строчную функцию для этой работы. Вместо этого используйте ternary statement, как я сделал, чтобы сделать его кратким.

Кроме того, просто хотел упомянуть об этом, нет необходимости делать:

str(input()) 

потому что input всегда возвращает строку в Python 3.x.

1

Действительно полезный скрипт stdlib shlex обеспечивает этот тип разбора автоматически и позволяет настроить поведение.

+0

Вау, я понятия не имел об этом. Спасибо. Удивительно, какая часть языка Я использую каждый день, когда я действительно не знаю, что скрыто под обложками ... – jdotjdot

 Смежные вопросы

  • Нет связанных вопросов^_^