Python - Расчет длины строки является неточным только для определенных строк - PullRequest
4 голосов
/ 16 апреля 2020

Я новичок в программировании и пытаюсь сделать основную игру c Палач. По какой-то причине при расчете длины строки из текстового файла в некоторых словах длина строки вычисляется неправильно. Некоторые строки имеют слишком высокие значения, а некоторые слишком низкие. Я не могу понять, почему. Я уже убедился, что в текстовом файле нет пробелов, поэтому он считается символом.

import random

#chooses word from textfile for hangman
def choose_word():
    words = []
    with open("words.txt", "r") as file:
        words = file.readlines()

        #number of words in text file
        num_words = sum(1 for line in open("words.txt"))
        n = random.randint(1, num_words)

        #chooses the selected word from the text file
        chosen_word = (words[n-1])
        print(chosen_word)

        #calculates the length of the word
        len_word = len(chosen_word)
        print(len_word)

choose_word()
#obama returns 5
#snake, turtle, hoodie, all return 7
#intentions returns 11
#racecar returns 8
words.txt

snake
racecar
turtle
cowboy
intentions
hoodie
obama

Ответы [ 5 ]

2 голосов
/ 16 апреля 2020

Используйте strip () .

string.strip (s [, chars])

Возвращает копию строки с начальными и конечными символами удален. Если символы не указаны или отсутствуют, пробельные символы удаляются. Если задано, а не None, символы должны быть строкой; символы в строке будут удалены с обоих концов строки, для которой вызывается этот метод.

Пример:

>>> ' Hello'.strip()
'Hello'

Попробуйте это:

import random

#chooses word from textfile for hangman
def choose_word():
    words = []
    with open("words.txt", "r") as file:
        words = file.readlines()

        #number of words in text file
        num_words = sum(1 for line in open("words.txt"))
        n = random.randint(1, num_words)

        #chooses the selected word from the text file
        chosen_word = (words[n-1].strip())
        print(chosen_word)

        #calculates the length of the word
        len_word = len(chosen_word)
        print(len_word)

choose_word()
1 голос
/ 16 апреля 2020

Вам нужно убрать все пробелы из каждой строки. Это удаляет начальные и конечные пробелы. Вот ваш исправленный код.

import random

# chooses word from textfile for hangman
def choose_word():
    words = []
    with open("./words.txt", "r") as file:
        words = file.readlines()

        # number of words in text file
        num_words = sum(1 for line in open("words.txt"))
        n = random.randint(1, num_words)

        # chooses the selected word from the text file
        # Added strip() to remove spaces surrounding your words
        chosen_word = (words[n-1]).strip()
        print(chosen_word)

        # calculates the length of the word
        len_word = len(chosen_word)
        print(len_word)

choose_word()
1 голос
/ 16 апреля 2020

Я предполагаю, что файл .txt содержит одно слово в строке и без запятых.

Возможно, попробуйте изменить некоторые вещи здесь:

Во-первых, обратите внимание, что метод readlines () возвращает список со всеми строками, но также с новой строкой "\ n".

# This deletes the newline from each line
# strip() also matches new lines as  Hampus Larsson suggested
words = [x.strip() for x in file.readlines()]

Вы можете вычислить количество слов по длине самого списка words:

num_words = len(words)

Вам не нужны скобки, чтобы получить случайное слово

chosen_word = words[n]

Теперь оно должно работать правильно!

0 голосов
/ 16 апреля 2020

в файле каждого слова имеет \n для обозначения новой строки. чтобы вырезать это, вы должны заменить:

chosen_word = (words[n-1])

на

chosen_word = (words[n-1][:-1])

это будет отрезать последние две буквы выбранного слова!

0 голосов
/ 16 апреля 2020

Вы читаете случайную строку из текстового файла. Возможно, у вас есть пробелы в некоторых строках после слов в этих строках. Например, слово «змея» записывается в файле как «змея», поэтому оно имеет длину 7.

. Чтобы решить его, вы можете либо:

A) Вручную или Сценарий удаления пробелов в файле

B) Когда вы читаете случайную строку из текста, прежде чем проверять длину слова, пишите: chosen_word = chosen_word.replace(" ", ""). Это удалит пробелы из вашего слова.

...