Pythonの基礎練習問題について
基礎強化練習問題(サンプルコード付)
GitHub-jack・・・(クリックジャンプ)
練習:華氏温度を摂氏温度に変換します.
ヒント:華氏温度から摂氏温度への変換式は、C=(F−32)÷1.8 C=(F−32)div 1.8 C=(F−32)÷1.8である.
参考答案:
練習:円の半径を入力して、周長と面積を計算します.
参考答案:
練習:年を入力して閏年かどうかを判断します.
参考答案:
練習:英製単位インチと公製単位センチを交換します.
参考答案:
練習:パーセンテージ成績を等級制成績に変換する.
要求:入力した成績が90点以上(90点を含む)であればAを出力し、80点-90点(90点を含まない)でBを出力し、70点-80点(80点を含まない)でCを出力し、60点-70点(70点を含まない)でDを出力し、60点以下でEを出力する.
参考答案:
練習:3辺の長さを入力し、三角形を構成できれば周長と面積を計算します.
参考答案:
練習:正の整数を入力して素数を判断します.
ヒント:素数とは、1と自身でのみ除算できる1より大きい整数を指します.
参考答案:
練習:2つの正の整数を入力し、最大公約数と最小公倍数を計算します.
ヒント:2つの数の最大公約数は2つの数の共通因子の中で最大の数です.2つの数の最小公倍数は、同時に2つの数で除算できる最小の数である.
参考答案:
練習:次のような三角形のパターンを印刷します.
参考答案:
水仙の数を探す.
説明:水仙の花の数はまた超完全な数字の不変量、ナルシスト数、べき乗数、アームストロング数と呼ばれて、それは1つの3桁で、この数字の各桁の上の数字の立方の和はちょうどそれ自身に等しくて、例えば:1 3+5 3+3=153 1^3+5^3+3+3^3=53 13+53+53+33=53.
練習:最大公約数と最小公倍数を求める関数を計算します.
参考答案:
練習:1つの数が文数であるかどうかを判断する関数を実現します.
参考答案:
練習:1つの数が素数かどうかを判断する関数を実現します.
参考答案:
練習:入力した正の整数が回文素数であるかどうかを判断するプログラムを書きます.
参考答案:
注意:上記のプログラムから、コードに繰り返される機能と相対的に独立した機能を関数に抽出すると、これらの関数を組み合わせてより複雑な問題を解決することができます.これも、関数を定義し、使用する理由の1つの非常に重要な原因です.
練習:スクリーンにランニングライトの文字を表示します.
参考答案:
練習:関数を設計して指定された長さの検証コードを生成し、検証コードは大文字と小文字と数字で構成されています.
参考答案:
練習:関数を設計して、指定したファイル名の接尾辞名を返します.
参考答案:
練習:関数を設計して、入力されたリストの最大および2番目に大きい要素の値を返します.
参考答案:
練習:指定された年月日を計算するのはこの年の何日目ですか.
参考答案:
練習:楊輝三角を印刷します.
参考答案:
練習1:クラス記述デジタルクロックを定義します.
参考答案:
練習2:クラス記述平面上の点を定義し、点を移動し、別の点までの距離を計算する方法を提供します.
参考答案:
例1:ウルトラマンが怪獣を撃つ.
ケース2:トランプゲーム.
説明:上記のコードに基づいて簡単なトランプゲームを書いてみることができます.例えば、21時(Black Jack)、ゲームのルールは自分でネットで探すことができます.
ケース3:給与決済システム.
Day 9になると、多くのものが食べきれないので、勉強を続けて今の段階のボトルネックを突破する時期があることを望んでいます.学習資料に感謝・・・
❤
GitHub-jack・・・(クリックジャンプ)
練習:華氏温度を摂氏温度に変換します.
ヒント:華氏温度から摂氏温度への変換式は、C=(F−32)÷1.8 C=(F−32)div 1.8 C=(F−32)÷1.8である.
参考答案:
f = float(input(' : '))
c = (f - 32) / 1.8
print('%.1f = %.1f ' % (f, c))
練習:円の半径を入力して、周長と面積を計算します.
参考答案:
radius = float(input(' : '))
perimeter = 2 * 3.1416 * radius
area = 3.1416 * radius * radius
print(' : %.2f' % perimeter)
print(' : %.2f' % area)
練習:年を入力して閏年かどうかを判断します.
参考答案:
year = int(input(' : '))
# \
is_leap = year % 4 == 0 and year % 100 != 0 or \
year % 400 == 0
print(is_leap)
練習:英製単位インチと公製単位センチを交換します.
参考答案:
""
value = float(input(' : '))
unit = input(' : ')
if unit == 'in' or unit == ' ':
print('%f = %f ' % (value, value * 2.54))
elif unit == 'cm' or unit == ' ':
print('%f = %f ' % (value, value / 2.54))
else:
print(' ')
練習:パーセンテージ成績を等級制成績に変換する.
要求:入力した成績が90点以上(90点を含む)であればAを出力し、80点-90点(90点を含まない)でBを出力し、70点-80点(80点を含まない)でCを出力し、60点-70点(70点を含まない)でDを出力し、60点以下でEを出力する.
参考答案:
score = float(input(' : '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print(' :', grade)
練習:3辺の長さを入力し、三角形を構成できれば周長と面積を計算します.
参考答案:
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
print(' : %f' % (a + b + c))
p = (a + b + c) / 2
area = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print(' : %f' % (area))
else:
print(' ')
練習:正の整数を入力して素数を判断します.
ヒント:素数とは、1と自身でのみ除算できる1より大きい整数を指します.
参考答案:
from math import sqrt
num = int(input(' : '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('%d ' % num)
else:
print('%d ' % num)
練習:2つの正の整数を入力し、最大公約数と最小公倍数を計算します.
ヒント:2つの数の最大公約数は2つの数の共通因子の中で最大の数です.2つの数の最小公倍数は、同時に2つの数で除算できる最小の数である.
参考答案:
x = int(input('x = '))
y = int(input('y = '))
# x y x y
if x > y:
# y x, x y
x, y = y, x
#
for factor in range(x, 0, -1):
if x % factor == 0 and y % factor == 0:
print('%d %d %d' % (x, y, factor))
print('%d %d %d' % (x, y, x * y // factor))
break
練習:次のような三角形のパターンを印刷します.
*
**
***
****
*****
*
**
***
****
*****
*
***
*****
*******
*********
参考答案:
row = int(input(' : '))
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()
for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()
for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()
水仙の数を探す.
説明:水仙の花の数はまた超完全な数字の不変量、ナルシスト数、べき乗数、アームストロング数と呼ばれて、それは1つの3桁で、この数字の各桁の上の数字の立方の和はちょうどそれ自身に等しくて、例えば:1 3+5 3+3=153 1^3+5^3+3+3^3=53 13+53+53+33=53.
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
練習:最大公約数と最小公倍数を求める関数を計算します.
参考答案:
def gcd(x, y):
""" """
(x, y) = (y, x) if x > y else (x, y)
for factor in range(x, 0, -1):
if x % factor == 0 and y % factor == 0:
return factor
def lcm(x, y):
""" """
return x * y // gcd(x, y)
練習:1つの数が文数であるかどうかを判断する関数を実現します.
参考答案:
def is_palindrome(num):
""" """
temp = num
total = 0
while temp > 0:
total = total * 10 + temp % 10
temp //= 10
return total == num
練習:1つの数が素数かどうかを判断する関数を実現します.
参考答案:
def is_prime(num):
""" """
for factor in range(2, int(num ** 0.5) + 1):
if num % factor == 0:
return False
return True if num != 1 else False
練習:入力した正の整数が回文素数であるかどうかを判断するプログラムを書きます.
参考答案:
if __name__ == '__main__':
num = int(input(' : '))
if is_palindrome(num) and is_prime(num):
print('%d ' % num)
注意:上記のプログラムから、コードに繰り返される機能と相対的に独立した機能を関数に抽出すると、これらの関数を組み合わせてより複雑な問題を解決することができます.これも、関数を定義し、使用する理由の1つの非常に重要な原因です.
練習:スクリーンにランニングライトの文字を表示します.
参考答案:
import os
import time
def main():
content = ' …………'
while True:
#
os.system('cls') # os.system('clear')
print(content)
# 200
time.sleep(0.2)
content = content[1:] + content[0]
if __name__ == '__main__':
main()
練習:関数を設計して指定された長さの検証コードを生成し、検証コードは大文字と小文字と数字で構成されています.
参考答案:
import random
def generate_code(code_len=4):
"""
:param code_len: ( 4 )
:return:
"""
all_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
last_pos = len(all_chars) - 1
code = ''
for _ in range(code_len):
index = random.randint(0, last_pos)
code += all_chars[index]
return code
練習:関数を設計して、指定したファイル名の接尾辞名を返します.
参考答案:
def get_suffix(filename, has_dot=False):
"""
:param filename:
:param has_dot:
:return:
"""
pos = filename.rfind('.')
if 0 < pos < len(filename) - 1:
index = pos if has_dot else pos + 1
return filename[index:]
else:
return ''
練習:関数を設計して、入力されたリストの最大および2番目に大きい要素の値を返します.
参考答案:
def max2(x):
m1, m2 = (x[0], x[1]) if x[0] > x[1] else (x[1], x[0])
for index in range(2, len(x)):
if x[index] > m1:
m2 = m1
m1 = x[index]
elif x[index] > m2:
m2 = x[index]
return m1, m2
練習:指定された年月日を計算するのはこの年の何日目ですか.
参考答案:
def is_leap_year(year):
"""
:param year:
:return: True False
"""
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0
def which_day(year, month, date):
"""
:param year:
:param month:
:param date:
:return:
"""
days_of_month = [
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
][is_leap_year(year)]
total = 0
for index in range(month - 1):
total += days_of_month[index]
return total + date
def main():
print(which_day(1980, 11, 28))
print(which_day(1981, 12, 31))
print(which_day(2018, 1, 1))
print(which_day(2016, 3, 1))
if __name__ == '__main__':
main()
練習:楊輝三角を印刷します.
参考答案:
def main():
num = int(input('Number of rows: '))
yh = [[]] * num
for row in range(len(yh)):
yh[row] = [None] * (row + 1)
for col in range(len(yh[row])):
if col == 0 or col == row:
yh[row][col] = 1
else:
yh[row][col] = yh[row - 1][col] + yh[row - 1][col - 1]
print(yh[row][col], end='\t')
print()
if __name__ == '__main__':
main()
練習1:クラス記述デジタルクロックを定義します.
参考答案:
from time import sleep
class Clock(object):
""" """
def __init__(self, hour=0, minute=0, second=0):
"""
:param hour:
:param minute:
:param second:
"""
self._hour = hour
self._minute = minute
self._second = second
def run(self):
""" """
self._second += 1
if self._second == 60:
self._second = 0
self._minute += 1
if self._minute == 60:
self._minute = 0
self._hour += 1
if self._hour == 24:
self._hour = 0
def show(self):
""" """
return '%02d:%02d:%02d' % \
(self._hour, self._minute, self._second)
def main():
clock = Clock(23, 59, 58)
while True:
print(clock.show())
sleep(1)
clock.run()
if __name__ == '__main__':
main()
練習2:クラス記述平面上の点を定義し、点を移動し、別の点までの距離を計算する方法を提供します.
参考答案:
from math import sqrt
class Point(object):
def __init__(self, x=0, y=0):
"""
:param x:
:param y:
"""
self.x = x
self.y = y
def move_to(self, x, y):
"""
:param x:
"param y:
"""
self.x = x
self.y = y
def move_by(self, dx, dy):
"""
:param dx:
"param dy:
"""
self.x += dx
self.y += dy
def distance_to(self, other):
"""
:param other:
"""
dx = self.x - other.x
dy = self.y - other.y
return sqrt(dx ** 2 + dy ** 2)
def __str__(self):
return '(%s, %s)' % (str(self.x), str(self.y))
def main():
p1 = Point(3, 5)
p2 = Point()
print(p1)
print(p2)
p2.move_by(-1, 2)
print(p2)
print(p1.distance_to(p2))
if __name__ == '__main__':
main()
例1:ウルトラマンが怪獣を撃つ.
from abc import ABCMeta, abstractmethod
from random import randint, randrange
class Fighter(object, metaclass=ABCMeta):
""" """
# __slots__
__slots__ = ('_name', '_hp')
def __init__(self, name, hp):
"""
:param name:
:param hp:
"""
self._name = name
self._hp = hp
@property
def name(self):
return self._name
@property
def hp(self):
return self._hp
@hp.setter
def hp(self, hp):
self._hp = hp if hp >= 0 else 0
@property
def alive(self):
return self._hp > 0
@abstractmethod
def attack(self, other):
"""
:param other:
"""
pass
class Ultraman(Fighter):
""" """
__slots__ = ('_name', '_hp', '_mp')
def __init__(self, name, hp, mp):
"""
:param name:
:param hp:
:param mp:
"""
super().__init__(name, hp)
self._mp = mp
def attack(self, other):
other.hp -= randint(15, 25)
def huge_attack(self, other):
""" ( 50 )
:param other:
:return: True False
"""
if self._mp >= 50:
self._mp -= 50
injury = other.hp * 3 // 4
injury = injury if injury >= 50 else 50
other.hp -= injury
return True
else:
self.attack(other)
return False
def magic_attack(self, others):
"""
:param others:
:return: True False
"""
if self._mp >= 20:
self._mp -= 20
for temp in others:
if temp.alive:
temp.hp -= randint(10, 15)
return True
else:
return False
def resume(self):
""" """
incr_point = randint(1, 10)
self._mp += incr_point
return incr_point
def __str__(self):
return '~~~%s ~~~
' % self._name + \
' : %d
' % self._hp + \
' : %d
' % self._mp
class Monster(Fighter):
""" """
__slots__ = ('_name', '_hp')
def attack(self, other):
other.hp -= randint(10, 20)
def __str__(self):
return '~~~%s ~~~
' % self._name + \
' : %d
' % self._hp
def is_any_alive(monsters):
""" """
for monster in monsters:
if monster.alive > 0:
return True
return False
def select_alive_one(monsters):
""" """
monsters_len = len(monsters)
while True:
index = randrange(monsters_len)
monster = monsters[index]
if monster.alive > 0:
return monster
def display_info(ultraman, monsters):
""" """
print(ultraman)
for monster in monsters:
print(monster, end='')
def main():
u = Ultraman(' ', 1000, 120)
m1 = Monster(' ', 250)
m2 = Monster(' ', 500)
m3 = Monster(' ', 750)
ms = [m1, m2, m3]
fight_round = 1
while u.alive and is_any_alive(ms):
print('======== %02d ========' % fight_round)
m = select_alive_one(ms) #
skill = randint(1, 10) #
if skill <= 6: # 60%
print('%s %s.' % (u.name, m.name))
u.attack(m)
print('%s %d .' % (u.name, u.resume()))
elif skill <= 9: # 30% ( )
if u.magic_attack(ms):
print('%s .' % u.name)
else:
print('%s .' % u.name)
else: # 10% ( )
if u.huge_attack(m):
print('%s %s.' % (u.name, m.name))
else:
print('%s %s.' % (u.name, m.name))
print('%s %d .' % (u.name, u.resume()))
if m.alive > 0: #
print('%s %s.' % (m.name, u.name))
m.attack(u)
display_info(u, ms) #
fight_round += 1
print('
======== !========
')
if u.alive > 0:
print('%s !' % u.name)
else:
print(' !')
if __name__ == '__main__':
main()
ケース2:トランプゲーム.
import random
class Card(object):
""" """
def __init__(self, suite, face):
self._suite = suite
self._face = face
@property
def face(self):
return self._face
@property
def suite(self):
return self._suite
def __str__(self):
if self._face == 1:
face_str = 'A'
elif self._face == 11:
face_str = 'J'
elif self._face == 12:
face_str = 'Q'
elif self._face == 13:
face_str = 'K'
else:
face_str = str(self._face)
return '%s%s' % (self._suite, face_str)
def __repr__(self):
return self.__str__()
class Poker(object):
""" """
def __init__(self):
self._cards = [Card(suite, face)
for suite in '♠♥♣♦'
for face in range(1, 14)]
self._current = 0
@property
def cards(self):
return self._cards
def shuffle(self):
""" ( )"""
self._current = 0
random.shuffle(self._cards)
@property
def next(self):
""" """
card = self._cards[self._current]
self._current += 1
return card
@property
def has_next(self):
""" """
return self._current < len(self._cards)
class Player(object):
""" """
def __init__(self, name):
self._name = name
self._cards_on_hand = []
@property
def name(self):
return self._name
@property
def cards_on_hand(self):
return self._cards_on_hand
def get(self, card):
""" """
self._cards_on_hand.append(card)
def arrange(self, card_key):
""" """
self._cards_on_hand.sort(key=card_key)
# -
def get_key(card):
return (card.suite, card.face)
def main():
p = Poker()
p.shuffle()
players = [Player(' '), Player(' '), Player(' '), Player(' ')]
for _ in range(13):
for player in players:
player.get(p.next)
for player in players:
print(player.name + ':', end=' ')
player.arrange(get_key)
print(player.cards_on_hand)
if __name__ == '__main__':
main()
説明:上記のコードに基づいて簡単なトランプゲームを書いてみることができます.例えば、21時(Black Jack)、ゲームのルールは自分でネットで探すことができます.
ケース3:給与決済システム.
"""
、
15000
150
1200 5%
"""
from abc import ABCMeta, abstractmethod
class Employee(object, metaclass=ABCMeta):
""" """
def __init__(self, name):
"""
:param name:
"""
self._name = name
@property
def name(self):
return self._name
@abstractmethod
def get_salary(self):
"""
:return:
"""
pass
class Manager(Employee):
""" """
def get_salary(self):
return 15000.0
class Programmer(Employee):
""" """
def __init__(self, name, working_hour=0):
super().__init__(name)
self._working_hour = working_hour
@property
def working_hour(self):
return self._working_hour
@working_hour.setter
def working_hour(self, working_hour):
self._working_hour = working_hour if working_hour > 0 else 0
def get_salary(self):
return 150.0 * self._working_hour
class Salesman(Employee):
""" """
def __init__(self, name, sales=0):
super().__init__(name)
self._sales = sales
@property
def sales(self):
return self._sales
@sales.setter
def sales(self, sales):
self._sales = sales if sales > 0 else 0
def get_salary(self):
return 1200.0 + self._sales * 0.05
def main():
emps = [
Manager(' '), Programmer(' '),
Manager(' '), Salesman(' '),
Salesman(' '), Programmer(' '),
Programmer(' ')
]
for emp in emps:
if isinstance(emp, Programmer):
emp.working_hour = int(input(' %s : ' % emp.name))
elif isinstance(emp, Salesman):
emp.sales = float(input(' %s : ' % emp.name))
# get_salary ( )
print('%s : ¥%s ' %
(emp.name, emp.get_salary()))
if __name__ == '__main__':
main()
Day 9になると、多くのものが食べきれないので、勉強を続けて今の段階のボトルネックを突破する時期があることを望んでいます.学習資料に感謝・・・
❤