2015-09-19 5 views
1

Мой код:Как избежать повторения строк?

import random 
WORDS = ('python', 'football', 'facebook', 'photo') #list of words that will be riddled 
word = random.choice(WORDS) 
correct = word 
jumble = '' 
hint = 'hint' 
score = 0 
while word: 
    position = random.randrange(len(word)) 
    jumble += word[position] 
    word = word[:position] + word[(position + 1):] #creating jumble of correct words 
print('Welcome to the game "Anagrams"') 
print('Here`s your anagram:', jumble) #Welcoming and giving a jumble to a player 
guess = input('\nTry to guess the original word: ') 
if guess == correct: 
    score += 5 
    print('You won! Congratulations!') #end of game in case of right answer 
if guess == hint: #situation if player asks a hint 
    if correct == WORDS[0]: 
     print('snake') 
    elif correct == WORDS[1]: 
     print('sport game') 
    elif correct == WORDS[2]: 
     print('social network') 
    elif correct == WORDS[3]: 
     print('picture of something') 
    score += 1 
while guess != correct and guess != '': #situation if player is not correct 
    print('Sorry, you`re wrong :(') 
    guess = input('Try to guess the original word: ') 
print('Thank you for participating in game.') 
print('Your score is', score) 
input('\nPress Enter to end') 

Задавая намек строки:.

'К сожалению, you`re неправильно :('

повторы
Это выглядит следующим образом:

Попробуйте угадать оригинальное слово: hint
спортивная игра
К сожалению, you`re неправильно :(

Как сделать эта строка появляется только в случае неправильного предположения?

+0

'в то время как угадать = правильно угадать =«»и думаю:' ' печать! («К сожалению, you're неправильно :(»)' делает именно то, что вы хотите сделать –

+0

я пытался поставить там 'и думаю! = hint' , но в случае завершения этой программы при запросе подсказки – pookeeshtron

+1

Отступ кажется мне неправильным. Это только часть вашей игры? – Wolf

ответ

2

В вашем коде, когда игрок вводит hint, игрок получает подсказку, но затем программа проверяет строку 'hint' на слово correct. Конечно, 'hint' - неправильный ответ, поэтому ваша программа сообщает им, что это неправильно.

Просто для удовольствия, я немного оптимизировал ваш код и улучшил логику подсчета очков. :)

Ваше письмо-смешение for цикл довольно умный, но есть более эффективный способ сделать это, используя функцию random.shuffle. Эта функция перетасовывает список на месте. Поэтому нам нужно преобразовать выбранное слово в список, перетасовать его, а затем снова присоединиться к списку в строку.

Я также заменил логику ваших намеков.Вместо того, чтобы делать целую кучу if тестов, чтобы увидеть, какой намек идет с текущим словом, гораздо проще просто сохранить каждое слово и связанный с ним намек как кортеж.

import random 

#Words that will be riddled, and their hints 
all_words = (
    ('python', 'snake'), 
    ('football', 'sport game'), 
    ('facebook', 'social network'), 
    ('photo', 'picture of something'), 
) 

#Randomly choose a word 
word, hint = random.choice(all_words) 

#Jumble up the letters of word 
jumble = list(word) 
random.shuffle(jumble) 
jumble = ''.join(jumble)  

print('Welcome to the game "Anagrams"\n') 
print('You may ask for a hint by typing hint at the prompt') 
print('Wrong guesses cost 2 points, hints cost 1 point\n') 

print("Here's your anagram:", jumble) 

score = 0 
while True: 
    guess = input('\nTry to guess the original word: ') 
    if guess == word: 
     score += 5 
     print('You won! Congratulations!') 
     break 

    if guess == 'hint': 
     #Deduct a point for asking for a hint 
     score -= 1 
     print(hint) 
     continue 

    #Deduct 2 points for a wrong word 
    score -= 2 
    print('Sorry, you`re wrong :(') 

print('Thank you for participating in game.') 
print('Your score is', score) 
input('\nPress Enter to end') 
+0

мы возвращаемся к исходному вопросу о (не) повторяющихся строках ;-) – Wolf

+0

@Wolf: Да, когда я прочитал этот вопрос, я ожидал несколько [другой вопрос] (https: // en. wikipedia.org/wiki/Don%27t_repeat_yourself). :) –

+0

Да, это цель структуры :-) – Wolf

3

изменения вы в последний раз, а это:

while guess != correct and guess != '': 
    guess = input("Sorry, you`re wrong:(") 
+0

Как это решает проблему? –

+0

Антон хочет, чтобы в случае неправильного ответа появилось только следующее: Извините, вы ошибаетесь :( – LetzerWille

+0

@LetzerWille Я исправил отступы, надеюсь, что это поможет! И я думаю, что ваш ответ помогает решить проблему. – Wolf

1

Давайте попытаемся исправить некоторые проблемы:

это

if guess == hint: #situation if player asks a hint 

, вероятно, следует

elif guess == hint: #situation if player asks a hint 

А также это мне кажется неправильным

while guess != correct and guess != '': #situation if player is not correct 
    print('Sorry, you`re wrong :(') 
    guess = input('Try to guess the original word: ') 

следует, вероятно, изменилось в том, что (отступы важно):

guess = input('Try to guess the original word: ') 
if guess != correct and guess != '': #situation if player is not correct 
    print('Sorry, you`re wrong :(') 

Я не пробовал эти исправления в полной программе.

+0

Я не спускаюсь , но рассмотрите эту ситуацию, если пользователь угадывает правильное слово после подсказки? Не печатает поздравительные фразы. –

+0

Решает проблему, но создает новое: игрок только пытается ответить. – pookeeshtron

+0

@AhsanulHaque Я только пытался указать на большинство подозреваемых частей. В конце концов, эта программа, по-видимому, является всего лишь первым эскизом или доказательством концепции. BTW: я нашел игровую идею приятной (читайте внимательно, не понимая отступы). – Wolf

1

Ваша специальная логика для правильной догадки и для специального ввода "hint" запускается только один раз на самом первом предположении. После этого ваш цикл для неправильных значений всегда запускается. Я думаю, что вы хотите, чтобы переместить всю логику в петлю:

while True: # loop forever until a break statement is reached 
    guess = input('\nTry to guess the original word: ') 
    if guess == correct: 
     score += 5 
     print('You won! Congratulations!') 
     break # stop looping 
    if guess == hint: # special case, asking for a hint 
     if correct == WORDS[0]: 
      print('snake') 
     elif correct == WORDS[1]: 
      print('sport game') 
     elif correct == WORDS[2]: 
      print('social network') 
     elif correct == WORDS[3]: 
      print('picture of something') 
     score += 1 
    else: #situation if player is not correct, and not askng for a hint 
     print('Sorry, you`re wrong :(') 

Я ушел из ситуации, когда ваш код будет выйти из цикла на пустом входе. Если вы этого хотите, вы должны добавить его явно как дополнительный случай с оператором break.

+0

Это должно быть принятый anwser. –

+0

@AhsanulHaque у вас есть более близкий взгляд ** на [ответ LetzterWille] (http://stackoverflow.com/a/32669333/2932052)? – Wolf

+0

Проблема с этим ответом - логика оценки: если вы решил получить подсказку вместо того, чтобы просто догадываться, что вы получаете 6 очков вместо 5. – Wolf