ホームページ > バックエンド開発 > Python チュートリアル > 集めておきたいPythonの練習問題30問(詳しい解説付き)

集めておきたいPythonの練習問題30問(詳しい解説付き)

王林
リリース: 2023-04-14 18:01:06
転載
1788 人が閲覧しました

集めておきたいPythonの練習問題30問(詳しい解説付き)

1. 文字列が "hello_world_yoyo" であるとすると、キュー ["hello","world","yoyo"] を取得するにはどうすればよいですか?

split 関数を使用して文字列を分割し、データをリスト型に変換します:

test = 'hello_world_yoyo'
print(test.split("_"))
12
ログイン後にコピー

結果:

['hello', 'world', 'yoyo']
ログイン後にコピー

2. リスト [“hello”, 「world ", "yoyo"]、リスト内の文字列を接続して文字列「hello_world_yoyo」を取得するにはどうすればよいですか?

結合関数を使用してデータを文字列に変換します:

test = ["hello", "world", "yoyo"]
print("_".join(test))
ログイン後にコピー

結果:

hello_world_yoyo
ログイン後にコピー

Python が提供する結合メソッドに依存しない場合は、次のこともできます。 for ループを使用して文字列を追加します。 String splicing ですが、" " を使用して文字列を接続すると、結果は新しいオブジェクトを生成します。 join を使用すると、結果は元のリストの要素を結合するだけなので、join はより複雑です。効率的。

for ループは次のように結合されます:

test = ["hello", "world", "yoyo"]
# 定义一个空字符串
j = ''
# 通过 for 循环打印出列表中的数据
for i in test:
 j = j + "_" + i
# 因为通过上面的字符串拼接,得到的数据是“_hello_world_yoyo”,前面会多一个下划线_,所以把这个下划线去掉
print(j.lstrip("_"))
ログイン後にコピー

3. 文字列 s の各スペースを " " に置き換えます。入力: s = "We are happy."、出力: "我々は満足している。"

replace 関数を使用して文字を置換します:

s = 'We are happy.'
print(s.replace(' ', '%20'))
12
ログイン後にコピー

結果:

We%20are%20happy.
ログイン後にコピー

4. Python で 99 の九九を出力するにはどうすればよいですか?

for ループ印刷:

for i in range(1, 10):
 for j in range(1, i+1):
 print('{}x{}={}t'.format(j, i, i*j), end='')
 print()
ログイン後にコピー

while ループ実装:

i = 1
while i <= 9:
 j = 1
 while j <= i:
 print("%d*%d=%-2d"%(i,j,i*j),end = ' ')# %d: 整数的占位符,'-2'代表靠左对齐,两个占位符
 j += 1
 print()
 i += 1
ログイン後にコピー

結果:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
ログイン後にコピー

5. 添字 0 からインデックス付けを開始し、単語「welcome」を見つけます。 " は文字列 "Hello, welcome to my world." に表示され、見つからない場合は -1 を返します。

def test():
 message = 'Hello, welcome to my world.'
 world = 'welcome'
 if world in message:
 return message.find(world)
 else:
 return -1
print(test())
ログイン後にコピー

結果:

7
ログイン後にコピー

6. 文字列「Hello, welcome to my world」に文字 w が現れる回数を数えます。

def test():
 message = 'Hello, welcome to my world.'
 # 计数
 num = 0
 # for 循环 message
 for i in message:
 # 判断如果 ‘w’ 字符串在 message 中,则 num +1
 if 'w' in i:
 num += 1
 return num
print(test())
# 结果
2
ログイン後にコピー

7. 文字列 str を入力し、n 回のみ出現する m 番目の文字を出力します。たとえば、文字列 gbgkkdehh で、1 回だけ出現する 2 番目の文字を検索し、結果を出力します: d

def test(str_test, num, counts):
 """
 :param str_test: 字符串
 :param num: 字符串出现的次数
 :param count: 字符串第几次出现的次数
 :return:
 """
 # 定义一个空数组,存放逻辑处理后的数据
 list = []
 # for循环字符串的数据
 for i in str_test:
 # 使用 count 函数,统计出所有字符串出现的次数
 count = str_test.count(i, 0, len(str_test))
 # 判断字符串出现的次数与设置的counts的次数相同,则将数据存放在list数组中
 if count == num:
 list.append(i)
 # 返回第n次出现的字符串
 return list[counts-1]
print(test('gbgkkdehh', 1, 2))
结果:
d
ログイン後にコピー

8. 文字列 a = “welcome to my world” に b = “world” という単語が含まれているかどうかを確認します。含まれている場合は True を返し、含まれていない場合は False を返します。

def test():
 message = 'welcome to my world'
 world = 'world'
 if world in message:
 return True
 return False
print(test())
结果:
True
ログイン後にコピー

9. 0 からカウントし、指定した文字列を出力します

def test():
 message = 'hi how are you hello world, hello yoyo!'
 world = 'hello'
 return message.find(world)
print(test())
结果:
15
ログイン後にコピー

10. 0 からカウントし、指定した文字列 A = “hello” in string B = “こんにちは、お元気ですかhello world, hello yoyo!」の場合、B に A が含まれていない場合は、-1 が出力されます。

def test(string, str):
 # 定义 last_position 初始值为 -1
 last_position = -1
 while True:
 position = string.find(str, last_position+1)
 if position == -1:
 return last_position
 last_position = position
print(test('hi how are you hello world, hello yoyo!', 'hello'))
结果:
28
ログイン後にコピー

11. 数値 a が与えられた場合、その数値が奇数か偶数かを判断します。

while True:
 try:
 # 判断输入是否为整数
 num = int(input('输入一个整数:'))
 # 不是纯数字需要重新输入
except ValueError:
 print("输入的不是整数!")
 continue
 if num % 2 == 0:
 print('偶数')
 else:
 print('奇数')
 break
结果:
输入一个整数:100
偶数
ログイン後にコピー

12. 名前を入力して、姓が Wang であるかどうかを判断します。

def test():
 user_input = input("请输入您的姓名:")
 if user_input[0] == '王':
 return "用户姓王"
 return "用户不姓王"
print(test())
结果:
请输入您的姓名:王总
用户姓王
ログイン後にコピー

13. 文字列が純粋な数値で構成されているかどうかを判断するにはどうすればよいですか?

ユーザーが入力したデータをPythonが提供する型変換を利用して浮動小数点数型に変換しますが、変換時に例外が発生した場合は純粋な数値でないと判断されます。

def test(num):
 try:
 return float(num)
 except ValueError:
 return "请输入数字"
print(test('133w3'))
ログイン後にコピー

14. 文字列 a = 「これは文字列の例です….wow!」 をすべて大文字に変換し、文字列 b = 「Welcome To My World」 をすべて小文字に変換します。

a = 'This is string example….wow!'
b = 'Welcome To My World'
print(a.upper())
print(b.lower())
ログイン後にコピー

15. 文字列 a = "welcome to my world" から先頭と末尾のスペースを削除します。

Python には、先頭と末尾のスペースを削除するために、strip() メソッド rstrip() が用意されています。末尾のスペースを削除し、lstrip () は先頭のスペースを削除し、replace(" ", "") はすべてのスペースを削除します。

a = 'welcome to my world '
print(a.strip())
ログイン後にコピー

これは、再帰によって実現することもできます:

def trim(s):
 flag = 0
 if s[:1]==' ':
 s = s[1:]
 flag = 1
 if s[-1:] == ' ':
 s = s[:-1]
 flag = 1
 if flag==1:
 returntrim(s)
 else:
 return s
print(trim('Hello world!'))
ログイン後にコピー

while ループを通して:

def trim(s):
 while(True):
 flag = 0
 if s[:1]==' ':
 s = s[1:]
 flag = 1
 if s[-1:] == ' ':
 s = s[:-1]
 flag = 1
 if flag==0:
 break
 return s
print(trim('Hello world!'))
ログイン後にコピー

16. String s = "ajldjlajfdljfddd"、重複を削除し、小さいものから小さいものへと進みます。大きなソート出力「adfjl」。

def test():
 s = 'ajldjlajfdljfddd'
 # 定义一个数组存放数据
 str_list = []
 # for循环s字符串中的数据,然后将数据加入数组中
 for i in s:
 # 判断如果数组中已经存在这个字符串,则将字符串移除,加入新的字符串
 if i in str_list:
 str_list.remove(i)
 str_list.append(i)
 # 使用 sorted 方法,对字母进行排序
 a = sorted(str_list)
 # sorted方法返回的是一个列表,这边将列表数据转换成字符串
 return "".join(a)
print(test())
结果:
adfjl
ログイン後にコピー

17. 次のパターン (ひし形) を出力します:

集めておきたいPythonの練習問題30問(詳しい解説付き)

def test():
 n = 8
 for i in range(-int(n/2), int(n/2) + 1):
 print(" "*abs(i), "*"*abs(n-abs(i)*2))
print(test())
结果:
 **
****
 ******
********
 ******
****
 **
ログイン後にコピー

18. 5 桁以内の正の整数を指定します (例: = 12346 )、それが何桁であるかを調べ、その桁を逆順に出力します。

class Test:
 # 计算数字的位数
 def test_num(self, num):
 try:
 # 定义一个 length 的变量,来计算数字的长度
 length = 0
 while num != 0:
 # 判断当 num 不为 0 的时候,则每次都除以10取整
 length += 1
 num = int(num) // 10
 if length > 5:
 return "请输入正确的数字"
 return length
 except ValueError:
 return "请输入正确的数字"
 # 逆序打印出个位数
 def test_sorted(self, num):
 if self.test_num(num) != "请输入正确的数字":
 # 逆序打印出数字
 sorted_num = num[::-1]
 # 返回逆序的个位数
 return sorted_num[-1]
print(Test().test_sorted('12346'))
结果:
1
ログイン後にコピー

19. 3 桁の数字がその数字の 3 乗の合計に等しい場合、それは水仙数字と呼ばれます。例: 153 = 13 53 33 したがって、153 は水仙の番号です。では、1000(3桁)以内の水仙の数を求める方法です。

def test():
 for num in range(100, 1000):
 i = num // 100
 j = num // 10 % 10
 k = num % 10
 if i ** 3 + j ** 3 + k ** 3 == num:
 print(str(num) + "是水仙花数")
test()
ログイン後にコピー

20. 1 2 3… 100 の合計を求めます。

i = 1
for j in range(101):
 i = j + i
print(i)
结果:
5051
ログイン後にコピー

21. 1-2 3-4 5-…-100 の値を計算します。

def test(sum_to):
 # 定义一个初始值
 sum_all = 0
 # 循环想要计算的数据
 for i in range(1, sum_to + 1):
 sum_all += i * (-1) ** (1 + i)
 return sum_all
if __name__ == '__main__':
 result = test(sum_to=100)
 print(result)
-50
ログイン後にコピー

22. 既存の計算式は 13 23 33 43 ……. n3 で、実装方法: 入力 n = 5 の場合、出力は 225 (対応する式: 13 23 33 43 53 = 225) です。

def test(n):
 sum = 0
 for i in range(1, n+1):
 sum += i*10+i
 return sum
print(test(5))
结果:
225
ログイン後にコピー

23. aの値は「hello」、bの値は「world」であることが知られていますが、aとbの値を交換してaの値を取得する方法は次のとおりです。 「world」になり、b の値は「hello」になります。

a = 'hello'
b = 'world'
c = a
a = b
b = c
print(a, b)
ログイン後にコピー

24. 配列が対称配列かどうかを判断するにはどうすればよいですか?

たとえば、[1, 2, 0, 2, 1]、[1, 2, 3, 3, 2, 1] などの配列はすべて対称配列です。 Python を使用して、False ではなく True を出力する対称配列であるかどうかを判断します。

def test():
 x = [1, 'a', 0, '2', 0, 'a', 1]
 # 通过下标的形式,将字符串逆序进行比对
 if x == x[::-1]:
 return True
 return False
print(test())
结果:
True
ログイン後にコピー

25. リスト a = [1,3,5,7,11] がある場合、それを逆にして [11,7,5,3,1] にして奇数を取得する方法数値[1,5,11]の値を配置しますか?

def test():
 a = [1, 3, 5, 7, 11]
 # 逆序打印数组中的数据
 print(a[::-1])
 # 定义一个计数的变量
 count = 0
 for i in a:
 # 判断每循环列表中的一个数据,则计数器中会 +1
 count += 1
 # 如果计数器为奇数,则打印出来
 if count % 2 != 0:
 print(i)
test()
结果:
[11, 7, 5, 3, 1]
1
5
11
ログイン後にコピー

26. リスト a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8] の数値を小さい順に並べ替えます。

a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8]
print(sorted(a))
结果:
[1, 1, 6, 6, 7, 8, 8, 8, 8, 9, 11]
ログイン後にコピー

27. リスト L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] の最大値と最小値を見つけます。

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
print(max(L1))
print(min(L1))
结果:
88
1
ログイン後にコピー

上記は、次のように Python に付属する関数を使用して実装されています。計算プログラムを自分で作成することもできます。

class Test(object):
 def __init__(self):
 # 测试的列表数据
 self.L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
 # 从列表中取第一个值,对于数据大小比对
 self.num = self.L1[0]
 def test_small_num(self, count):
 """
 :param count: count为 1,则表示计算最大值,为 2 时,表示最小值
 :return:
 """
 # for 循环查询列表中的数据
 for i in self.L1:
 if count == 1:
 # 循环判断当数组中的数据比初始值小,则将初始值替换
 if i > self.num:
 self.num = i
 elif count == 2:
 if i < self.num:
 self.num = i
 elif count != 1 or count != 2:
 return "请输入正确的数据"
 return self.num
print(Test().test_small_num(1))
print(Test().test_small_num(2))
结果:
88
1
ログイン後にコピー

28. 找出列表 a = [“hello”, “world”, “yoyo”, “congratulations”] 中单词最长的一个。

def test():
 a = ["hello", "world", "yoyo", "congratulations"]

 # 统计数组中第一个值的长度
 length = len(a[0])
 for i in a:
 # 循环数组中的数据,当数组中的数据比初始值length中的值长,则替换掉length的默认值
 if len(i) > length:
 length = i
 return length
print(test())
结果:
congratulations
ログイン後にコピー

29. 取出列表 L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] 中最大的三个值。

def test():
 L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
 return sorted(L1)[:3]
print(test())
结果:
[1, 2, 2]
ログイン後にコピー

30. 把列表 a = [1, -6, 2, -5, 9, 4, 20, -3] 中的数字绝对值。

def test():
 a = [1, -6, 2, -5, 9, 4, 20, -3]
 # 定义一个数组,存放处理后的绝对值数据
 lists = []
 for i in a:
# 使用 abs() 方法处理绝对值
 lists.append(abs(i))
 return lists
print(test())
结果:
[1, 6, 2, 5, 9, 4, 20, 3]
ログイン後にコピー

以上が集めておきたいPythonの練習問題30問(詳しい解説付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート