Как перенести программу с паскаля на питон

Я пытаюсь перейти на Python. Вот что у меня есть на данный момент:

def ldExtractFromLine (ldline, post): post -= 1 # mjh t = [] s = ldline.strip() iT = 0; # mjh while s <> »: s = s.strip() + ‘ ‘ i = 0 # mjh while s[i] <> ‘ ‘: i += 1 # t[iT] = Copy(s, 1, i-1) # function Copy(const S: string; From: integer = 1; Count: integer = MaxInt): string; t.insert(iT, s[0:i-1+1]) # mjh iT += 1 s = s[i:(i+len(s)+1)] print «lala» result = » if post < iT: result = t[post] # mjh return result

Однако выполнение подпрограммы приводит к бесконечному напечатанному «лала» на стандартный вывод. Проблема в том, что списки Паскаля начинаются с индекса 1, а списки Python начинаются с индекса 0. Это меня действительно сбивает с толку. Кто-нибудь может найти мою ошибку? Переменная post представляет собой целое число, обычно меньше 20. Переменная ldline представляет собой строку, которая выглядит примерно как «1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat» .

Весь сценарий можно посмотреть здесь:

Программа на Паскале Угадай число. Переменные, случайные числа, условные переходы

Вот несколько примеров входных данных:

0 Safe House 0 Name: building_013_safehouse.ldr 0 Author: Kevin Loch 0 ROTATION CENTER 0 0 0 1 «Custom» 0 ROTATION CONFIG 0 0 1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat

Больше примеров входных данных можно найти здесь:

Читайте также:
Программы похожие на face up

Источник: question-it.com

Перевод кода с циклом из Pascal в Python

Я сделал такой перевод, но он не правильный, т.к выдает совершенно другие значения при одинаковых входных данных:

n = int(input()) c = 0 for n10 in range (0, n // 10): for n5 in range (0, n // 5): for n2 in range (0, n // 2): if n — 10 * n10 — 5 * n5 — 2 * n2 >= 0: c = c + 1 print(c)
Отслеживать
15.9k 3 3 золотых знака 24 24 серебряных знака 41 41 бронзовый знак
задан 19 ноя 2019 в 18:01
Mikey_mouse Mikey_mouse
179 6 6 серебряных знаков 17 17 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Ваша проблема в том, что в пайтоне range исключает последний индекс:

n = int(input()) c = 0 for n10 in range (0, n // 10 + 1): for n5 in range (0, n // 5 + 1): for n2 in range (0, n // 2 + 1): if n — 10 * n10 — 5 * n5 — 2 * n2 >= 0: c = c + 1 print(c)
Отслеживать
ответ дан 19 ноя 2019 в 19:54
15.9k 3 3 золотых знака 24 24 серебряных знака 41 41 бронзовый знак
Хм, очень логичное поведение.
20 ноя 2019 в 7:59

Порадуйте преподавателя переводом на Python в функциональном стиле:

from itertools import product, starmap from functools import reduce from operator import mul,add n = int(input(«n 1» при выполнении требуемого условия, а потом мы вычисляем его длину. В Python для списка a авполняется len(a) == a.__len__() .

Первый язык программирования: Python vs Pascal


Так что если не считать импортов то решение вышло в одну затейливую строчку ))

Отслеживать
ответ дан 20 ноя 2019 в 13:37
Vasyl Kolomiets Vasyl Kolomiets
3,991 5 5 золотых знаков 24 24 серебряных знака 45 45 бронзовых знаков

Читайте также:
С помощью сервисных программ на персональном компьютере решаются следующие задачи

  • python
  • pascal
    Важное на Мете

Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник: ru.stackoverflow.com

Python-сообщество

[RSS Feed]

  • Начало
  • » Центр помощи
  • » Помогите перевести с Паскаля на Питон, пожалуйста!

#1 Дек. 29, 2014 21:51:56

Помогите перевести с Паскаля на Питон, пожалуйста!

С наступающим Новым Годом, уважаемые форумчане! Помогите, пожалуйста, перевести с Паскаля на Питон
Вот задача:
Написать программу, которая квадратной матрице (10х10) находит произведение ненулевых диагональных элементов.
Моё решение на Паскале:
program abc;
var
a: array of longint;
i, j: byte;
mult: longint;
begin
randomize;
for i:=1 to 10 do begin
for j:=1 to 10 do begin
a := random(5);
write(a:4);
end;
writeln;
end;
mult := 1;
for i:=1 to 10 do
if a <> 0 then
mult := mult * a;
for i:=1 to 10 do
if (a <> 0) and (i <> 10-i+1) then
mult := mult * a;
writeln(mult);
readln;
end.

#2 Дек. 29, 2014 22:21:26

Помогите перевести с Паскаля на Питон, пожалуйста!

from random import randint matrix = [[randint(0, 10) for y in range(10)] for x in range(10)] m =1 for i in range(10): if matrix[i][i]: m *= matrix[i][i] print(m)

#3 Дек.

29, 2014 22:46:51

Помогите перевести с Паскаля на Питон, пожалуйста!

from random import randint matrix = [[randint(0, 10) for y in range(10)] for x in range(10)] m = [matrix[i][i] for i in range(10) if matrix[i][i]] m = reduce(lambda x, y: x*y, m) if m else 0 print(m)

Читайте также:
Как узнать свою очередь в жилищной программе

Alen а что если все диагональные элементы равны нулю? у Вас выдаст одникавый результат если все элементы равны нулю и если все элементы равны еденице!

Источник: python.su

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru